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