當(dāng)前位置: 首頁 > 工業(yè)電氣產(chǎn)品 > 端子與連接器 > 線路板連接器 > FFC連接器
發(fā)布日期:2022-04-25 點(diǎn)擊率:83
關(guān)鍵詞:正運(yùn)動技術(shù),機(jī)器視覺,運(yùn)動控制一體機(jī)
摘要:齒輪缺齒是其生產(chǎn)制造過程中的一個重大缺陷,需通過檢測技術(shù)進(jìn)行規(guī)避。如果使用人工進(jìn)行檢測,不僅會增加人工成本,且檢測時容易漏檢或者由于注意力不集中而導(dǎo)致誤判,因此我們引入了機(jī)器視覺檢測技術(shù)進(jìn)行齒輪缺齒檢測。

齒輪缺齒是其生產(chǎn)制造過程中的一個重大缺陷,需通過檢測技術(shù)進(jìn)行規(guī)避。如果使用人工進(jìn)行檢測,不僅會增加人工成本,且檢測時容易漏檢或者由于注意力不集中而導(dǎo)致誤判,因此我們引入了機(jī)器視覺檢測技術(shù)進(jìn)行齒輪缺齒檢測。
機(jī)器視覺齒輪檢測為非接觸式的無損檢測方法,與傳統(tǒng)人工檢測相比,具有不可取代的優(yōu)越性。
機(jī)器視覺齒輪檢測系統(tǒng)在追求高速度、高效率、高重復(fù)性和精確度的工業(yè)生產(chǎn)制造過程中也更為可靠,把機(jī)器視覺檢測方法用于制造系統(tǒng)是工業(yè)發(fā)展的方向和必然趨勢,也是提高生產(chǎn)效率的有效途徑。
上期課程,我們講述了機(jī)器視覺方案中液位檢測的應(yīng)用例程,本期課程我們和大家一起分享機(jī)器視覺齒輪缺輪檢測的應(yīng)用例程。
一檢測原理
(一)檢測要求
檢測齒輪狀產(chǎn)品外邊緣上的輪齒是否完整,如有缺失返回“NG”狀態(tài),并顯示位置信息。若齒輪完整,則返回“OK”狀態(tài)。

(二)軟件算法

二軟件實(shí)現(xiàn)
(一)軟件實(shí)現(xiàn)
1.打開ZDevelop軟件:新建項(xiàng)目→新建“HMI”文件→新建“main.bas”文件,用于編寫界面響應(yīng)函數(shù)→新建“global_variable.bas”文件用于存放全局變量并開啟HMI自動運(yùn)行任務(wù)→新建“detectParam.bas”文件用于初始化測量參數(shù)→新建“camera.bas”文件用于實(shí)現(xiàn)相機(jī)采集功能→文件添加到項(xiàng)目。

2.設(shè)計HMI界面。

