有無圖像 沒圖像
是否黑屏 黑屏,白屏,花屏
是否亮燈 亮紅燈
是否開機 不開機
故障 設備找不到相機
商品介紹
需要說明如下幾點:
1.這里的初始隊列為1-10,都是初始分配為DMA隊列的,這個內存分配和釋放過程有的SDK是自己負責的,有的則需要用戶自己分配和釋放,SDK只負責托管使用。
2.一般開始注冊一個中斷處理函數,當“準備隊列”填充完成會自動跳轉到中斷函數中,借此完成同步操作。也可以是用戶自己維護同步結構體,使用查詢和等待的方式判斷“準備隊列”頭是否填充完成,是否該用戶程序獲取數據和處理了。
3.如果用戶處理任務非常簡單,可以去掉“處理隊列”,每次直接GetFrame->處理->PutFrame。如果用戶處理任務比較復雜而不希望出現丟幀的現象,則需要用戶使用“處理隊列”來保存所有可用的Buffer。
4.這里隊列也只是能夠解決處理速度比采集速度慢少許的情況,主要是對不同處理速度做平均來保證采集和處理同步。如果每一幀的處理時間太長,這時候“DMA隊列” Buffer全部轉移到“處理隊列” Buffer,就會出現異常情況,這時不同的相機會有不同的處理方法。

這里使用三個隊列完成采集和處理同步。
DMA隊列:
當CMOS或CCD芯片曝光然后將數據轉到相機緩存后,這時候DMA會負責將緩存中數據寫入到“DMA隊列”頭Buffer中。
準備隊列:
一旦“DMA隊列”頭Buffer被填充完成,會被加到“準備隊列”尾后,這時候會發送中斷通知用戶程序:當前又有一幀數據采集完成,您看著處理吧。
處理隊列:
當用戶接收到中斷會自動跳轉到中斷函數中,使用GetFrame拿取“準備隊列”頭Buffer,然后加到當前用戶程序“處理隊列”尾,用戶程序從“處理隊列”頭拿取Buffer處理完成后使用PutFrame將Buffer再添加到原始的“DMA隊列”尾。

三、 Basler Pylon工業相機SDK的使用
Pylon庫有C++ .Net等各種封裝版本,一般用C++版本,功能全面效率高,但對于不同接口(GigE USB3.0 CameraLink)的相機必須對應使用不同的類,之間不能通用。
基于GenAPI通用相機抽象接口使用的是Node結構,以字符串形式訪問相機參數,可以統一管理不同接口類型的相機。但效率低,使用不方便。
Pylon高層用C++封裝,形成本地相機對象
如何管理多個相機,靠譜的方法是按相機ID標定順序,需要讀一個配置文件,比如XML或JSON,然而一開始不知道ID,需要先列舉出來。

二、 工業相機SDK接口使用總結
相機調用 :
我們利用相機采集圖像,首先要對相機進行相關參數設置及控制,這需要對相機的SDK包比較了解,一般相機廠家都會提供相機SDK,其中包含用戶手冊和調用Demo,這些都大大降低了調用門檻,提高了二次開發用戶的效率。目前用過Balser、海康、大華等相機,其實都是一個套路,都是按照下面幾個步驟進行的。
1)枚舉設備
2)創建句柄
3)打開設備
4)開始抓圖
5)獲取一幀并保存圖像
6)停止抓圖
7)關閉設備
8)銷毀句柄
相機同步:
若是開發過程中用到雙目或者多目的話,則需要外接同步觸發器或者外部觸發信號,通過相機同步觸發線來實現同步問題。以實際應用過的Basler acA1300-200uc為例,其相機同步觸發線具體類型如下:
1 -—— +12 VDC 紅
2 —— I/O Input 1 黃
3 —— VCC(加電阻) 藍
4 —— I/O Out 1 綠
6 —— DCcam Power GND 黑
0000—— I/O GND 白
-/hbahbeb/-
聯系方式