一、相機硬件接線圖
2號引腳接傳感器的觸發信號引腳,5號與傳感器共地連接。
二、pylon軟件設置
三、halcon軟觸發相機拍照
Halcon采集助手設置軟觸發:
1.set_framegrabber_param (AcqHandle, 'TriggerMode', 'On')
2.set_framegrabber_param (AcqHandle, 'TriggerSource', 'Software')
還有注意就是,軟觸發不要設置grab_timeout采集超時,否則會一直卡住Halcon的,硬觸發可以開啟!
那么怎么觸發呢?點擊下面紅色方框里面的TriggerSoftWare就可以觸發采集了!
不能在Halcon里面用代碼實現觸發采集,因為采集圖像是同步進行的。
可以使用C#聯合Halcon開發,在C#里面利用set_framegrabber_callback設置回調方式進行,Halcon里面是不支持的!
四、C#聯合Halcon實現外部觸發回調函數采集圖像
1 HalconDotNet.HalconAPI.HFramegrabberCallback delegateCallback; //定義回調函數委托 2
3
4 //開啟相機
5 HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive", 6 -1, "default", -1, "false", "default", "Devin", 7 0, -1, out hv_AcqHandle); 8 //下面開啟硬觸發
9 HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "TriggerMode", "On"); 10 HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "TriggerSource", "Line1"); 11 //下面設置連續采集,上升沿觸發,曝光模式等
12 HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "AcquisitionMode", "Continuous"); 13 HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "TriggerSelector", "FrameStart"); 14 HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "TriggerActivation", "RisingEdge"); 15 HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "ExposureMode", "Timed"); 16 //設置曝光時間
17 HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "ExposureTime", 80000.0); 18 //下面為設置用不超時
19 HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "grab_timeout", -1); 20 //給委托綁定
21 delegateCallback = MyCallbackFunction; 22
23
24 private int test = 1;//隨便定義的一個變量,后面會取其地址帶入回調函數的user_context 25
26
27 //回調函數
28 public int MyCallbackFunction(IntPtr handle, IntPtr context, IntPtr user_context) 29 { 30 try
31 { 32 HOperatorSet.GrabImage(out img, hv_AcqHandle); 33 if (this.hWindowControl1.InvokeRequired)//線程親和性判定
34 { 35 this.Invoke(new MethodInvoker(() => { HOperatorSet.DispObj(img, this.hWindowControl1.HalconWindow); img.Dispose(); }));//把圖像顯示出來(這里是委托方式顯示)
36 } 37 else
38 { 39 HOperatorSet.DispObj(img, this.hWindowControl1.HalconWindow);//把圖像顯示出來
40 img.Dispose(); 41 } 42 return 0; 43 } 44 catch (Exception ex) 45 { 46 // MessageBox.Show(ex.Message);//顯示錯誤
47 return -1; 48 } 49 } 50
51
52 IntPtr ptr = Marshal.GetFunctionPointerForDelegate(delegateCallback);//取回調函數的地址
53 IntPtr ptr1 = GCHandle.Alloc(test, GCHandleType.Pinned).AddrOfPinnedObject();//取test變量的地址
54 HOperatorSet.SetFramegrabberCallback(hv_AcqHandle, "LineStatus", ptr, ptr1);//注冊回調函數
55 IntegralforLove/java/article/details/94722689