當(dāng)前位置: 首頁(yè) > 工業(yè)電氣產(chǎn)品 > 端子與連接器 > 線路板連接器 > FFC連接器
發(fā)布日期:2022-04-25 點(diǎn)擊率:67
關(guān)鍵詞:正運(yùn)動(dòng)技術(shù),機(jī)器視覺(jué),運(yùn)動(dòng)控制一體機(jī)
摘要:順應(yīng)現(xiàn)代生活的不斷發(fā)展,瓶裝液體成為人們?nèi)粘I钪胁豢苫蛉钡南M(fèi)品。它的包裝中產(chǎn)品凈含量是否達(dá)標(biāo)是檢測(cè)產(chǎn)品質(zhì)量的一個(gè)重要指標(biāo),對(duì)于同一規(guī)格的包裝瓶中,其液位高度直接反映了瓶中液體的凈含量。
順應(yīng)現(xiàn)代生活的不斷發(fā)展,瓶裝液體成為人們?nèi)粘I钪胁豢苫蛉钡南M(fèi)品。它的包裝中產(chǎn)品凈含量是否達(dá)標(biāo)是檢測(cè)產(chǎn)品質(zhì)量的一個(gè)重要指標(biāo),對(duì)于同一規(guī)格的包裝瓶中,其液位高度直接反映了瓶中液體的凈含量。
在傳統(tǒng)的瓶裝液體灌裝工序中,其灌裝后的液位高度檢測(cè)通常采用的是人眼去目測(cè)液位高度,生產(chǎn)效率低下,且會(huì)產(chǎn)生較大誤差。隨著生產(chǎn)的規(guī)模的不斷擴(kuò)大,因此對(duì)瓶裝液體的液位高度全自動(dòng)檢測(cè)的需求越來(lái)越大。
目前市面上已有光電傳感器檢測(cè)、超聲波檢測(cè)和機(jī)器視覺(jué)液位檢測(cè)等液位檢測(cè)方法,其中機(jī)器視覺(jué)液位檢測(cè)是一種非接觸式、無(wú)損的檢測(cè)方法。因此它具有效率高、檢測(cè)精度高、設(shè)備維護(hù)簡(jiǎn)單等優(yōu)點(diǎn),被廣泛應(yīng)用于液位檢測(cè)項(xiàng)目中。
本次課程我們將與大家一起分享機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)實(shí)現(xiàn)液位檢測(cè)的功能。
檢測(cè)原理
液位檢測(cè):在機(jī)器視覺(jué)解決方案中,通常使用背向打光的方式將瓶?jī)?nèi)有液體的部分和沒(méi)有液體的部分加以區(qū)分,再計(jì)算出液體最高位與瓶底的距離即液位。檢測(cè)有顏色的液體通常使用普通背光源即可,如需檢測(cè)透明液體或瓶子上有字符或顏色干擾可使用穿透性較強(qiáng)的紅外背光。
視覺(jué)算法:使用兩個(gè)直線測(cè)量器獲得瓶底和液位的數(shù)據(jù),再計(jì)算瓶底和液位的距離。使用形狀匹配結(jié)果作為直線測(cè)量器的補(bǔ)正源,使直線測(cè)量器跟隨產(chǎn)品移動(dòng)。
二
軟件實(shí)現(xiàn)
(一)軟件實(shí)現(xiàn)
1.打開(kāi)ZDevelop軟件:打開(kāi)項(xiàng)目“基于形狀匹配的視覺(jué)定位”→在“global_variable.bas”文件中定義測(cè)量尺寸需要用到的全局變量。
'----------------------------分割線-----------------------------------------
'直線1測(cè)量參數(shù)數(shù)組,依次為中心cx、cy、w、h、angle、interp、sub_num、sub_width、filter_size、thresh、polor、select,都是圖像坐標(biāo)
GLOBAL DIM d_meas_param1(12) 'd開(kāi)頭表示數(shù)據(jù)結(jié)構(gòu)
'直線2測(cè)量參數(shù)數(shù)組,依次為中心cx、cy、w、h、angle、interp、sub_num、sub_width、filter_size、thresh、polor、select,都是圖像坐標(biāo)
GLOBAL DIM d_meas_param2(12) 'd開(kāi)頭表示數(shù)據(jù)結(jié)構(gòu)
'定義常用顏色變量,用于繪制圖形
GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOW
C_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)建模板時(shí)保存的直線1基準(zhǔn)區(qū)域位置向量1,x、y、angle
GLOBAL DIM d_meas_base_v1(3)
d_meas_base_v1(0) = 0
d_meas_base_v1(1) = 0
d_meas_base_v1(2) = 0
'創(chuàng)建模板時(shí)保存的直線2基準(zhǔn)區(qū)域位置向量2,x、y、angle
GLOBAL DIM d_meas_base_v2(3)
d_meas_base_v2(0) = 0
d_meas_base_v2(1) = 0
d_meas_base_v2(2) = 0
'直線1測(cè)量結(jié)果,依次為結(jié)果點(diǎn)stx、sty、endx、endy
GLOBAL DIM d_meas_rst1(4)
'直線2測(cè)量結(jié)果,依次為結(jié)果點(diǎn)stx、sty、endx、endy
GLOBAL DIM d_meas_rst2(4)
''創(chuàng)建模板時(shí)保存的模板基準(zhǔn)點(diǎn),score、x、y、angle、scale
GLOBAL DIM d_match_base_rst(5)
global dim d_meas_param(12)
'定義ROI標(biāo)志變量,0-液位ROI,1-瓶底R(shí)OI
GLOBAL DIM roi_flag
roi_flag=0
'定義形狀匹配模板
ZVOBJECT shape_model
'定義保存配模板標(biāo)志,1-已保存,0未保存
GLOBAL DIM is_saveMod
2.修改設(shè)計(jì)HMI界面。
3.新建主界面按下【液位設(shè)置】按鈕時(shí)彈出的液位參數(shù)設(shè)置窗口“Set_Select”,并設(shè)計(jì)界面布局。
4.關(guān)聯(lián)液位參數(shù)設(shè)置窗口“Set_Select”界面上的變量。
5.在“draw.bas”文件中添加“液位Roi”和“瓶底R(shí)oi”根據(jù)鼠標(biāo)操作更新ROI位置的函數(shù)以及實(shí)時(shí)繪制Roi的函數(shù),并在自定義元件中關(guān)聯(lián)刷新函數(shù)和繪制函數(shù)。
'-----------------分割線-------------------------
'測(cè)量器繪制
'''''''''''''''''''''''''''''''''''
'根據(jù)鼠標(biāo)操作更新Roi的位置
GLOBAL SUB update_roi()
if roi_flag=0 then '如果選擇設(shè)置液位ROI
SET_REDRAW'全區(qū)域繪制
if (mouse_scan(21) = 1 )then '如果掃描到鼠標(biāo)按下操作
'根據(jù)鼠標(biāo)所在Roi的不同位置返回調(diào)整標(biāo)志
hit_pos = ZV_HMIADJRECT2(table(21), table(22), 11, -1)
is_redraw = 1'繪圖標(biāo)志置1
endif
if mouse_scan(21) = -1 then '如果掃描到鼠標(biāo)松開(kāi)操作
'如果鼠標(biāo)指在Roi1區(qū)域之外
if TABLE(21)
hit_pos=-1'調(diào)整標(biāo)志=-1
endif
ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)'調(diào)整Roi1位置
is_redraw = 1
endif
if (MOUSE_state(21)) then'如果鼠標(biāo)按下時(shí)
ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)'調(diào)整Roi1位置
is_redraw = 1'繪圖標(biāo)志置1
endif
if (1 = is_redraw ) then'如果繪圖標(biāo)志為1時(shí)
is_redraw = 0'繪圖標(biāo)志置0
'將控件坐標(biāo)轉(zhuǎn)換到圖像坐標(biāo),并賦值給相應(yīng)變量
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()'設(shè)置基準(zhǔn)Roi數(shù)據(jù)
SET_REDRAW'全區(qū)域繪制
endif
else '否則選擇設(shè)置瓶底R(shí)OI
SET_REDRAW'全區(qū)域繪制
if (mouse_scan(21) = 1 )then '如果掃描到鼠標(biāo)按下操作
'根據(jù)鼠標(biāo)所在Roi的不同位置返回調(diào)整標(biāo)志
hit_pos = ZV_HMIADJRECT2(table(21), table(22), 41, -1)
is_redraw = 1'繪圖標(biāo)志置1
endif
if mouse_scan(21) = -1 then '如果掃描到鼠標(biāo)松開(kāi)操作
'如果鼠標(biāo)指在Roi2區(qū)域之外
if TABLE(21)
hit_pos=-1'調(diào)整標(biāo)志=-1
endif
ZV_HMIADJRECT2(table(21), table(22), 41, hit_pos)'調(diào)整Roi2位置
is_redraw = 1
endif
if (MOUSE_state(21)) then'如果鼠標(biāo)按下時(shí)
ZV_HMIADJRECT2(table(21), table(22), 41, hit_pos)'調(diào)整Roi2位置
is_redraw = 1'繪圖標(biāo)志置1
endif
if (1 = is_redraw ) then'如果繪圖標(biāo)志為1時(shí)
is_redraw = 0'繪圖標(biāo)志置0
'將控件坐標(biāo)轉(zhuǎn)換到圖像坐標(biāo),并賦值給相應(yīng)變量
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()'設(shè)置基準(zhǔn)Roi數(shù)據(jù)
SET_REDRAW'全區(qū)域繪制
endif
endif
END SUB
6.在“main.bas”文件中添加“Set_Select”窗口界面按下【測(cè)試】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。
'液位設(shè)置界面按下測(cè)試按鈕時(shí)響應(yīng)的函數(shù)
GLOBAL SUB btn_mea_test()
'選擇補(bǔ)正源時(shí)先執(zhí)行定位檢測(cè)
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
'測(cè)量區(qū)域roi補(bǔ)正
if(TABLE(110) = 1 AND d_is_creModel = 1) then '如果使用補(bǔ)正源已經(jīng)開(kāi)啟且模板已經(jīng)創(chuàng)建
'計(jì)算剛性變換矩陣
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對(duì)輸入Roi1基準(zhǔn)向量進(jìn)行補(bǔ)正,補(bǔ)正后的向量存入開(kāi)始索引為0的TABLE中
ZV_VECTORCORRECT(mat_rigid1, d_meas_base_v1(0), d_meas_base_v1(1),d_meas_base_v1(2), 0)
'將補(bǔ)正后的坐標(biāo)數(shù)據(jù)賦值給測(cè)量器區(qū)域變量
d_meas_param1(0) = TABLE(0)
d_meas_param1(1) = TABLE(1)
d_meas_param1(4) = TABLE(2)
'使用變換矩陣mat_rigid對(duì)輸入Roi2基準(zhǔn)向量進(jìn)行補(bǔ)正,補(bǔ)正后的向量存入開(kāi)始索引為0的TABLE中
ZV_VECTORCORRECT(mat_rigid1, d_meas_base_v2(0), d_meas_base_v2(1),d_meas_base_v2(2), 0)
'將補(bǔ)正后的坐標(biāo)數(shù)據(jù)賦值給測(cè)量器區(qū)域變量
d_meas_param2(0) = TABLE(0)
d_meas_param2(1) = TABLE(1)
d_meas_param2(4) = TABLE(2)
endif
'生成直線1測(cè)量的旋轉(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))
'設(shè)置直線1的檢測(cè)參數(shù),包括濾波器尺寸,閾值,邊緣極性,邊緣位置
ZV_MRSETADV(mr1, d_meas_param1(8), d_meas_param1(9), d_meas_param1(10), d_meas_param1(11))
'生成直線2測(cè)量的旋轉(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))
'設(shè)置直線2的檢測(cè)參數(shù),包括濾波器尺寸,閾值,邊緣極性,邊緣位置
ZV_MRSETADV(mr2, d_meas_param2(8), d_meas_param2(9), d_meas_param2(10), d_meas_param2(11))
'將矩形測(cè)量區(qū)域測(cè)量到的目標(biāo)直線1端點(diǎn)存儲(chǔ)到起始索引為61的TABLE
ZV_MRLINE(mr1, grabImg, rst1, 61)
'將直線1結(jié)果賦值給直線1結(jié)果變量
d_meas_rst1(0) = TABLE(61)
d_meas_rst1(1) = TABLE(62)
d_meas_rst1(2) = TABLE(63)
d_meas_rst1(3) = TABLE(64)
'將矩形測(cè)量區(qū)域測(cè)量到的目標(biāo)直線2端點(diǎn)存儲(chǔ)到起始索引為71的TABLE
ZV_MRLINE(mr2, grabImg, rst2, 71)
'將直線1結(jié)果賦值給直線2結(jié)果變量
d_meas_rst2(0) = TABLE(71)
d_meas_rst2(1) = TABLE(72)
d_meas_rst2(2) = TABLE(73)
d_meas_rst2(3) = TABLE(74)
'計(jì)算兩條直線的距離寬度
length1()
'將灰度圖轉(zhuǎn)換成RGB圖像,用于繪制檢測(cè)結(jié)果圖像
ZV_GRAYTORGB(grabImg, colorImg)
'繪制液位檢測(cè)和瓶底檢測(cè)的測(cè)量器
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))
'繪制直線結(jié)果
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'如果使用補(bǔ)正源
ZV_MARKER(colorImg,TABLE(4),TABLE(5),0,10,C_GREEN)'繪制匹配中心標(biāo)志點(diǎn)
endif
ZV_LATCH(colorImg,0)'顯示結(jié)果圖像
END SUB
7.在“main.bas”文件中添加“Set_Select”窗口界面按下【返回主界面】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。
'按下返回主界面按鈕時(shí)響應(yīng)的函數(shù)
GLOBAL SUB Goto_Main()
'設(shè)置鎖存通道0的大小,以適應(yīng)圖片元件大小
ZV_LATCHSETSIZE(0, HMI_ConTROLSIZEX(10,2), HMI_ConTROLSIZEY(10,2))
ZV_LATCHCLEAR(0)'清空鎖存通道0
ZV_LATCH(grabImg,0)'將圖片顯示到鎖存通道0中
HMI_CLOSEWINDOW(13)'關(guān)閉測(cè)量參數(shù)設(shè)置窗口
END SUB
8.在“main.bas”文件中修改主界面按下【單次執(zhí)行】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。
'主界面按下單次執(zhí)行按鈕時(shí)響應(yīng)的函數(shù)
GLOBAL SUB btn_test()
'采集一幀圖像
btn_grab
'執(zhí)行測(cè)量測(cè)試部分代碼
btn_mea_test()
END SUB
三
檢測(cè)原理
(一)操作步驟
查看運(yùn)行效果:將項(xiàng)目下載到仿真器中→運(yùn)行程序,測(cè)試程序運(yùn)行效果?!褂帽镜貓D片→單次采集→學(xué)習(xí)模板→液位設(shè)置→使用補(bǔ)正源→單次執(zhí)行→結(jié)束
完整代碼獲取地址
▼
本次,正運(yùn)動(dòng)技術(shù)機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)應(yīng)用例程(六)液位檢測(cè),就分享到這里。
更多精彩內(nèi)容請(qǐng)關(guān)注“正運(yùn)動(dòng)小助手”公眾號(hào),需要相關(guān)開(kāi)發(fā)環(huán)境與例程代碼,請(qǐng)咨詢(xún)正運(yùn)動(dòng)技術(shù)銷(xiāo)售工程師:400-089-8936。
本文由正運(yùn)動(dòng)技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國(guó)智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來(lái)源。
關(guān)于正運(yùn)動(dòng)技術(shù)
正運(yùn)動(dòng)技術(shù)專(zhuān)注于運(yùn)動(dòng)控制技術(shù)研究和通用運(yùn)動(dòng)控制軟硬件產(chǎn)品的研發(fā),是國(guó)家級(jí)高新技術(shù)企業(yè),主要產(chǎn)品有運(yùn)動(dòng)控制器、運(yùn)動(dòng)控制卡、視覺(jué)運(yùn)動(dòng)控制一體機(jī)、人機(jī)界面以及擴(kuò)展模塊等。
正運(yùn)動(dòng)技術(shù)匯集了來(lái)自華為、中興等公司的優(yōu)秀人才,在堅(jiān)持自主創(chuàng)新的同時(shí),積極聯(lián)合各大高校協(xié)同運(yùn)動(dòng)控制基礎(chǔ)技術(shù)的研究,是國(guó)內(nèi)工控領(lǐng)域發(fā)展最快的企業(yè)之一,也是國(guó)內(nèi)少有、完整掌握運(yùn)動(dòng)控制核心技術(shù)和實(shí)時(shí)工控軟件平臺(tái)技術(shù)的企業(yè)。
下一篇: PLC、DCS、FCS三大控