此前,我們依次講解了軟硬件介紹及計(jì)數(shù)實(shí)例、相機(jī)的基本使用、基于形狀匹配的視覺定位以及BLOB有無(wú)檢測(cè)等。
今天,正運(yùn)動(dòng)技術(shù)為大家分享一下VPLC系列機(jī)器視覺運(yùn)動(dòng)控制一體機(jī)快速入門(五),和大家一起分享機(jī)器視覺常用的檢測(cè)功能---測(cè)量尺寸。
測(cè)量尺寸:在機(jī)器視覺中常用的測(cè)量尺寸的原理就是使用兩個(gè)直線測(cè)量器,分別檢測(cè)出產(chǎn)品兩條尺寸邊緣的點(diǎn)擬合成直線后取兩條直線的距離。
尺寸測(cè)量本質(zhì)是基于邊緣檢測(cè)的測(cè)量,它需要先檢測(cè)出亮暗過(guò)渡滿足一定閾值的邊緣點(diǎn),然后再提取邊緣點(diǎn)數(shù)據(jù)進(jìn)行處理計(jì)算后輸出最終的結(jié)果。
測(cè)量尺寸特點(diǎn)
1.準(zhǔn)確度高
選擇合適的硬件選型方案可以達(dá)到很高的檢測(cè)精度。常用遠(yuǎn)心鏡頭減少畸變,增大景深,減小測(cè)量誤差。
2.圖像干擾少
單純的測(cè)量尺寸項(xiàng)目常用背光的打光方式,突出產(chǎn)品邊緣尺寸,過(guò)濾表面干擾因素。
3.實(shí)現(xiàn)簡(jiǎn)單
測(cè)量尺寸的算法是基于邊緣檢測(cè)的算法,易于實(shí)現(xiàn)。
4.需要位置跟隨
測(cè)量尺寸的測(cè)量器本身不具有定位功能,如果檢測(cè)產(chǎn)品位置不固定將無(wú)法確定測(cè)量器對(duì)應(yīng)的位置,此時(shí)需要依賴匹配等定位功能做位置跟隨。
標(biāo)定
標(biāo)定是指將機(jī)器視覺處理的像素結(jié)果(單位:像素)轉(zhuǎn)換成現(xiàn)實(shí)中使用到的實(shí)際結(jié)果(單位:毫米),或者是將機(jī)器視覺中使用的圖像坐標(biāo)轉(zhuǎn)換成世界坐標(biāo)。
我們?cè)趯?shí)際測(cè)量尺寸時(shí),使用的尺寸單位一般是國(guó)際標(biāo)準(zhǔn)單位如米,厘米,毫米等。因此機(jī)器視覺測(cè)量尺寸項(xiàng)目中需要將獲取到的像素尺寸轉(zhuǎn)換成實(shí)際尺寸(毫米)輸出到用戶端,供用戶直接使用。
測(cè)量尺寸標(biāo)定方法
1.測(cè)量標(biāo)定
使用已知尺寸的標(biāo)準(zhǔn)模塊如圓、小方塊、或刻度尺等,在圖像中檢測(cè)到像素尺寸后將已知實(shí)際尺寸值除以像素值即可得出像素比例值(單位:mm/pixel)。測(cè)量尺寸項(xiàng)目中常用測(cè)量標(biāo)定方法。
2.坐標(biāo)標(biāo)定
輸入幾組圖像坐標(biāo)(至少9組),然后再輸入圖像坐標(biāo)對(duì)應(yīng)的世界坐標(biāo),經(jīng)過(guò)公式計(jì)算得出矩陣變換系數(shù),即可實(shí)現(xiàn)將圖像坐標(biāo)轉(zhuǎn)換到實(shí)際坐標(biāo)。在測(cè)量精度要求比較高的測(cè)量尺寸項(xiàng)目可以考慮使用坐標(biāo)標(biāo)定,具體實(shí)現(xiàn)內(nèi)容我們?cè)谙乱黄谡n程再做詳細(xì)說(shuō)明。
1.打開ZDevelop軟件:打開項(xiàng)目“基于形狀匹配的視覺定位”→在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開頭表示數(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開頭表示數(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)
'定義顯示在界面上的長(zhǎng)度變量
GLOBAL DIM d_show_rst
''創(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)
'定義測(cè)量標(biāo)定時(shí)使用到的變量
GLOBAL PixLength,WorldLength,CalibParam
2.補(bǔ)充設(shè)計(jì)主界面。
3.新建主界面按下【測(cè)量設(shè)置】按鈕時(shí)彈出的測(cè)量參數(shù)設(shè)置窗口“Set_Select”,并設(shè)計(jì)界面布局。
4.在main.bas文件中添加主界面按下【測(cè)量設(shè)置】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。
'主界面按下測(cè)量設(shè)置按鈕時(shí)響應(yīng)的函數(shù)
GLOBAL SUB Goto_Meas()
HMI_SHOWWINDOW(13)
END SUB
↓
5.在InitLocator.bas文件中初始化測(cè)量參數(shù)。
'---------------------分割線------------------
'初始化測(cè)量參數(shù)1
d_meas_param1(0) = 320.0 'roi中心x
d_meas_param1(1) = 240.0 'roi中心y
d_meas_param1(2) = 160 'roi寬
d_meas_param1(3) = 120.0 'roi高
d_meas_param1(4) = 0.0 'roi角度
d_meas_param1(5) = 1 '插值方式
d_meas_param1(6) = 20 '子區(qū)域的個(gè)數(shù)
d_meas_param1(7) = 5 '子區(qū)域的尺寸
d_meas_param1(8) = 3 '濾波尺寸
d_meas_param1(9) = 50 '閾值
d_meas_param1(10) = 0 '極性
d_meas_param1(11) = 0 '選擇邊緣位置
'初始化測(cè)量參數(shù)2
d_meas_param2(0) = 320.0 'roi中心x
d_meas_param2(1) = 240.0 'roi中心y
d_meas_param2(2) = 160 'roi寬
d_meas_param2(3) = 120.0 'roi高
d_meas_param2(4) = 0.0 'roi角度
d_meas_param2(5) = 1 '插值方式
d_meas_param2(6) = 20 '子區(qū)域的個(gè)數(shù)
d_meas_param2(7) = 5 '子區(qū)域的尺寸
d_meas_param2(8) = 3 '濾波尺寸
d_meas_param2(9) = 50 '閾值
d_meas_param2(10) = 0 '極性
d_meas_param2(11) = 0 '選擇邊緣位置
'初始化界面上顯示的結(jié)果值
d_meas_rst1(0) = 0
d_meas_rst1(1) = 0
d_meas_rst1(2) = 0
d_meas_rst1(3) = 0
d_meas_rst2(0) = 0
d_meas_rst2(1) = 0
d_meas_rst2(2) = 0
d_meas_rst2(3) = 0
d_show_rst = 0
'初始化標(biāo)定參數(shù)和像素比例
CalibParam = 0
WorldLength = 0
PixLength = 0
6.新建在“Set_Select”窗口界面按下【選擇測(cè)量器區(qū)域1】按鈕時(shí)彈出的“Set_Roi1”窗口,用于創(chuàng)建第一條尺寸邊緣的直線測(cè)量器并設(shè)置檢測(cè)直線的參數(shù)。
7.在draw.bas文件中添加在“Set_Select”窗口界面按下【選擇測(cè)量器區(qū)域1】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。
'-----------------分割線-------------------------
'測(cè)量器繪制
DIM is_redraw
is_redraw = 0
DIM set_roi_open_init
set_roi_open_init = 0
DIM sr_mpos_x, sr_mpos_y, hit_pos
'''''''''''''''''''''''''''''''''''
'按下選擇測(cè)量器區(qū)域1按鈕時(shí)響應(yīng)的函數(shù)
GLOBAL SUB btn_sel_roi1()
ZV_LATCHCLEAR(1) '清除鎖存
ZV_LATCHSETSIZE(1, HMI_CONTROLSIZEX(14, 1), HMI_CONTROLSIZEY(14,1)) '設(shè)置鎖存的大小
ZV_LATCH(grabImg, 1) '顯示圖像在鎖存上
SET_COLOR(RGB(0,255,0))
'圖像roi轉(zhuǎn)控件roi
is_redraw = 0
TABLE(11, d_meas_param1(0), d_meas_param1(1))
ZV_POSFROMIMG(1, 1, 11, 11) '圖像坐標(biāo)轉(zhuǎn)換到HMI控件坐標(biāo)
TABLE(13) = ZV_LENFROMIMG(1, d_meas_param1(2))
TABLE(14) = ZV_LENFROMIMG(1, d_meas_param1(3))
TABLE(15) = d_meas_param1(4)
HMI_SHOWWINDOW(14)
END SUB
↓
8.在draw.bas文件中添加Roi1根據(jù)鼠標(biāo)操作更新ROI位置的函數(shù)以及實(shí)時(shí)繪制Roi1的函數(shù)。
'根據(jù)鼠標(biāo)操作更新Roi1的位置
GLOBAL SUB update_roi1()
if mouse_scan(21) = 1 then '
掃描按下操作
hit_pos = ZV_HMIADJRECT2(table(21), table(22), 11, -1) '只有按下時(shí)可以改變擊中位置
?TABLE(21),TABLE(22)
is_redraw = 1
endif
if mouse_scan(21) = -1 then '
掃描松開操作
if TABLE(21)<(table(11)-table(13) or="">(TABLE(11)+TABLE(13)/2) or TABLE(22)<(table(12)-table(14) or="">(TABLE(12)+TABLE(14)/2) then
hit_pos=-1
endif
ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)
?*TABLE(11,4)
is_redraw = 1
endif
if (MOUSE_state(21)) then
ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)
is_redraw = 1
endif
if (1 = is_redraw) then
is_redraw = 0
ZV_POSTOIMG(1, 1, 11, 31)
d_meas_param1(0) = TABLE(31)
d_meas_param1(1) = TABLE(32)
d_meas_param1(2) = ZV_LENTOIMG(1, TABLE(13))
d_meas_param1(3) = ZV_LENTOIMG(1, TABLE(14))
d_meas_param1(4) = TABLE(15)
'如果選擇了補(bǔ)正源,就保存roi基準(zhǔn)
if(TABLE(110) = 1) then
set_base_roi()
endif
SET_REDRAW
endif
END SUB
'設(shè)置測(cè)量區(qū)域的基準(zhǔn)roi
GLoBAL SUB set_base_roi()
d_meas_base_v1(0) = d_meas_param1(0)
d_meas_base_v1(1) = d_meas_param1(1)
d_meas_base_v1(2) = d_meas_param1(4)
d_meas_base_v2(0) = d_meas_param2(0)
d_meas_base_v2(1) = d_meas_param2(1)
d_meas_base_v2(2) = d_meas_param2(4)
END SUB
'更新Roi1位置后實(shí)時(shí)繪制圖形
GLOBAL SUB draw_roi1()
SET_COLOR(C_BLUE)
TABLE(16, d_meas_param1(6), d_meas_param1(7)) '設(shè)置子區(qū)域個(gè)數(shù)和寬度兩個(gè)參數(shù)
ZV_HMIRECT2(11, 300)
DRAWLINE(TABLE(300), TABLE(301), TABLE(302), TABLE(303)) '外矩形
DRAWLINE(TABLE(302), TABLE(303), TABLE(304), TABLE(305))
DRAWLINE(TABLE(304), TABLE(305), TABLE(306), TABLE(307))
DRAWLINE(TABLE(306), TABLE(307), TABLE(300), TABLE(301))
DRAWLINE(TABLE(308), TABLE(309), TABLE(310), TABLE(311)) '方向箭頭
DRAWLINE(TABLE(312), TABLE(313), TABLE(310), TABLE(311))
DRAWLINE(TABLE(314), TABLE(315), TABLE(310), TABLE(311))
if (0 = TABLE(316)) then return
SET_COLOR(C_GREEN)
DIM idx
for idx = 0 to TABLE(316)-1
DRAWLINE(TABLE(317+idx*4), TABLE(318+idx*4), TABLE(319+idx*4), TABLE(320+idx*4))
next
END SUB
9.在draw.bas文件中添加在“Set_Roi1”窗口界面按下【確定】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。
'設(shè)置Roi1窗口按下確定按鈕時(shí)響應(yīng)的函數(shù)
GLOBAL SUB btn_meas_confirm1()
HMI_CLOSEWINDOW(14)
END SUB
↓
10.新建在“Set_Select”窗口界面按下【選擇測(cè)量器區(qū)域2】按鈕時(shí)彈出的“Set_Roi2”窗口,用于創(chuàng)建第二條尺寸邊緣的直線測(cè)量器并設(shè)置檢測(cè)直線的參數(shù)。
11.在draw.bas文件中添加在“Set_Select”窗口界面按下【選擇測(cè)量器區(qū)域2】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。
'按下選擇測(cè)量器區(qū)域2按鈕時(shí)響應(yīng)的函數(shù)
GLOBAL SUB btn_sel_roi2()
ZV_LATCHCLEAR(1) '清除鎖存
ZV_LATCHSETSIZE(1, HMI_CONTROLSIZEX(15, 1), HMI_CONTROLSIZEY(15,1)) '設(shè)置鎖存的大小
ZV_LATCH(grabImg, 1) '顯示圖像在鎖存上
SET_COLOR(RGB(0,255,0))
'圖像roi坐標(biāo)轉(zhuǎn)控件roi
is_redraw = 0
TABLE(11, d_meas_param2(0), d_meas_param2(1))
ZV_POSFROMIMG(1, 1, 11, 11) '圖像坐標(biāo)轉(zhuǎn)換到HMI控件坐標(biāo)
TABLE(13) = ZV_LENFROMIMG(1, d_meas_param2(2))
TABLE(14) = ZV_LENFROMIMG(1, d_meas_param2(3))
TABLE(15) = d_meas_param2(4)
HMI_SHOWWINDOW(15)
END SUB
↓
12.在draw.bas文件中添加Roi2根據(jù)鼠標(biāo)操作更新ROI位置的函數(shù)以及實(shí)時(shí)繪制Roi1的函數(shù)。
'根據(jù)鼠標(biāo)操作更新Roi2的位置
GLOBAL SUB update_roi2()
if mouse_scan(21) = 1 then '掃描按下操作
hit_pos = ZV_HMIADJRECT2(table(21), table(22), 11, -1) '只有按下時(shí)可以改變擊中位置
is_redraw = 1
endif
if mouse_scan(21) = -1 then '掃描松開操作
ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)
is_redraw = 1
endif
if (MOUSE_state(21)) then
ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)
is_redraw = 1
endif
if (1 = is_redraw) then
is_redraw = 0
ZV_POSTOIMG(1, 1, 11, 31)
d_meas_param2(0) = TABLE(31)
d_meas_param2(1) = TABLE(32)
d_meas_param2(2) = ZV_LENTOIMG(1, TABLE(13))
d_meas_param2(3) = ZV_LENTOIMG(1, TABLE(14))
d_meas_param2(4) = TABLE(15)
'如果選擇補(bǔ)正源,就保存roi基準(zhǔn)位置
if(TABLE(110) = 1) then
set_base_roi()
endif
SET_REDRAW
endif
END SUB
'更新Roi2位置后實(shí)時(shí)繪制圖形
GLOBAL SUB draw_roi2()
SET_COLOR(C_BLUE)
TABLE(16, d_meas_param2(6), d_meas_param2(7)) '設(shè)置子區(qū)域個(gè)數(shù)和寬度兩個(gè)參數(shù)
ZV_HMIRECT2(11, 300) '計(jì)算控件的矩形roi相應(yīng)的頂點(diǎn)和箭頭錨點(diǎn)
DRAWLINE(TABLE(300), TABLE(301), TABLE(302), TABLE(303)) '外矩形
DRAWLINE(TABLE(302), TABLE(303), TABLE(304), TABLE(305))
DRAWLINE(TABLE(304), TABLE(305), TABLE(306), TABLE(307))
DRAWLINE(TABLE(306), TABLE(307), TABLE(300), TABLE(301))
DRAWLINE(TABLE(308), TABLE(309), TABLE(310), TABLE(311)) '方向箭頭
DRAWLINE(TABLE(312), TABLE(313), TABLE(310), TABLE(311))
DRAWLINE(TABLE(314), TABLE(315), TABLE(310), TABLE(311))
if (0 = TABLE(316)) then return
SET_COLOR(C_GREEN)
DIM idx
for idx = 0 to TABLE(316)-1
DRAWLINE(TABLE(317+idx*4), TABLE(318+idx*4), TABLE(319+idx*4), TABLE(320+idx*4))
next
END SUB
13.在draw.bas文件中添加在“Set_Roi2”窗口界面按下【確定】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。
'設(shè)置Roi2窗口按下確定按鈕時(shí)響應(yīng)的函數(shù)
GLOBAL SUB btn_meas_confirm2()
HMI_CLOSEWINDOW(15)
END SUB
↓
14.新建meas.bas文件用于存放計(jì)算兩條直線的距離函數(shù)和標(biāo)定函數(shù)等測(cè)量相關(guān)函數(shù),并在文件中添加實(shí)現(xiàn)函數(shù)。
'計(jì)算兩條直線的距離寬度
global sub length1()
LOCAL dist,dist1,dist2
local dis_tmp,dst_tmp1
'計(jì)算直線2的起始點(diǎn)到直線1之間的距離
dist = ZV_DISTPL(d_meas_rst2(0),d_meas_rst2(1),d_meas_rst1(0),d_meas_rst1(1),d_meas_rst1(2),d_meas_rst1(3))
'計(jì)算直線2的終點(diǎn)到直線1之間的距離
dist1 = ZV_DISTPL(d_meas_rst2(2),d_meas_rst2(3),d_meas_rst1(0),d_meas_rst1(1),d_meas_rst1(2),d_meas_rst1(3))
'計(jì)算直線2的中點(diǎn)位置坐標(biāo)
dis_tmp=(d_meas_rst2(0)+d_meas_rst2(2))/2
dst_tmp1=(d_meas_rst2(1)+d_meas_rst2(3))/2
'計(jì)算直線2的中點(diǎn)到直線1之間的距離
dist2 = ZV_DISTPL(dis_tmp,dst_tmp1,d_meas_rst1(0),d_meas_rst1(1),d_meas_rst1(2),d_meas_rst1(3))
TABLE(500)=(dist+dist1+dist2)/3 '兩直線之間的距離
PixLength=TABLE(500)
?TABLE(500)
end sub
'計(jì)算實(shí)際尺寸值
global sub length2()
'實(shí)際尺寸=像素尺寸*像素比例
TABLE(501)=TABLE(500)*CalibParam
end sub
'計(jì)算像素比例,即實(shí)際值/像素值
global sub calculation()
CalibParam=WorldLength/TABLE(500)
end sub
15.在main.bas文件中添加“Set_Select”窗口界面按下【測(cè)試】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。
'測(cè)量設(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)開啟且模板已經(jīng)創(chuàng)建
'計(jì)算剛性變換矩陣
ZV_GETRIGIDVECTOR(mat_rigid, 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ǔ)正后的向量存入開始索引為0的TABLE中
ZV_VECTORCORRECT(mat_rigid, d_meas_base_v1(0), d_meas_base_v1(1),d_meas_base_v1(2), 0)
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ǔ)正后的向量存入開始索引為0的TABLE中
ZV_VECTORCORRECT(mat_rigid, d_meas_base_v2(0), d_meas_base_v2(1),d_meas_base_v2(2), 0)
d_meas_param2(0) = TABLE(0)
d_meas_param2(1) = TABLE(1)
d_meas_param2(4) = TABLE(2)
endif
'測(cè)量區(qū)域1
'生成直線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))
'測(cè)量區(qū)域2
'生成直線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)
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)
ZV_MATINFO(rst2, 0) 'table(0)作為臨時(shí)變量
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()
d_show_rst=TABLE(500)
if(CalibParam>0) then
'計(jì)算實(shí)際長(zhǎng)度
length2()
d_show_rst=TABLE(501)
endif
'繪制結(jié)果線
ZV_GRAYTORGB(grabImg, colorImg)
ZV_LINE(colorImg, TABLE(61), TABLE(62), TABLE(63), TABLE(64), C_GREEN)
ZV_LINE(colorImg, TABLE(65), TABLE(66), TABLE(67), TABLE(68), C_GREEN)
ZV_LINE(colorImg, TABLE(71), TABLE(72), TABLE(73), TABLE(74), C_GREEN)
ZV_LINE(colorImg, TABLE(75), TABLE(76), TABLE(77), TABLE(78), C_GREEN)
ZV_LATCH(colorImg,0)
END SUB
↓
在main.bas文件中添加“Set_Select”窗口界面按下【測(cè)試】按鈕時(shí)仿真的效果圖。
測(cè)試按鈕效果圖
16.設(shè)置“Set_Select”窗口界面【計(jì)算】按鈕關(guān)聯(lián)動(dòng)作函數(shù)名。
在“Set_Select”窗口界面按下【計(jì)算】按鈕時(shí)仿真的效果圖。
計(jì)算按鈕效果圖
17.在“Set_Select”窗口界面中關(guān)聯(lián)界面控件變量。
18.在main.bas文件中添加“Set_Select”窗口界面按下【返回主界面】按鈕時(shí)響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)名。
'按下返回主界面按鈕時(shí)響應(yīng)的函數(shù)
GLOBAL SUB Goto_Main()
HMI_CLOSEWINDOW(13)
END SUB
↓
19.在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
↓
在主界面按下【單次執(zhí)行】按鈕時(shí)仿真的效果圖。
20.在main.bas文件中修改主界面按下【連續(xù)執(zhí)行】按鈕時(shí)響應(yīng)的函數(shù)中執(zhí)行的任務(wù)函數(shù)內(nèi)容。
main_task:
while(1)
if (0 = run_switch) then
exit while
endif
'以下執(zhí)行相關(guān)定位操作
btn_grab()
btn_mea_test()
wend
END
在主界面按下【連續(xù)執(zhí)行】按鈕時(shí)仿真仿真執(zhí)行的效果圖。
連續(xù)運(yùn)行效果圖1
連續(xù)運(yùn)行效果圖2
在不同位置以不同角度放置時(shí),均能檢測(cè)到對(duì)應(yīng)尺寸。
本次,正運(yùn)動(dòng)技術(shù)VPLC系列機(jī)器視覺運(yùn)動(dòng)控制一體機(jī)快速入門(五)——尺寸測(cè)量就分享到這里,更多精彩內(nèi)容請(qǐng)關(guān)注“ 正運(yùn)動(dòng)小助手”公眾號(hào)。
本文由 正運(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)源。
-
機(jī)器視覺
+關(guān)注
關(guān)注
162文章
4401瀏覽量
120539 -
尺寸測(cè)量
+關(guān)注
關(guān)注
0文章
72瀏覽量
8304 -
工業(yè)機(jī)器視覺
+關(guān)注
關(guān)注
0文章
28瀏覽量
7620 -
正運(yùn)動(dòng)技術(shù)
+關(guān)注
關(guān)注
0文章
104瀏覽量
442
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論