當(dāng)前位置: 首頁 > 工業(yè)電氣產(chǎn)品 > 端子與連接器 > 線路板連接器 > FFC連接器
發(fā)布日期:2022-04-25 點擊率:66
關(guān)鍵詞:正運動技術(shù),PLC,機器視覺
摘要:在《會PLC也能玩轉(zhuǎn)機器視覺(二)》的課程中,我們講述了ZPLC調(diào)用BASIC子程序完成機器視覺識別條形碼的功能。
本期課程我們將通過BLOB斑點定位的視覺功能,繼續(xù)和大家一起探討使用ZPLC語言實現(xiàn)機器視覺功能的方法。
一檢測原理
(一)BLOB斑點檢測
使用形態(tài)學(xué)方法(如二值化、膨脹、腐蝕等)將灰度圖像轉(zhuǎn)換成二值化圖像,轉(zhuǎn)換同時將檢測特征處理成BLOB斑點并將干擾因素處理成圖像背景,就可以準(zhǔn)確地對檢測特征進行提取并進一步處理。
(二)BLOB斑點定位
當(dāng)需要檢測的樣品具有固定形狀(如為圓環(huán)小零件)時,檢測到BLOB斑點區(qū)域后,可以根據(jù)區(qū)域的特性,獲取BLOB斑點區(qū)域的面積和中心位置XY,從而達到BLOB斑點定位的目的。同時還可以根據(jù)BLOB斑點區(qū)域擬合成最小外接矩形,并根據(jù)矩形寬高比過濾篩選掉不符合條件的BLOB斑點。
二軟件演示
(一)檢測要求
使用ZDevelop軟件的ZBASIC編程語言編寫程序,用于檢測以下路徑中圖片的樣品重心位置XY。再使用ZPLC編程語言調(diào)用BASIC程序的主任務(wù),進行循環(huán)檢測識別。
(二)實例演示
1.打開ZDevelop軟件:新建項目→新建HMI文件→新建main.bas文件→新建global_variable.bas文件→新建Plc1.plc文件,用于編寫PLC執(zhí)行程序→文件添加到項目。
2.設(shè)計HMI界面。
3.在global_variable.bas文件中添加全局變量。
'''''全局變量大部分使用數(shù)組結(jié)構(gòu)'''''
''注:basic編程中很多函數(shù)會以TABLE(系統(tǒng)的數(shù)據(jù)結(jié)構(gòu))做為參數(shù)
''table 說明 table 說明
''2 亮區(qū)域的面積 6 連通區(qū)域的數(shù)量
''40~42 小圓斑點的面積和位置X,Y數(shù)據(jù)
'主任務(wù)狀態(tài)
'0 - 未初始化
'1 - 停止
'2 - 運行中
'3 - 正在停止
GLOBAL DIM main_task_state
main_task_state = 1
' 定義主任務(wù)id - 10
GLOBAL DIM main_task_id
main_task_id = 10
'定義全局圖像變量
GLOBAL ZVOBJECT grabImg,disImg ''采集圖像,顯示圖像
'檢測消耗時間
GLOBal DIM d_detect_time
'小圓的位置x/y結(jié)果
GLOBal DIM d_circle_rst(24)
'顯示打印的字符
GLOBAL ShowString(64)
'定義本地圖片索引
GLOBAL DIM d_index
'定義讀取圖片的路徑
GLOBAL DIM File_Name(100)
'運行HMI文件
RUN "Hmi.hmi",1
4.關(guān)聯(lián)HMI界面控件變量。
5.在main.bas文件中添加界面初始化函數(shù),并在hmi系統(tǒng)設(shè)置中關(guān)聯(lián)初始化函數(shù)名。
end
'注:
'凡是要使用Region有關(guān)的算子在系統(tǒng)初始化時都要調(diào)用ZV_RESETCLIPSIZE(width, height)這個算子設(shè)置下圖像尺寸,以滿足相機分辨率,因為默認的是640*480尺寸
'HMI界面初始化函數(shù)
GLOBAL SUB hmi_init()
main_task_state = 1 '主任務(wù)停止運行
ZV_RESETCLIPSIZE(1280, 960)'初始化時依據(jù)圖像分辨率設(shè)置區(qū)域的裁剪尺寸,此處圖像分辨率為1280x960
ZV_LATCHSETSIZE(0, HMI_ConTROLSIZEX(10, 7), HMI_ConTROLSIZEY(10, 7)) '設(shè)置鎖存的大小
'初始化測量參數(shù)
d_index = 0
TABLE(6)=0 '將小圓數(shù)量初始化為0
for i=0 to 23
d_circle_rst(i)=0
next
ZV_SETSYSDBL("CamGetTimeout", 1000) '設(shè)置采集超時
ZV_LATCHCLEAR(0) '清空鎖存通道0
END SUB
6.在main.bas文件中添加HMI界面按下測試按鈕響應(yīng)的函數(shù),并關(guān)聯(lián)動作函數(shù)名。
'HMI界面按下測試按鈕時響應(yīng)的函數(shù)
GLOBAL SUB btn_test()
TICKS=0
'循環(huán)讀取本地圖片
if(d_index=3) then
d_index=0
endif
File_Name="圓定位"+TOSTR(d_index,1,0)+".bmp" '.../flash/圓定位/目錄下的圖片所在的路徑名稱
ZV_IMGREAD(grabImg,File_Name,0)
ZV_LATCH(grabImg, 0)
TABLE(6)=0 '檢測前先將數(shù)據(jù)清0
d_detect_time=0
for i=0 to 23
d_circle_rst(i)=0
next
'定義變量,依次為白色像素連通區(qū)域,掩模區(qū)域,連通區(qū)域結(jié)果列表,小圓斑點區(qū)域
ZVOBJECT regionWhite, regionMask, re_connecte,circle_connect
ZV_REGENFULLIMG(grabImg,regionMask)
'根據(jù)低閾值和高閾值參數(shù)生成白色像素圖像regionWhite
ZV_RETHRESH(grabImg, regionMask, regionWhite, 128,255)
'對白色像素區(qū)域進行一次1*1的開運算
ZV_REOPENING(regionWhite,regionWhite,1,1)
'對白色像素區(qū)域進行一次1*1的閉運算
ZV_RECLOSING(regionWhite,regionWhite,1,1)
'計算BLOB面積
ZV_REAREA(regionWhite, 2) '計算regionWhite亮區(qū)域的面積,存放到table(2)中
if(TABLE(2)>0) then '如果獲取到的白色像素數(shù)量大于0
ZV_REConNECT(regionWhite,re_connecte) '計算區(qū)域的連通區(qū)域,存放到re_connecte列表中
zv_refilter(re_connecte,0,11000,12000,0)'對區(qū)域列表中的區(qū)域進行過濾,保留面積在11000到12000的區(qū)域,面積不在此范圍的區(qū)域?qū)⒈贿^濾掉
zv_refilter(re_connecte,20,0.9,1.1,0)'對區(qū)域列表中的連通區(qū)域進行過濾,保留最小外接矩形高寬比在0.9 到 1.1 的區(qū)域
ZV_RESORT(re_connecte,1,1) '對區(qū)域列表中的區(qū)域按照重心X的數(shù)據(jù)進行升序排序
ZV_LISTCOUNT(re_connecte,6) '獲取列表中的連通區(qū)域的數(shù)量,存放到table(6)中
endif
ZV_GRAYTORGB(grabImg,disImg)'將灰度圖轉(zhuǎn)換到RGB圖像,用于繪制檢測結(jié)果圖像
ZV_REGION(disImg, regionMask, 0, ZV_COLOR(0,0,0))'在disImg中繪制黑色的regionMask區(qū)域
ZV_REGION(disImg, regionWhite, 0, ZV_COLOR(255,255,255))'在disImg中繪制白色的regionWhite區(qū)域
for i=0 to TABLE(6)-1 '循環(huán)獲取小圓斑點的位置XY信息生成圓測量器,檢測圓心位置
ZV_LISTGET(re_connecte,circle_connect,i) '獲取列表中序號為i的元素,即依次獲取列表中小圓斑點的連通區(qū)域
ZV_REGION(disImg,circle_connect,0,ZV_COLOR(255,255,0))'繪制斑點區(qū)域
ZV_REAREACENTER(circle_connect,40) '計算斑點區(qū)域的面積與中心位置,將位置放入TABLE(40)中
ZV_MARKER(disImg,TABLE(41),TABLE(42),0,50,zv_color(0,255,0)) '在圖像img中繪制十字
ShowString=TOSTR(i,1,0) '將BLOB的數(shù)量轉(zhuǎn)換成字符串變量
ZV_TEXT(disImg,ShowString,TABLE(41),TABLE(42),50,ZV_COLOR(0,0,255)) '顯示結(jié)果文本
d_circle_rst(i*2+0)=TABLE(41)'將測量圓的結(jié)果賦值給圓心變量,顯示到界面中
d_circle_rst(i*2+1)=TABLE(42)
next
ZV_LATCH(disImg, 0) '在鎖存通道0中顯示結(jié)果圖像
d_index=d_index+1
d_detect_time=ABS(TICKS)'計算檢測消耗時間
END SUB
7.在main.bas文件中添加HMI界面按下運行按鈕響應(yīng)的函數(shù),并關(guān)聯(lián)動作函數(shù)名。
'HMI界面按下運行按鈕時響應(yīng)的函數(shù)
GLOBAL SUB btn_run()
if(2 = main_task_state) then '如果主任務(wù)處于運行狀態(tài),打印提示信息并退出函數(shù)
?"已經(jīng)開啟連續(xù)運行任務(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
''主任務(wù)實現(xiàn)函數(shù)
'main_task:
' while(1)
' if (3 = main_task_state) then '如果主任務(wù)狀態(tài)處于3即按下停止按鈕時
' main_task_state = 1 '將主任務(wù)狀態(tài)置為1
' exit while '退出循環(huán)
' endif
'
' '重復(fù)執(zhí)行采集和檢測函數(shù)
' btn_test()
'
' wend
'END
8.在main.bas文件中添加HMI界面按下停止按鈕響應(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
9.在main.bas文件中注釋連續(xù)運行執(zhí)行的主任務(wù)的函數(shù)部分,在Plc1.plc文件中添加ZPLC調(diào)用主任務(wù)執(zhí)行函數(shù)子程序的代碼。
仿真演示效果1
仿真演示效果2
仿真演示效果3
本次,正運動技術(shù)會PLC也能玩轉(zhuǎn)機器視覺(三) BLOB斑點定位,就分享到這里。
更多精彩內(nèi)容請關(guān)注“正運動小助手”公眾號,需要相關(guān)開發(fā)環(huán)境與例程代碼,請咨詢正運動技術(shù)銷售工程師:400-089-8936。
本文由正運動技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國智能制造水平。文章版權(quán)歸正運動技術(shù)所有,如有轉(zhuǎn)載請注明文章來源。
關(guān)于正運動技術(shù)
正運動技術(shù)專注于運動控制技術(shù)研究和通用運動控制軟硬件產(chǎn)品的研發(fā),是國家級高新技術(shù)企業(yè),主要產(chǎn)品有運動控制器、運動控制卡、視覺運動控制一體機、人機界面以及擴展模塊等。
正運動技術(shù)匯集了來自華為、中興等公司的優(yōu)秀人才,在堅持自主創(chuàng)新的同時,積極聯(lián)合各大高校協(xié)同運動控制基礎(chǔ)技術(shù)的研究,是國內(nèi)工控領(lǐng)域發(fā)展最快的企業(yè)之一,也是國內(nèi)少有、完整掌握運動控制核心技術(shù)和實時工控軟件平臺技術(shù)的企業(yè)。
下一篇: PLC、DCS、FCS三大控