典型的機器視覺軟件應用中,典型的構造如下
視覺系統(tǒng)基礎構造
典型應用中,下位機或者光電傳感器觸發(fā)上位機(視覺軟件)拍照,上位機進行拍照、算法處理,處理結果給到下位機或者通過IO的方式。 上圖成像系統(tǒng)1、3中圖像數(shù)據(jù)可以通過很多種方式傳輸,常見的有Gige、USB3.0、1394a1394b、CameraLink、CoaXPress等常見的接口,最常用的網口GiGe和USB3.0接口。圖像數(shù)據(jù)獲取成功后算法層面可以使用對應的算法,看個人習慣,我常用halcon、OpenCV或者VisionMaster。
整體框架流程
一個視覺軟件(上位機)可以分為上面一個總的架構,UI層和運行流程,UI層是來進行參數(shù)配置界面展示數(shù)據(jù)的,運行流程總的流程組合,線程運行。
通常情況下,UI層我們看到的數(shù)據(jù)都是通過winform或者qt 拉取對應的控件進行設計,然后把數(shù)據(jù)保存到數(shù)據(jù)中心,這個時候數(shù)據(jù)在內存中,同時也會保存數(shù)據(jù)到本地,數(shù)據(jù)的存儲格式常見的有xml、ini、數(shù)據(jù)庫存儲等方式。UI層設置好數(shù)據(jù)后,把數(shù)據(jù)加載到數(shù)據(jù)中心,數(shù)據(jù)中心把數(shù)據(jù)加載到運行流程,流程數(shù)據(jù)就會跟著改變的參數(shù)運行。
運行流程中通常是對流程的組合,初始化連接的時候會把相機、數(shù)據(jù)庫、IO、PLC、MES等各種相關的資源進行連接,初始化OK后,運行取流線程、算法線程、存圖線程。
在取流線程中,這里面就會跟下位機打交道了,在這里下位機通過讀寫寄存器的方式,取流線程會一直讀PLC的寄存器來進行獲取拍照信號。大概流程我以偽代碼表示
while(true)
{
sleep(10);
If(!m_bExit)
Break;
Bool bCapture = m_Plc.ReadCaptureSignal();
If(!bCapture)
Continue;
//拍照
Image img = m_Camera.GetCaptureTimeout();
//其他隊列
}
m_plc是封裝的一個PLC通信的模塊,接口ReadCaptureSignal讀取拍照寄存器,如果獲取到了就返回值,立即置位寄存器
當然,這只是一個總體的架構,細致的工作還有很多,我大大小小參與過上百個項目,有標準項目、非標項目、還有VisionMaster也有參與過開發(fā),整體來看,只是每個軟件復雜度不一樣,拆開模塊看,都是一樣的。
版權聲明:本文內容由互聯(lián)網用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權/違法違規(guī)的內容, 請發(fā)送郵件至 舉報,一經查實,本站將立刻刪除。