3.在“global_variable.bas”文件中定義全局變量,定義完成后運(yùn)行“Hmi.hmi”文件。
'''''全局變量大部分使用數(shù)組結(jié)構(gòu)'''''
''注:basic編程中很多函數(shù)會以TABLE(系統(tǒng)的數(shù)據(jù)結(jié)構(gòu))做為參數(shù)
''table 說明 table 說明
''0 ' 自動二值化閾值 11~12 鼠標(biāo)操作時獲取的坐標(biāo)
''2 亮區(qū)域的面積 20~24 圖像信息
''4 暗區(qū)域的面積 6 齒輪的數(shù)量
''40~42 齒輪的面積和位置X,Y數(shù)據(jù)
'主任務(wù)狀態(tài)
'0 - 未初始化
'1 - 停止
'2 - 運(yùn)行中
'3 - 正在停止
GLOBAL DIM main_task_state
main_task_state = 1
'采集開關(guān)
'0 - 停止采集
'1 - 請求采集
GLOBAL DIM grab_switch
grab_switch = 0
'相機(jī)個數(shù)
GLOBAL cam_num
cam_num = 0
'相機(jī)種類,"zmotion;mvision;basler;mindvision;huaray"
GLOBAL DIM CAMERA_TYPE(16)
CAMERA_TYPE = "mvision"
' 定義主任務(wù)id - 10
GLOBAL DIM main_task_id
main_task_id = 10
'定義連續(xù)采集任務(wù)id - 9
GLOBAL DIM grab_task_id
grab_task_id = 9
'定義全局圖像變量
GLOBAL ZVOBJECT grabImg '采集圖像
GLOBAL ZVOBJECT disImg '顯示圖像
'定義常用顏色變量
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)
'檢測參數(shù):閾值模式(自動閾值或手動閾值)、低閾值、高閾值、最小面積、最大面積
GLOBAL DIM d_detect_param(5) 'd開頭表示數(shù)據(jù)結(jié)構(gòu)
'檢測消耗時間
GLOBal DIM d_detect_time
'顯示打印的字符
GLOBAL ShowString(64)
GLOBAL ShowString1(64)
'***********定義讀取本地文件功能相關(guān)變量**************
''注意,該功能只在使用仿真器時有效
'定義是否使用本地圖片標(biāo)志
GLOBAL DIM d_use_imgfile
'定義本地圖片索引
GLOBAL DIM d_index
'定義讀取圖片的路徑
GLOBAL DIM File_Name(100)
'***********結(jié)束定義讀取本地文件功能相關(guān)變量**********
'運(yùn)行HMI文件
RUN "Hmi.hmi",1
4.在“detectParam.bas”文件中初始化測量參數(shù)。
end
GLOBAL SUB init_detect_param() '初始化測量參數(shù)
'初始化檢測參數(shù):閾值模式(自動閾值 = 1 或 手動閾值 = 0)、低閾值、高閾值、極性(黑或白)、最大、最小、反向(即結(jié)果取反,成功變成失敗、失敗變成成功)
d_detect_param(0) = 0 '手動閾值
d_detect_param(1) = 140 '低閾值
d_detect_param(2) = 255 '高閾值
d_detect_param(3) = 160000 '最小面積即像素個數(shù)
d_detect_param(4) = 180000 '最大面積
d_use_imgfile = 1 '默認(rèn)使用本地圖片
d_index = 0
TABLE(6)=0 '將齒輪數(shù)量初始化為0
END SUB
5.關(guān)聯(lián)HMI界面控件變量。

6.在“main.bas”文件中添加HMI界面初始化函數(shù)并在Hmi系統(tǒng)設(shè)置中關(guān)聯(lián)初始化函數(shù)。
'HMI界面初始化函數(shù)
GLOBAL SUB hmi_init()
grab_switch = 0 '停止采集
main_task_state = 1 '主任務(wù)停止運(yùn)行
ZV_RESETCLIPSIZE(1280, 960) '依據(jù)圖像分辨率設(shè)置區(qū)域的裁剪尺寸,此處圖像分辨率為1280x960
ZV_LATCHSETSIZE(0, HMI_ConTROLSIZEX(10, 7), HMI_ConTROLSIZEY(10, 7)) '設(shè)置鎖存的大小
init_detect_param() '初始化測量參數(shù)
ZV_SETSYSDBL("CamGetTimeout", 1000) '設(shè)置采集超時
ZV_SETSYSINT("LineWidth",6)
ZV_LATCHCLEAR(0) '清空鎖存通道0
END SUB

7.在“camera.bas”文件中添加HMI界面中采集相關(guān)按鈕響應(yīng)的函數(shù)并關(guān)聯(lián)動作函數(shù)。(說明:具體實(shí)現(xiàn)函數(shù)前兩篇課程內(nèi)容已經(jīng)有操作演示,此處不做贅述。)

