海康工业相机的halcon适配层(SDK驱动)使用测试

这个适配层的作用是作为SDK的Halcon插件。

何在Halcon导出代码中实现连续采集、软触发采集、硬触发采集。

有了这个东西,就可以用halcon的方式来调用SDK的功能。


这个适配层的介绍你可以在SDK安装后,在其目录下找到。

image.png

不过这个手册讲的是怎么在C++中调用的,勇哥在后面的介绍中用halcon的代码来演示的。


注意:虽然SDK目录下只提供了halcon18的导入文件,如下图:

image.png

但是其它这个halcon18的文件也适用于halcon19.11的。这一点勇哥反复安装了18,19两个版本测试过的。


还有一点很重要:

SDK开发包要安装2019年较新的版本,否则你在halcon中根本无法使用HMV3rdParty驱动 (根本找不到它). 

安装完毕后下图中左边是较新的版本,右边是较老的版本。

image.png

下图中上面蓝线的SDK是旧版本,红线所示是新版本。

image.png


2020/9/11勇哥注:

==============

误人子弟,勇哥紧急修正一下!!

MV Viewer是大华相机的官方工具

MVS 是海康相机的官方工具


本文所述的内容,其实都是讲的大华相机的SDK插件,而海康相机的SDK插件名字为MVision。

但是奇怪的是,本文内容的测试是用海康相机测试的,毫无问题哦。

也就是说海康相机的程序换成海康的程序不用任何修改的!!

海康和大华究竟是什么关系?!

==============


2021/1/17勇哥注:

借系统重装的机会,补充一下本文档。

大华的叫:hAcqHMV3rdParty.dll

海康的是:hAcqMVision.dll

勇哥在本篇文档用的是hAcqHMV3rdParty.dll,虽然测试相机用的海康,也适用。


复制到halcon箭头所指目录。

微信截图_20210117132818.png

先用大华(上)或者海康(下)程序调一下相机,让它可以显示图像。

image.png

然后打开halcon,自动检测,会发现“HMV3rdParty”。这时候你就可以愉快的看文章后面的内容了。

image.png



关于SDK的手册, 如果你用的也是C#, 请参考下图所示的版本: 

image.png




(一)实现连续采集

acqname:='HMV3rdParty'
info_framegrabber(acqname, 'device', info, cameras)

open_framegrabber ('HMV3rdParty', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', cameras[0], 0, -1, AcqHandle)

set_framegrabber_param(AcqHandle, 'TriggerMode', 'Off')
while(1)
   grab_image (Image, AcqHandle) 
endwhile

close_framegrabber (AcqHandle)


(二)实现软触发

acqname:='HMV3rdParty'
info_framegrabber(acqname, 'device', info, cameras)

open_framegrabber ('HMV3rdParty', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', cameras[0], 0, -1, AcqHandle)

*按手册,下一句是设置帧触发,但这样写会报告设置值出错
*set_framegrabber_param(AcqHandle, 'TriggerSelector', 'FrameStart')
*按下面这样写不报错,但FrameBurstStart这个值手册中又查不到。什么鬼?
*set_framegrabber_param(AcqHandle, 'TriggerSelector','FrameBurstStart')
*开启触发模式
set_framegrabber_param(AcqHandle, 'TriggerMode', 'On')
*设置触发方式:软触发触发源,Line1、Software等,即软件触发或者硬件信号触发
set_framegrabber_param(AcqHandle,'TriggerSource','Software')
*开始异步抓图,触发方式采图是不可以使用同步读取grab_image的,会报错。
grab_image_start(AcqHandle, -1)

set_framegrabber_param(AcqHandle,'TriggerSoftware','')
grab_image_async(Image, AcqHandle, -1) 

close_framegrabber (AcqHandle)


(三)实现硬件触发


acqname:='HMV3rdParty'
info_framegrabber(acqname, 'device', info, cameras)

open_framegrabber ('HMV3rdParty', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', cameras[0], 0, -1, AcqHandle)

*按手册,下一句是设置帧触发,但这样写会报告设置值出错
*set_framegrabber_param(AcqHandle, 'TriggerSelector', 'FrameStart')
*按下面这样写不报错,但FrameBurstStart这个值手册中又查不到。什么鬼?
*set_framegrabber_param(AcqHandle, 'TriggerSelector','FrameBurstStart')
*开启触发模式
set_framegrabber_param(AcqHandle, 'TriggerMode', 'On')
*设置触发方式为Line1
set_framegrabber_param(AcqHandle,'TriggerSource','Line0')
*设置取图超时时间为-1(永久等待)
set_framegrabber_param(AcqHandle,'grab_timeout',-1)

*开始异步取流
grab_image_start(AcqHandle, -1)

*这时候会在下面这句死等Line0的外部触发信号
grab_image_async(Image, AcqHandle, -1) 

close_framegrabber (AcqHandle)


勇哥用PLC的一个输出点接相机的Line0做为触发信号,按一个按钮进行动作。

image.png

在没按按钮之前程序是在下图红色划线处那句死等的,当按下按钮后,程序捕捉到一帧图像,运行结束。


image.png


之前勇哥写了一个海康相机的SDK操作类, 各位可以对比看看, 就知道这种halcon适配层的操作把SDK编程弄得多么简单化了.

见下面贴子:

海康工业相机操作类 hikccdHelper version1.0  




说个题外话:

海康相机还有一个问题是,非法断线后好像是死掉了,再开软件重连也不行,非得断电才行。

也不知道用这种halcon适配层能否杜绝这种问题呢?

这个还是未知数。


2020/9/27号勇哥注:

告诉大家一个好消息,使用这种halcon适配层可以完全杜绝那种非法退出程序后,相机再无法连接上必须断电重启的问题。

即使是在VS中不退出程序而是直接中止程序调试,也不会有问题,更别说是程序崩溃了!!



--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
  • 评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864