在线免费观看成年人视频-在线免费观看国产-在线免费观看国产精品-在线免费观看黄网站-在线免费观看精品

產(chǎn)品分類

當(dāng)前位置: 首頁(yè) > 工業(yè)控制產(chǎn)品 > 自動(dòng)化控制 > PLC可編程控制器

類型分類:
科普知識(shí)
數(shù)據(jù)分類:
PLC可編程控制器

會(huì)PLC也能玩轉(zhuǎn)機(jī)器視覺(二)

發(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視覺指令的方法。


image.png


前幾期課程,我們講述了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)目。


image.png


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


image.png


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界面控件變量。


image.png


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


image.png


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


image.png


9.在main.bas文件中注釋連續(xù)運(yùn)行執(zhí)行的主任務(wù)的函數(shù)部分,在Plc1.plc文件中添加ZPLC調(diào)用主任務(wù)執(zhí)行函數(shù)子程序的代碼。


image.png

仿真演示效果1


image.png

仿真演示效果2


image.png

仿真演示效果3


image.png

仿真演示效果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三大控

上一篇: 機(jī)器視覺運(yùn)動(dòng)控制一體

推薦產(chǎn)品

更多