8.在“main.bas”文件中添加HMI界面按下【測試】按鈕時響應(yīng)的函數(shù)并關(guān)聯(lián)動作函數(shù)名。
'HMI界面按下測試按鈕時響應(yīng)的函數(shù)
GLOBAL SUB btn_test()
TABLE(6)=0 '檢測前先將結(jié)果數(shù)據(jù)清0
d_detect_time=0
TICKS=0
'定義變量,依次為白色像素連通區(qū)域,掩模區(qū)域,黑色像素連通區(qū)域,齒輪連通區(qū)域結(jié)果列表,單個齒輪連通區(qū)域,圓環(huán)區(qū)域,齒輪齒牙連通區(qū)域
ZVOBJECT regionWhite, regionMask, regionBlack,re_connecte,circle_connect,region,re_connecte1
'生成全圖像區(qū)域
ZV_REGENFULLIMG(grabImg,regionMask)
'二值化處理
if d_detect_param(0) = 0 then '如果選擇手動閾值模式
'根據(jù)低閾值和高閾值參數(shù)生成白色像素圖像regionWhite
ZV_RETHRESH(grabImg, regionMask, regionWhite, d_detect_param(1), d_detect_param(2))
'對白色像素區(qū)域進(jìn)行一次1*1的開運(yùn)算
ZV_REOPENING(regionWhite,regionWhite,3,3)
'對白色像素區(qū)域進(jìn)行一次1*1的閉運(yùn)算
ZV_RECLOSING(regionWhite,regionWhite,3,3)
else '如果選擇自動閾值模式
Dim autoThresh '定義自動閾值模式下的二值化閾值
'在grabImg圖像中的指定區(qū)域內(nèi)對圖像進(jìn)行自動二值化處理,輸出二值化區(qū)域regionWhite
ZV_REAUTOTHRESH(grabImg, regionMask, regionWhite, 0)
'對白色像素區(qū)域進(jìn)行一次1*1的開運(yùn)算
ZV_REOPENING(regionWhite,regionWhite,1,1)
'對白色像素區(qū)域進(jìn)行一次1*1的閉運(yùn)算
ZV_RECLOSING(regionWhite,regionWhite,1,1)
autoThresh = TABLE(0)
? "autoThresh = " autoThresh '打印提示信息,當(dāng)前二值化閾值
endif
ZV_REDIFF (regionMask, regionWhite, regionBlack) '差集運(yùn)算,結(jié)果為regionBlack(黑色像素區(qū)域)
ZV_REAREA(regionBlack, 500) '計算黑色像素區(qū)域的面積(即像素數(shù)量)存放到table(500)中
if(TABLE(500)>0) then '如果獲取到的黑色像素數(shù)量大于0
ZV_REConNECT(regionBlack,re_connecte) '計算區(qū)域的連通區(qū)域,存放到re_connecte列表中
zv_refilter(re_connecte,0,d_detect_param(3),d_detect_param(4),0)'對區(qū)域列表中的區(qū)域進(jìn)行過濾,保留面積在 d_detect_param(3) 到 d_detect_param(4) 的區(qū)域,面積不在此范圍的區(qū)域?qū)⒈贿^濾掉
zv_refilter(re_connecte,20,0.9,1.2,0)'對區(qū)域列表中的區(qū)域進(jìn)行過濾,保留最小外接矩形高寬比在0.9 到 1.2 的區(qū)域,面積不在此范圍的區(qū)域?qū)⒈贿^濾掉
ZV_LISTCOUNT(re_connecte,6) '獲取列表中的連通區(qū)域的數(shù)量,存放到table(6)中
endif
'繪制效果圖
Dim width, height
ZV_IMGINFO (grabImg, 20)'獲取grabImg的圖像信息
width = TABLE(20)
height = TABLE(21)
ZV_GRAYTORGB(grabImg,disImg)'將灰度圖轉(zhuǎn)換到RGB圖像,用于繪制檢測結(jié)果圖像
ZV_REGION(disImg, regionMask, 0, ZV_COLOR(0,0,0)) '繪制黑色的regionMask區(qū)域
ZV_REGION(disImg, regionWhite, 0, ZV_COLOR(255,255,255))'繪制白色的regionWhite區(qū)域
for i=0 to TABLE(6)-1 '循環(huán)獲取齒輪的位置XY信息生成圓環(huán)區(qū)域,檢測是否缺齒
ZV_LISTGET(re_connecte,circle_connect,i) '獲取列表中序號為i的元素,即依次獲取列表中齒輪連通區(qū)域
ZV_REAREACENTER(circle_connect,40) '計算每個齒輪的面積與中心位置,將數(shù)據(jù)放入TABLE(40)中
ZV_REGENANNULAR(region,TABLE(41),TABLE(42),220,260)'生成圓環(huán)區(qū)域
'根據(jù)低閾值和高閾值參數(shù)生成白色像素圖像regionWhite
ZV_RETHRESH(grabImg, region, regionWhite, d_detect_param(1), d_detect_param(2))
ZV_REDIFF (region, regionWhite, regionBlack)'進(jìn)行差集運(yùn)算,結(jié)果為regionBlack(黑色像素區(qū)域)
ZV_REConNECT(regionBlack,re_connecte1) '計算圓環(huán)區(qū)域內(nèi)的黑色連通區(qū)域,存放到re_connecte列表中
zv_refilter(re_connecte1,0,1000,3000,0) '對區(qū)域列表中的連通區(qū)域進(jìn)行面積過濾
ZV_LISTCOUNT(re_connecte1,8) '獲取單個齒輪齒牙的數(shù)量,存放到table(8)中
if TABLE(8)=25 then
ZV_TEXT(disImg,"OK",TABLE(41),TABLE(42),70,ZV_COLOR(0,255,0)) '顯示結(jié)果文本
else
ShowString=TOSTR(TABLE(41),1,2)
ShowString1=TOSTR(TABLE(42),1,2)
ZV_TEXT(disImg,"NG,"ShowString","ShowString1,TABLE(41),TABLE(42),55,ZV_COLOR(255,0,0)) '顯示結(jié)果文本
endif
ZV_MARKER(disImg,TABLE(41),TABLE(42),0,50,zv_color(0,255,0)) '在圖像img中繪制十字
next
ZV_LATCH(disImg, 0) '在鎖存通道0中顯示結(jié)果圖像
d_detect_time=ABS(TICKS)'計算檢測消耗時間
END SUB

