halcon 相机外触发

很多情况下,我们在使用工业相机时,不能使用相机自带的SDK(或者是我们太懒了,不希望写SDK这么麻烦),所以很多人会选择halcon的Image Acquisition助手,简单,通用,速度快,简直是神器.

但是在实际的应用中,会发现一个严重的问题,如果需要使用相机的外部触发,那么会出现什么情况呢?


,毫无疑问,会超时.

分析一下,默认的grab_timeout值为5000,那么如果设置了外部触发,当grab_image_async (Image, AcqHandle, -1)在5s内没有采集到图像的话,就会抛出异常,显而易见,这是不应该发生的.


那么如何处理这个问题呢?直接先上代码和结果



(由于测试的时候用的是线阵相机,所有是这样的效果,但是结果ok)

附上关键代码

while (true)
    try
    grab_image_async (Image, AcqHandle, -1)
    * Image Acquisition 01: Do something
    catch(exception)
        continue
    endtry
endwhile

这里最好再设置一下超时的值,最好设置小一点,这样触发后采集的精度高一些.设想如果超时5s,那么有可能刚循环开始采集时,触发了外部信号,那么必须要等到异常(5s后)才执行采集,显然是不合理了.

在C#中,为了防止主程序假死,最好开个线程执行循环.



                //获取相机句柄
                HOperatorSet.OpenFramegrabber("GigEVision", 0, 0, 0, 0, 0, 0, "progressive", -1, "default", -1,"false", "default", "00111cf59efc_TeledyneDALSA_SpyderGigEColourCame", 0, -1,out AcqHandle);
                //帧触发模式(获取开始采集的时间)
                HOperatorSet.SetFramegrabberParam(AcqHandle,"FrameStartTriggerMode","On");
                HOperatorSet.SetFramegrabberParam(AcqHandle,"grab_timeout",100);
                HOperatorSet.SetFramegrabberParam(AcqHandle,"LineSelector","Line1");
                HOperatorSet.SetFramegrabberParam(AcqHandle,"LineFormat","TTL");


                HOperatorSet.GrabImageStart(AcqHandle, -1);
                //开一个线程等待采集
                Thread thre = new Thread(loopGrab);
                thre.Start();
            }
        
        }


        //等待采集线程
        private void loopGrab()
        {
            while (true)
            {
                try
                {
                    HOperatorSet.GrabImageAsync(out img, AcqHandle, -1);
                    //如果采集到图像,执行以下
                    HOperatorSet.DispObj(img, mainWindow);
                    halconExecute(true);
                }
                catch (Exception ex)
                {
                    continue;
                }


            }
        }
  • 5
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值