这个适配层的作用是作为SDK的Halcon插件。
何在Halcon导出代码中实现连续采集、软触发采集、硬触发采集。
有了这个东西,就可以用halcon的方式来调用SDK的功能。
这个适配层的介绍你可以在SDK安装后,在其目录下找到。
不过这个手册讲的是怎么在C++中调用的,勇哥在后面的介绍中用halcon的代码来演示的。
注意:虽然SDK目录下只提供了halcon18的导入文件,如下图:
但是其它这个halcon18的文件也适用于halcon19.11的。这一点勇哥反复安装了18,19两个版本测试过的。
还有一点很重要:
SDK开发包要安装2019年较新的版本,否则你在halcon中根本无法使用HMV3rdParty驱动 (根本找不到它).
安装完毕后下图中左边是较新的版本,右边是较老的版本。
下图中上面蓝线的SDK是旧版本,红线所示是新版本。
2020/9/11勇哥注:
==============
误人子弟,勇哥紧急修正一下!!
MV Viewer是大华相机的官方工具
MVS 是海康相机的官方工具
本文所述的内容,其实都是讲的大华相机的SDK插件,而海康相机的SDK插件名字为MVision。
但是奇怪的是,本文内容的测试是用海康相机测试的,毫无问题哦。
也就是说海康相机的程序换成海康的程序不用任何修改的!!
海康和大华究竟是什么关系?!
==============
2021/1/17勇哥注:
借系统重装的机会,补充一下本文档。
大华的叫:hAcqHMV3rdParty.dll
海康的是:hAcqMVision.dll
勇哥在本篇文档用的是hAcqHMV3rdParty.dll,虽然测试相机用的海康,也适用。
复制到halcon箭头所指目录。
先用大华(上)或者海康(下)程序调一下相机,让它可以显示图像。
然后打开halcon,自动检测,会发现“HMV3rdParty”。这时候你就可以愉快的看文章后面的内容了。
关于SDK的手册, 如果你用的也是C#, 请参考下图所示的版本:
(一)实现连续采集
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做为触发信号,按一个按钮进行动作。
在没按按钮之前程序是在下图红色划线处那句死等的,当按下按钮后,程序捕捉到一帧图像,运行结束。
之前勇哥写了一个海康相机的SDK操作类, 各位可以对比看看, 就知道这种halcon适配层的操作把SDK编程弄得多么简单化了.
见下面贴子:
海康工业相机操作类 hikccdHelper version1.0
说个题外话:
海康相机还有一个问题是,非法断线后好像是死掉了,再开软件重连也不行,非得断电才行。
也不知道用这种halcon适配层能否杜绝这种问题呢?
这个还是未知数。
2020/9/27号勇哥注:
告诉大家一个好消息,使用这种halcon适配层可以完全杜绝那种非法退出程序后,相机再无法连接上必须断电重启的问题。
即使是在VS中不退出程序而是直接中止程序调试,也不会有问题,更别说是程序崩溃了!!
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