9.在“main.bas”文件中添加【運(yùn)行】按鈕響應(yīng)的函數(shù)并關(guān)聯(lián)動作函數(shù)。
'HMI界面按下運(yùn)行按鈕時響應(yīng)的函數(shù)
GLOBAL SUB btn_run()
if(2 = main_task_state) then '如果主任務(wù)處于運(yùn)行狀態(tài),打印提示信息并退出函數(shù)
?"已經(jīng)開啟連續(xù)運(yùn)行任務(wù),請勿重復(fù)操作!"
return
endif
if (1 = main_task_state) then '如果主任務(wù)處于停止?fàn)顟B(tài)
if (0 = PROC_STATUS(main_task_id)) then '如果任務(wù)未開啟
main_task_state = 2 '主任務(wù)狀態(tài)設(shè)置為2,表示正在執(zhí)行連續(xù)任務(wù)
RUNTASK main_task_id, main_task '開啟主任務(wù)
endif
endif
END SUB

10.在“main.bas”文件中添加【停止】按鈕響應(yīng)的函數(shù)并關(guān)聯(lián)動作函數(shù)。
'HMI界面按下停止按鈕時響應(yīng)的函數(shù)
GLOBAL SUB btn_stop()
if (2 = main_task_state) then '如果主任務(wù)狀態(tài)處于3即正在連續(xù)執(zhí)行任務(wù)時
main_task_state = 3 '將主任務(wù)狀態(tài)置為3,退出循環(huán)
endif
END SUB

三操作演示
(一)操作步驟
查看運(yùn)行效果:將控制器接入電源,使用網(wǎng)線將控制器與PC連接,將相機(jī)通電并接入控制器→將相機(jī)、光源安裝在打光測試架上,鏡頭連接到相機(jī)上→連接控制器,并將項(xiàng)目下載到控制器→運(yùn)行程序,調(diào)整打光圖像效果,測試程序運(yùn)行效果。
完整代碼獲取地址
▼

本次,正運(yùn)動技術(shù)機(jī)器視覺運(yùn)動控制一體機(jī)應(yīng)用例程(七)齒輪缺齒檢測,就分享到這里。
更多精彩內(nèi)容請關(guān)注“正運(yùn)動小助手”公眾號,需要相關(guān)開發(fā)環(huán)境與例程代碼,請咨詢正運(yùn)動技術(shù)銷售工程師:400-089-8936。
本文由正運(yùn)動技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國智能制造水平。文章版權(quán)歸正運(yùn)動技術(shù)所有,如有轉(zhuǎn)載請注明文章來源。
下一篇: PLC、DCS、FCS三大控