MFC+halcon实现相机外部触发时的超时问题

本文介绍了在MFC环境下,使用Halcon库处理相机外部触发时遇到的超时问题。首先探讨了通过注册回调函数SetFramegrabberCallback来解决,但由于C++中缺乏类似C#的委托机制,实现起来较为困难。然后,文章提供了一种通过try-catch异常处理机制来忽略timeout错误的方法,避免程序中止。在实际应用中,为了避免因外部触发信号未输入导致的死循环,建议在开启相机时设置为连续采集模式,待信号输入后再切换为外部触发。
摘要由CSDN通过智能技术生成

工业相机常用的工作模式一般为连续采集和外部触发。工作在连续采集模式时,要进行图像处理和显示,一般在多线程中调用grab_image_async函数异步抓取图像,在界面线程中设置定时器读取图像,并用于显示和图像处理。若工作在外部触发模式,采用这种方法则容易出现timeout问题,如何解决呢?

一、注册回调函数SetFramegrabberCallback

这种方法应该是外部触发模式的最佳方法,可以在曝光完成或传输完成后执行回调函数,及时抓取图像并进行后续处理。然而现有采用注册回调函数方法的博文均是采用C#开发的,用到了委托(delegate)机制,而C++不具有这种委托,几乎没有在MFC中开发的。
Halcon中的回调函数的声明如下:
set_framegrabber_callback( : : AcqHandle, CallbackType, CallbackFunction, UserContext : ),推荐的回调类型有exception、exposure_end、exposure_start、transfer_end等几种,具体相机支持的回调类型可通过get_framegrabber_param算子获取。
C#实现注册回调函数可参考:
https://blog.csdn.net/huan_126/article/details/80253411
在C++中复现这种回调时面临一个问题,即没有delegate,查找资料,有人发布了一个仿C# delegate的开源类,参见:
https://www.codeproject.com/Articles/11464/Yet-Another-C-style-Delegate-Class-in-Standard-C
采用其提供的委托功能,成功实现了C++中的委托,然后相机的回调依然没有实现。
查看Halcon帮助文档,set_framegrabber_callback算子在C++中的声明有三种:

// Signature
void SetFramegrabberCallback(const HTuple& AcqHandle, const HTuple& CallbackType, const HTuple& CallbackFunction, 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值