時間:2021-07-06 17:07:31來源:深圳市正運動技術有限公司
順應現(xiàn)代生活的不斷發(fā)展,瓶裝液體成為人們?nèi)粘I钪胁豢苫蛉钡南M品。它的包裝中產(chǎn)品凈含量是否達標是檢測產(chǎn)品質(zhì)量的一個重要指標,對于同一規(guī)格的包裝瓶中,其液位高度直接反映了瓶中液體的凈含量。
在傳統(tǒng)的瓶裝液體灌裝工序中,其灌裝后的液位高度檢測通常采用的是人眼去目測液位高度,生產(chǎn)效率低下,且會產(chǎn)生較大誤差。隨著生產(chǎn)的規(guī)模的不斷擴大,因此對瓶裝液體的液位高度全自動檢測的需求越來越大。
目前市面上已有光電傳感器檢測、超聲波檢測和機器視覺液位檢測等液位檢測方法,其中機器視覺液位檢測是一種非接觸式、無損的檢測方法。因此它具有效率高、檢測精度高、設備維護簡單等優(yōu)點,被廣泛應用于液位檢測項目中。
本次課程我們將與大家一起分享機器視覺運動控制一體機實現(xiàn)液位檢測的功能。
教學視頻
一檢測原理梯形圖介紹
液位檢測:在機器視覺解決方案中,通常使用背向打光的方式將瓶內(nèi)有液體的部分和沒有液體的部分加以區(qū)分,再計算出液體最高位與瓶底的距離即液位。檢測有顏色的液體通常使用普通背光源即可,如需檢測透明液體或瓶子上有字符或顏色干擾可使用穿透性較強的紅外背光。
視覺算法:使用兩個直線測量器獲得瓶底和液位的數(shù)據(jù),再計算瓶底和液位的距離。使用形狀匹配結果作為直線測量器的補正源,使直線測量器跟隨產(chǎn)品移動。
打光效果圖
二軟件實現(xiàn)梯形圖介紹
(一)軟件實現(xiàn)
1.打開ZDevelop軟件:打開項目“基于形狀匹配的視覺定位”→在“global_variable.bas”文件中定義測量尺寸需要用到的全局變量。
'----------------------------分割線-----------------------------------------
'直線1測量參數(shù)數(shù)組,依次為中心cx、cy、w、h、angle、interp、sub_num、sub_width、filter_size、thresh、polor、select,都是圖像坐標GLOBAL DIM d_meas_param1(12) 'd開頭表示數(shù)據(jù)結構
'直線2測量參數(shù)數(shù)組,依次為中心cx、cy、w、h、angle、interp、sub_num、sub_width、filter_size、thresh、polor、select,都是圖像坐標GLOBAL DIM d_meas_param2(12) 'd開頭表示數(shù)據(jù)結構
'定義常用顏色變量,用于繪制圖形GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOWC_RED = RGB(255, 0, 0)C_GREEN = RGB( 0,255, 0)C_BLUE = RGB( 0, 0,255)C_YELLOW= RGB(255,255, 0)
'創(chuàng)建模板時保存的直線1基準區(qū)域位置向量1,x、y、angleGLOBAL DIM d_meas_base_v1(3)d_meas_base_v1(0) = 0d_meas_base_v1(1) = 0d_meas_base_v1(2) = 0
'創(chuàng)建模板時保存的直線2基準區(qū)域位置向量2,x、y、angleGLOBAL DIM d_meas_base_v2(3)d_meas_base_v2(0) = 0d_meas_base_v2(1) = 0d_meas_base_v2(2) = 0
'直線1測量結果,依次為結果點stx、sty、endx、endyGLOBAL DIM d_meas_rst1(4)
'直線2測量結果,依次為結果點stx、sty、endx、endyGLOBAL DIM d_meas_rst2(4)
''創(chuàng)建模板時保存的模板基準點,score、x、y、angle、scaleGLOBAL DIM d_match_base_rst(5)global dim d_meas_param(12)
'定義ROI標志變量,0-液位ROI,1-瓶底ROIGLOBAL DIM roi_flagroi_flag=0
'定義形狀匹配模板ZVOBJECT shape_model
'定義保存配模板標志,1-已保存,0未保存GLOBAL DIM is_saveMod
2.修改設計HMI界面。
3.新建主界面按下【液位設置】按鈕時彈出的液位參數(shù)設置窗口“Set_Select”,并設計界面布局。
4.關聯(lián)液位參數(shù)設置窗口“Set_Select”界面上的變量。
5.在“draw.bas”文件中添加“液位Roi”和“瓶底Roi”根據(jù)鼠標操作更新ROI位置的函數(shù)以及實時繪制Roi的函數(shù),并在自定義元件中關聯(lián)刷新函數(shù)和繪制函數(shù)。
'-----------------分割線-------------------------'測量器繪制 ''''''''''''''''''''''''''''''''''''根據(jù)鼠標操作更新Roi的位置GLOBAL SUB update_roi() if roi_flag=0 then '如果選擇設置液位ROI SET_REDRAW'全區(qū)域繪制 if (mouse_scan(21) = 1 )then '如果掃描到鼠標按下操作 '根據(jù)鼠標所在Roi的不同位置返回調(diào)整標志 hit_pos = ZV_HMIADJRECT2(table(21), table(22), 11, -1) is_redraw = 1'繪圖標志置1 endif
if mouse_scan(21) = -1 then '如果掃描到鼠標松開操作 '如果鼠標指在Roi1區(qū)域之外 if TABLE(21)<(TABLE(11)-TABLE(13)/2) or TABLE(21)>(TABLE(11)+TABLE(13)/2) or TABLE(22)<(TABLE(12)-TABLE(14)/2)or TABLE(22)>(TABLE(12)+TABLE(14)/2) then hit_pos=-1'調(diào)整標志=-1 endif ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)'調(diào)整Roi1位置 is_redraw = 1 endif if (MOUSE_state(21)) then'如果鼠標按下時 ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)'調(diào)整Roi1位置 is_redraw = 1'繪圖標志置1 endif if (1 = is_redraw ) then'如果繪圖標志為1時 is_redraw = 0'繪圖標志置0 '將控件坐標轉(zhuǎn)換到圖像坐標,并賦值給相應變量 ZV_POSTOIMG(0, 1, 11, 31) d_meas_param1(0) = TABLE(31) d_meas_param1(1) = TABLE(32) d_meas_param1(2) = ZV_LENTOIMG(0, TABLE(13)) d_meas_param1(3) = ZV_LENTOIMG(0, TABLE(14)) d_meas_param1(4) = TABLE(15) set_base_roi()'設置基準Roi數(shù)據(jù) SET_REDRAW'全區(qū)域繪制 endif else '否則選擇設置瓶底ROI SET_REDRAW'全區(qū)域繪制 if (mouse_scan(21) = 1 )then '如果掃描到鼠標按下操作 '根據(jù)鼠標所在Roi的不同位置返回調(diào)整標志 hit_pos = ZV_HMIADJRECT2(table(21), table(22), 41, -1) is_redraw = 1'繪圖標志置1 endif
if mouse_scan(21) = -1 then '如果掃描到鼠標松開操作 '如果鼠標指在Roi2區(qū)域之外 if TABLE(21)<(TABLE(41)-TABLE(43)/2) or TABLE(21)>(TABLE(41)+TABLE(43)/2) or TABLE(22)<(TABLE(42)-TABLE(44)/2)or TABLE(22)>(TABLE(12)+TABLE(14)/2) then hit_pos=-1'調(diào)整標志=-1 endif ZV_HMIADJRECT2(table(21), table(22), 41, hit_pos)'調(diào)整Roi2位置 is_redraw = 1 endif if (MOUSE_state(21)) then'如果鼠標按下時 ZV_HMIADJRECT2(table(21), table(22), 41, hit_pos)'調(diào)整Roi2位置 is_redraw = 1'繪圖標志置1 endif if (1 = is_redraw ) then'如果繪圖標志為1時 is_redraw = 0'繪圖標志置0 '將控件坐標轉(zhuǎn)換到圖像坐標,并賦值給相應變量 ZV_POSTOIMG(0, 1, 41, 91) d_meas_param2(0) = TABLE(91) d_meas_param2(1) = TABLE(92) d_meas_param2(2) = ZV_LENTOIMG(0, TABLE(43)) d_meas_param2(3) = ZV_LENTOIMG(0, TABLE(44)) d_meas_param2(4) = TABLE(45) set_base_roi()'設置基準Roi數(shù)據(jù) SET_REDRAW'全區(qū)域繪制 endif endif END SUB
6.在“main.bas”文件中添加“Set_Select”窗口界面按下【測試】按鈕時響應的函數(shù)并關聯(lián)動作函數(shù)名。
'液位設置界面按下測試按鈕時響應的函數(shù)GLOBAL SUB btn_mea_test() '選擇補正源時先執(zhí)行定位檢測 if(TABLE(110) = 1) then btn_loc_test() endif ZVOBJECT mr1,mr2,mr3,mr4,rst1,rst2,rst3,rst4,colorImg ZVOBJECT contlist, tsContlist, mat_rigid LOCAL show_rst '測量區(qū)域roi補正 if(TABLE(110) = 1 AND d_is_creModel = 1) then '如果使用補正源已經(jīng)開啟且模板已經(jīng)創(chuàng)建 '計算剛性變換矩陣 ZV_GETRIGIDVECTOR(mat_rigid1,d_match_base_rst(1),d_match_base_rst(2),d_match_base_rst(3), d_match_rst(1), d_match_rst(2), d_match_rst(3)) '使用變換矩陣mat_rigid對輸入Roi1基準向量進行補正,補正后的向量存入開始索引為0的TABLE中 ZV_VECTORCORRECT(mat_rigid1, d_meas_base_v1(0), d_meas_base_v1(1),d_meas_base_v1(2), 0) '將補正后的坐標數(shù)據(jù)賦值給測量器區(qū)域變量 d_meas_param1(0) = TABLE(0) d_meas_param1(1) = TABLE(1) d_meas_param1(4) = TABLE(2) '使用變換矩陣mat_rigid對輸入Roi2基準向量進行補正,補正后的向量存入開始索引為0的TABLE中 ZV_VECTORCORRECT(mat_rigid1, d_meas_base_v2(0), d_meas_base_v2(1),d_meas_base_v2(2), 0) '將補正后的坐標數(shù)據(jù)賦值給測量器區(qū)域變量 d_meas_param2(0) = TABLE(0) d_meas_param2(1) = TABLE(1) d_meas_param2(4) = TABLE(2) endif '生成直線1測量的旋轉(zhuǎn)區(qū)域 ZV_MRGENLINE(mr1, d_meas_param1(0), d_meas_param1(1), d_meas_param1(2), d_meas_param1(3), d_meas_param1(4), 1, d_meas_param1(6), d_meas_param1(7)) '設置直線1的檢測參數(shù),包括濾波器尺寸,閾值,邊緣極性,邊緣位置 ZV_MRSETADV(mr1, d_meas_param1(8), d_meas_param1(9), d_meas_param1(10), d_meas_param1(11)) '生成直線2測量的旋轉(zhuǎn)區(qū)域 ZV_MRGENLINE(mr2, d_meas_param2(0), d_meas_param2(1), d_meas_param2(2), d_meas_param2(3), d_meas_param2(4), 1, d_meas_param2(6), d_meas_param2(7)) '設置直線2的檢測參數(shù),包括濾波器尺寸,閾值,邊緣極性,邊緣位置 ZV_MRSETADV(mr2, d_meas_param2(8), d_meas_param2(9), d_meas_param2(10), d_meas_param2(11)) '將矩形測量區(qū)域測量到的目標直線1端點存儲到起始索引為61的TABLE ZV_MRLINE(mr1, grabImg, rst1, 61) '將直線1結果賦值給直線1結果變量 d_meas_rst1(0) = TABLE(61) d_meas_rst1(1) = TABLE(62) d_meas_rst1(2) = TABLE(63) d_meas_rst1(3) = TABLE(64) '將矩形測量區(qū)域測量到的目標直線2端點存儲到起始索引為71的TABLE ZV_MRLINE(mr2, grabImg, rst2, 71) '將直線1結果賦值給直線2結果變量 d_meas_rst2(0) = TABLE(71) d_meas_rst2(1) = TABLE(72) d_meas_rst2(2) = TABLE(73) d_meas_rst2(3) = TABLE(74) '計算兩條直線的距離寬度 length1() '將灰度圖轉(zhuǎn)換成RGB圖像,用于繪制檢測結果圖像 ZV_GRAYTORGB(grabImg, colorImg) '繪制液位檢測和瓶底檢測的測量器 ZV_MEASURER(colorImg,mr1,ZV_COLOR(0,0,255),ZV_COLOR (0,255,0)) ZV_MEASURER(colorImg,mr2,ZV_COLOR(0,0,255),ZV_COLOR (0,255,0)) '繪制直線結果 ZV_LINE(colorImg, TABLE(61), TABLE(62), TABLE(63), TABLE(64), C_BLUE) ZV_LINE(colorImg, TABLE(71), TABLE(72), TABLE(73), TABLE(74), C_BLUE) if(TABLE(110) = 1) then'如果使用補正源 ZV_MARKER(colorImg,TABLE(4),TABLE(5),0,10,C_GREEN)'繪制匹配中心標志點 endif ZV_LATCH(colorImg,0)'顯示結果圖像 END SUB
7.在“main.bas”文件中添加“Set_Select”窗口界面按下【返回主界面】按鈕時響應的函數(shù)并關聯(lián)動作函數(shù)名。
'按下返回主界面按鈕時響應的函數(shù)GLOBAL SUB Goto_Main()
'設置鎖存通道0的大小,以適應圖片元件大小 ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(10,2), HMI_CONTROLSIZEY(10,2)) ZV_LATCHCLEAR(0)'清空鎖存通道0 ZV_LATCH(grabImg,0)'將圖片顯示到鎖存通道0中 HMI_CLOSEWINDOW(13)'關閉測量參數(shù)設置窗口 END SUB
8.在“main.bas”文件中修改主界面按下【單次執(zhí)行】按鈕時響應的函數(shù)并關聯(lián)動作函數(shù)名。
'主界面按下單次執(zhí)行按鈕時響應的函數(shù)GLOBAL SUB btn_test()
'采集一幀圖像 btn_grab '執(zhí)行測量測試部分代碼 btn_mea_test()
END SUB
三檢測原理梯形圖介紹
(一)操作步驟
查看運行效果:將項目下載到仿真器中→運行程序,測試程序運行效果。→使用本地圖片→單次采集→學習模板→液位設置→使用補正源→單次執(zhí)行→結束
(二)效果演示
本文由正運動技術原創(chuàng),歡迎大家轉(zhuǎn)載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉(zhuǎn)載請注明文章來源。
中國傳動網(wǎng)版權與免責聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(wǎng)(www.wangxinlc.cn)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權屬于原版權人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產(chǎn)品新聞
更多>2025-04-30
性能躍升20%!維宏NK300CX Plus數(shù)控系統(tǒng)...
2025-04-11
2025-04-08
【產(chǎn)品解讀】全面提升精密制造檢測節(jié)拍...
2025-03-31
應用案例 | 使用宏集TELE監(jiān)控繼電器監(jiān)控...
2025-03-26
2025-03-20