一、相机硬件接线图
二、pylon软件设置
三、halcon软触发相机拍照
四、C#联合Halcon实现外部触发回调函数采集图像
HalconDotNet.HalconAPI.HFramegrabberCallback delegateCallback; //定义回调函数委托 //开启相机 HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive", -1, "default", -1, "false", "default", "Devin", 0, -1, out hv_AcqHandle); //下面开启硬触发 HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "TriggerMode", "On"); HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "TriggerSource", "Line1"); //下面设置连续采集,上升沿触发,曝光模式等 HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "AcquisitionMode", "Continuous"); HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "TriggerSelector", "FrameStart"); HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "TriggerActivation", "RisingEdge"); HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "ExposureMode", "Timed"); //设置曝光时间 HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "ExposureTime", 80000.0); //下面为设置用不超时 HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "grab_timeout", -1); //给委托绑定 delegateCallback = MyCallbackFunction; private int test = 1;//随便定义的一个变量,后面会取其地址带入回调函数的user_context //回调函数 public int MyCallbackFunction(IntPtr handle, IntPtr context, IntPtr user_context) { try { HOperatorSet.GrabImage(out img, hv_AcqHandle); if (this.hWindowControl1.InvokeRequired)//线程亲和性判定 { this.Invoke(new MethodInvoker(() => { HOperatorSet.DispObj(img, this.hWindowControl1.HalconWindow); img.Dispose(); }));//把图像显示出来(这里是委托方式显示) } else { HOperatorSet.DispObj(img, this.hWindowControl1.HalconWindow);//把图像显示出来 img.Dispose(); } return 0; } catch (Exception ex) { // MessageBox.Show(ex.Message);//显示错误 return -1; } } IntPtr ptr = Marshal.GetFunctionPointerForDelegate(delegateCallback);//取回调函数的地址 IntPtr ptr1 = GCHandle.Alloc(test, GCHandleType.Pinned).AddrOfPinnedObject();//取test变量的地址 HOperatorSet.SetFramegrabberCallback(hv_AcqHandle, "LineStatus", ptr, ptr1);//注册回调函数
转载自:
https://blog.csdn.net/IntegralforLove/article/details/94722689
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


