设置首页收藏本站
开启左侧

Halcon与C#联合开发,相机回调函数怎么不生效

[复制链接]
麦田呐喊 发表于 2023-12-5 20:40:34 | 显示全部楼层 |阅读模式
这是相机查到支持的事件
  1. AcquisitionStart
  2. AcquisitionEnd
  3. FrameTrigger
  4. ExposureEnd
  5. Acquisitio...ordTrigger
  6. LinelRisingEdge
  7. LinelFallingEdge
  8. FrameTriggerReady
  9. ExposureStart
复制代码

用set_framegrabber_callback算子注册回调函数。
这是我的代码:
  1. int data=0;
  2. public override string RegisterCallback()
  3.         {
  4.             try
  5.             {
  6.                 //开启事件触发      
  7.                 HOperatorSet.SetFramegrabberParam(CameraHandle, "EventSelector", "ExposureEnd");
  8.                 HOperatorSet.SetFramegrabberParam(CameraHandle, "EventNotification", "On");
  9.                 delegateCallback = MyCallbackFunction;
  10.                 IntPtr ptr = Marshal.GetFunctionPointerForDelegate(delegateCallback);//取回调函数的地址
  11.                 IntPtr ptr1 = GCHandle.Alloc(data, GCHandleType.Pinned).AddrOfPinnedObject();//取test变量的地址
  12.                 HOperatorSet.SetFramegrabberCallback(CameraHandle, "exposure_end", ptr, ptr1);//注册回调函数
  13.             }catch (Exception ex)
  14.             {
  15.                 return "回调函数注册失败"+ ex.Message;
  16.             }
  17.             return "";
  18.         }


  19. public int MyCallbackFunction(IntPtr handle, IntPtr user_context, IntPtr context)
  20.        {

  21.               MessageBox.Show("测试");
  22.               return 0;
  23.        }
复制代码

在相机连接后,使用RegisterCallback函数(没有抛出异常),在触发软拍照后,发现进不去回调函数。请教各位大神,问题到底在哪?

奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 麦田呐喊 发表于 2023-12-5 21:03:55 | 显示全部楼层
我用算子get_framegrabber_callback分别读取了'exposure_end','exposure_start','transfer_end'都报异常:
HALCON error #5334: Image acquisition: callback type not supported in operator get_framegrabber_callback。

代码:
  1. try {
  2.                 HOperatorSet.GetFramegrabberCallback(mhCamera.CameraHandle, "exposure_end", out value, out a);
  3.                 showMes(value.ToString());
  4.                 showMes(a.ToString());
  5.             }
  6.             catch (Exception e2) { showMes(e2.Message); }
  7.             try
  8.             {
  9.                 HOperatorSet.GetFramegrabberCallback(mhCamera.CameraHandle, "transfer_end", out value, out a);
  10.                 showMes(value.ToString());
  11.                 showMes(a.ToString());
  12.             }
  13.             catch (Exception e2) { showMes(e2.Message); }
  14.             try
  15.             {
  16.                 HOperatorSet.GetFramegrabberCallback(mhCamera.CameraHandle, "exposure_start", out value, out a);
  17.                 showMes(value.ToString());
  18.                 showMes(a.ToString());
  19.             }
  20.             catch (Exception e2) { showMes(e2.Message); }
  21.             try
  22.             {
  23.                 HOperatorSet.GetFramegrabberCallback(mhCamera.CameraHandle, "exception", out value, out a);
  24.                 showMes(value.ToString());
  25.                 showMes(a.ToString());
  26.             }
  27.             catch (Exception e2) { showMes(e2.Message); }
复制代码

是相机不支持回调函数吗?

点评

lcz
有源代码吗  发表于 2023-12-6 09:44
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2023-12-6 09:29:47 | 显示全部楼层
直接使用相机SDK开发吧,Halcon的通用库问题会比较多,不要花太多时间折腾它这个回调,用自带的早就解决了这个问题。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
lcz 发表于 2023-12-6 09:45:27 | 显示全部楼层
Criss 发表于 2023-12-6 09:29
直接使用相机SDK开发吧,Halcon的通用库问题会比较多,不要花太多时间折腾它这个回调,用自带的早就解决了 ...

可以好用谢谢
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 麦田呐喊 发表于 2023-12-6 10:50:51 | 显示全部楼层
Criss 发表于 2023-12-6 09:29
直接使用相机SDK开发吧,Halcon的通用库问题会比较多,不要花太多时间折腾它这个回调,用自带的早就解决了 ...

嗯嗯,这个相机是1几年的,不知道是不是比较老,还是用SDK吧
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 麦田呐喊 发表于 2023-12-6 10:55:14 | 显示全部楼层
Criss 发表于 2023-12-6 09:29
直接使用相机SDK开发吧,Halcon的通用库问题会比较多,不要花太多时间折腾它这个回调,用自带的早就解决了 ...

版主打打,请教一下grab_image_async算子,这个算子异步采集的话,如果在一个循环中一直执行这个算子,在没有触发拍照的情况下(没有采集图像),这个算子是开启N条异步采集线程还是即时执行了N次,实际都只会开启一条异步采集的线程?
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2023-12-6 12:26:23 | 显示全部楼层
麦田呐喊 发表于 2023-12-6 10:55
版主打打,请教一下grab_image_async算子,这个算子异步采集的话,如果在一个循环中一直执行这个算子,在 ...

这个我就不是很清楚了,你可以HDevelop菜单里点击“执行”->“线程视图/调用堆栈”看看线程分配情况。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表