當(dāng)前位置: 首頁(yè) > 工業(yè)控制產(chǎn)品 > 自動(dòng)化控制 > PLC可編程控制器
發(fā)布日期:2022-04-25 點(diǎn)擊率:85
關(guān)鍵詞:正運(yùn)動(dòng)技術(shù),PLC,機(jī)器視覺
摘要:前幾期課程,我們講述了PLC的梯形圖語(yǔ)言的基本知識(shí),并與大家分享了使用ZDevelop軟件的ZPLC語(yǔ)言調(diào)用ZVision視覺指令的方法。
前幾期課程,我們講述了PLC的梯形圖語(yǔ)言的基本知識(shí),并與大家分享了使用ZDevelop軟件的ZPLC語(yǔ)言調(diào)用ZVision視覺指令的方法。
本期課程我們將通過(guò)使用ZPLC語(yǔ)言實(shí)現(xiàn)識(shí)別條形碼的視覺功能的程序示例,進(jìn)一步帶領(lǐng)大家去了解PLC玩轉(zhuǎn)機(jī)器視覺的實(shí)現(xiàn)方法。
一檢測(cè)原理
(一)識(shí)別條形碼
條形碼是由不同的寬度、不同的反射率的條(黑色)和空(白色)組成的,根據(jù)特定的編碼規(guī)則編制,用于表達(dá)一組數(shù)字、字母信息的圖形標(biāo)識(shí)符。機(jī)器視覺在進(jìn)行條形碼識(shí)別的過(guò)程中,將采集到的條形碼信息二值化為黑白條,并根據(jù)條形碼的編碼規(guī)則輸出對(duì)應(yīng)的存儲(chǔ)內(nèi)容。
(二)PLC玩轉(zhuǎn)視覺
在《會(huì)PLC也能玩轉(zhuǎn)機(jī)器視覺(一)》的推文中,我們介紹了使用ZPLC編程語(yǔ)言調(diào)用ZBasic語(yǔ)言的方法,即EXE @BASIC指令。本期課程我們將和大家分享另一種調(diào)用方法,即使用ZPLC編程語(yǔ)言調(diào)用BASIC子程序。
二軟件演示
(一)檢測(cè)要求
使用ZDevelop軟件的ZBASIC編程語(yǔ)言編寫程序,用于識(shí)別軟件所在目錄的flash文件夾下命名為“code”文件夾下的條形碼內(nèi)容。再使用ZPLC編程語(yǔ)言調(diào)用BASIC程序的主任務(wù),進(jìn)行循環(huán)檢測(cè)識(shí)別。
(二)實(shí)例演示
1.打開ZDevelop軟件:新建項(xiàng)目→新建HMI文件→新建main.bas文件→新建global_variable.bas文件→新建Plc1.plc文件,用于編寫PLC執(zhí)行程序→文件添加到項(xiàng)目。
2.設(shè)計(jì)HMI界面。
3.在global_variable.bas文件中添加全局變量。
'''''全局變量大部分使用數(shù)組結(jié)構(gòu)'''''
''注:basic編程中很多函數(shù)會(huì)以TABLE(系統(tǒng)的數(shù)據(jù)結(jié)構(gòu))做為參數(shù)
''table 說(shuō)明 table 說(shuō)明
''1~7 矩形roi控件坐標(biāo)數(shù)據(jù) 24 數(shù)據(jù)碼類型
''11~12 鼠標(biāo)操作時(shí)獲取的坐標(biāo) 26 數(shù)據(jù)碼結(jié)果
'主任務(wù)狀態(tài)
'0 - 未初始化
'1 - 停止
'2 - 運(yùn)行中
'3 - 正在停止
GLOBAL DIM main_task_state
main_task_state = 1
' 任務(wù)號(hào)劃分, 主任務(wù)id - 10
GLOBAL DIM main_task_id
main_task_id = 10
'定義圖像變量
GLOBAL ZVOBJECT grabImg
'識(shí)別消耗時(shí)間
GLOBAL DIM d_identfy_time
d_identfy_time = 0
'識(shí)別結(jié)果,結(jié)果存儲(chǔ)方式為:類型:識(shí)別內(nèi)容,如EAN-13:123456789
GLOBAL DIM d_identfy_rst(256)
'定義本地圖片索引
GLOBAL DIM d_index
d_index=0
'定義讀取圖片的路徑
GLOBAL DIM File_Name(100)
'全局變量定義完成后再運(yùn)行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
'HMI界面初始化函數(shù)
GLOBAL SUB hmi_init()
main_task_state = 1 '初始化定位檢測(cè)主任務(wù)狀態(tài)為停止?fàn)顟B(tài)1
ZV_RESETCLIPSIZE(1280, 960) '初始化時(shí)依據(jù)圖像分辨率設(shè)置區(qū)域的裁剪尺寸,此處圖像分辨率為1280x960
ZV_LATCHSETSIZE(0, HMI_ConTROLSIZEX(10, 5), HMI_ConTROLSIZEY(10, 5)) '設(shè)置鎖存的大小
d_identfy_rst=""
ZV_LATCHCLEAR(0)'清空鎖存通道0
END SUB
6.在main.bas文件中添加HMI界面按下單次執(zhí)行按鈕響應(yīng)的函數(shù),并關(guān)聯(lián)動(dòng)作函數(shù)名。
'HMI界面按下單次執(zhí)行按鈕時(shí)響應(yīng)的函數(shù)
GLOBAL SUB btn_identfy_test()
'開始識(shí)別
TICKS = 0'開始計(jì)時(shí)
if(d_index=4) then
d_index=0
endif
File_Name="code"+TOSTR(d_index,1,0)+".bmp" '.../flash/code/目錄下的圖片所在的路徑名稱
ZV_IMGREAD(grabImg,File_Name,0)
DIM tmp1(64),tmp2(64) '定義中間變量參數(shù)
ZVOBJECT codeList, codeRst
ZV_CLEAR(codeList) '清空結(jié)果列表
d_identfy_rst=""
'根據(jù)編碼類型(自動(dòng))和掃描步長(zhǎng)(1)讀取采集圖像中的對(duì)應(yīng)數(shù)據(jù)碼內(nèi)容,將結(jié)果存放到codeList中
ZV_CODEREAD(grabImg,codeList,0,1)
if ZV_LISTCOUNT(codeList) > 0 then '如果列表中元素的數(shù)量大于0
ZV_LISTGET(codeList,codeRst,0) '取出第一個(gè)條碼結(jié)果作為顯示
ZV_CODETYPESTR(codeRst,64,24) '獲取數(shù)據(jù)碼類型并將其存入起始索引為24的TABLE中
DMCPY tmp1(0),TABLE(24),64 '將TABLE中的數(shù)組拷貝至tmp1中
ZV_CODESTR(codeRst,64,26) '獲取數(shù)據(jù)碼結(jié)果并將其存入起始索引為26的TABLE中
DMCPY tmp2(0), TABLE(26), 64 '將TABLE中的數(shù)組拷貝至tmp2中
d_identfy_rst = tmp1 + ":"tmp2 '顯示識(shí)別結(jié)果為 數(shù)據(jù)碼類型:數(shù)據(jù)碼結(jié)果
else
d_identfy_rst = "identify fail!" '識(shí)別失敗給變量賦值"identify fail!"
endif
ZV_LATCH(grabImg, 0)
d_index=d_index+1
d_identfy_time = abs(TICKS) '計(jì)算識(shí)別消耗的時(shí)間
END SUB
7.在main.bas文件中添加HMI界面按下連續(xù)運(yùn)行按鈕響應(yīng)的函數(shù),并關(guān)聯(lián)動(dòng)作函數(shù)名。
'HMI界面按下連續(xù)運(yùn)行按鈕時(shí)響應(yīng)的函數(shù)
GLOBAL SUB btn_run()
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è)置為正在運(yùn)行狀態(tài)
RUNTASK main_task_id, main_task'開啟主任務(wù)
endif
endif
END SUB
''主任務(wù)執(zhí)行的函數(shù)
'main_task:
' while(1)
' if (3 = main_task_state) then'如果主任務(wù)狀態(tài)處于正在停止?fàn)顟B(tài)即停止按鈕按下時(shí)
' main_task_state = 1'將主任務(wù)狀態(tài)設(shè)置為停止?fàn)顟B(tài)
' exit while '退出循環(huán)
' endif
'
' '否則重復(fù)執(zhí)行以下操作
' btn_identfy_test() '識(shí)別條形碼
'
' wend
'END
8.在main.bas文件中添加HMI界面按下停止運(yùn)行按鈕響應(yīng)的函數(shù),并關(guān)聯(lián)動(dòng)作函數(shù)名。
'HMI界面按下停止按鈕時(shí)響應(yīng)的函數(shù)
GLOBAL SUB btn_stop()
if (2 = main_task_state) then '如果主任務(wù)狀態(tài)處于2即正在連續(xù)執(zhí)行任務(wù)時(shí)
main_task_state = 3 '將主任務(wù)狀態(tài)置為3,退出循環(huán)
endif
END SUB
9.在main.bas文件中注釋連續(xù)運(yùn)行執(zhí)行的主任務(wù)的函數(shù)部分,在Plc1.plc文件中添加ZPLC調(diào)用主任務(wù)執(zhí)行函數(shù)子程序的代碼。
仿真演示效果1
仿真演示效果2
仿真演示效果3
仿真演示效果4
本次,正運(yùn)動(dòng)技術(shù)會(huì)PLC也能玩轉(zhuǎn)機(jī)器視覺(二),就分享到這里。
更多精彩內(nèi)容請(qǐng)關(guān)注“正運(yùn)動(dòng)小助手”公眾號(hào),需要相關(guān)開發(fā)環(huán)境與例程代碼,請(qǐng)咨詢正運(yùn)動(dòng)技術(shù)銷售工程師: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)源。
下一篇: PLC、DCS、FCS三大控