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;
                }


            }
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM