超碰激情 I 成人福利网站 I 淫国产 I 曰批视频免费30分钟成人 I 刘亦菲裸体视频一区二区三区 I 午夜久 I 尤物综合 I 亚洲一区av在线观看 I 欧美亚洲国产精品久久高清 I 欧美老熟妇乱子伦视频 I 无码中出人妻中文字幕av I 久久美女福利视频 I 精品无人区乱码1区2区3区在线 I 性饥渴的农村熟妇 I 色综合综合色 I 少妇人妻88久久中文字幕 I 久久夜色精品国产噜噜av I 老熟妇仑乱视频一区二区 I 男女做爰猛烈叫床视频动态图 I 日本大片一区二区 I 人成午夜免费视频在线观看 I 激情婷婷av I 男女下面一进一出免费视频网站 I 久久影视一区 I 午夜污网站 I 先锋人妻无码av电影 I 久久久久久久岛国免费网站 I 又粗又大又黄又硬又爽免费看 I 人妻无码免费一区二区三区 I www.色成人100 I 欧美高清网站 I 精品国产第一页 I 国产suv一区二区三区88区 I 橹图极品美女无圣光 I 午夜宅男欧美

產(chǎn)品分類

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

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

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

發(fā)布日期:2022-04-25 點擊率:107

  • 關(guān)鍵詞:正運動技術(shù),PLC,機(jī)器視覺


  • 摘要:前幾期課程,我們講述了PLC的梯形圖語言的基本知識,并與大家分享了使用ZDevelop軟件的ZPLC語言調(diào)用ZVision視覺指令的方法。


image.png


前幾期課程,我們講述了PLC的梯形圖語言的基本知識,并與大家分享了使用ZDevelop軟件的ZPLC語言調(diào)用ZVision視覺指令的方法。


本期課程我們將通過使用ZPLC語言實現(xiàn)識別條形碼的視覺功能的程序示例,進(jìn)一步帶領(lǐng)大家去了解PLC玩轉(zhuǎn)機(jī)器視覺的實現(xiàn)方法。


一檢測原理


(一)識別條形碼


條形碼是由不同的寬度、不同的反射率的條(黑色)和空(白色)組成的,根據(jù)特定的編碼規(guī)則編制,用于表達(dá)一組數(shù)字、字母信息的圖形標(biāo)識符。機(jī)器視覺在進(jìn)行條形碼識別的過程中,將采集到的條形碼信息二值化為黑白條,并根據(jù)條形碼的編碼規(guī)則輸出對應(yīng)的存儲內(nèi)容。


(二)PLC玩轉(zhuǎn)視覺


在《會PLC也能玩轉(zhuǎn)機(jī)器視覺(一)》的推文中,我們介紹了使用ZPLC編程語言調(diào)用ZBasic語言的方法,即EXE @BASIC指令。本期課程我們將和大家分享另一種調(diào)用方法,即使用ZPLC編程語言調(diào)用BASIC子程序。


二軟件演示


(一)檢測要求


使用ZDevelop軟件的ZBASIC編程語言編寫程序,用于識別軟件所在目錄的flash文件夾下命名為“code”文件夾下的條形碼內(nèi)容。再使用ZPLC編程語言調(diào)用BASIC程序的主任務(wù),進(jìn)行循環(huán)檢測識別。


(二)實例演示


1.打開ZDevelop軟件:新建項目→新建HMI文件→新建main.bas文件→新建global_variable.bas文件→新建Plc1.plc文件,用于編寫PLC執(zhí)行程序→文件添加到項目。


image.png


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


image.png


3.在global_variable.bas文件中添加全局變量。


'''''全局變量大部分使用數(shù)組結(jié)構(gòu)'''''

''注:basic編程中很多函數(shù)會以TABLE(系統(tǒng)的數(shù)據(jù)結(jié)構(gòu))做為參數(shù)

''table         說明            table    說明

''1~7  矩形roi控件坐標(biāo)數(shù)據(jù)    24    數(shù)據(jù)碼類型

''11~12  鼠標(biāo)操作時獲取的坐標(biāo)    26    數(shù)據(jù)碼結(jié)果


'主任務(wù)狀態(tài)

'0 - 未初始化

'1 - 停止

'2 - 運行中

'3 - 正在停止

GLOBAL DIM main_task_state

main_task_state = 1


' 任務(wù)號劃分, 主任務(wù)id - 10

GLOBAL DIM main_task_id

main_task_id = 10


'定義圖像變量

GLOBAL ZVOBJECT grabImg


'識別消耗時間

GLOBAL DIM d_identfy_time

d_identfy_time = 0


'識別結(jié)果,結(jié)果存儲方式為:類型:識別內(nèi)容,如EAN-13:123456789

GLOBAL DIM d_identfy_rst(256)


'定義本地圖片索引

GLOBAL DIM d_index

d_index=0


'定義讀取圖片的路徑

GLOBAL DIM File_Name(100)   


'全局變量定義完成后再運行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            '初始化定位檢測主任務(wù)狀態(tài)為停止?fàn)顟B(tài)1

    

      ZV_RESETCLIPSIZE(1280, 960) '初始化時依據(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)動作函數(shù)名。


'HMI界面按下單次執(zhí)行按鈕時響應(yīng)的函數(shù)

GLOBAL SUB btn_identfy_test()

    

      '開始識別

      TICKS = 0'開始計時

      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ù)編碼類型(自動)和掃描步長(1)讀取采集圖像中的對應(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)     '取出第一個條碼結(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        '顯示識別結(jié)果為 數(shù)據(jù)碼類型:數(shù)據(jù)碼結(jié)果  

      else 

            d_identfy_rst = "identify fail!"      '識別失敗給變量賦值"identify fail!"

      endif

      

      ZV_LATCH(grabImg, 0) 

      d_index=d_index+1

      d_identfy_time = abs(TICKS) '計算識別消耗的時間

END SUB

7.在main.bas文件中添加HMI界面按下連續(xù)運行按鈕響應(yīng)的函數(shù),并關(guān)聯(lián)動作函數(shù)名。


'HMI界面按下連續(xù)運行按鈕時響應(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è)置為正在運行狀態(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)即停止按鈕按下時

      '      main_task_state = 1'將主任務(wù)狀態(tài)設(shè)置為停止?fàn)顟B(tài)

      '      exit while        '退出循環(huán)

    '    endif

  '    

  '    '否則重復(fù)執(zhí)行以下操作

  '    btn_identfy_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)處于2即正在連續(xù)執(zhí)行任務(wù)時

               main_task_state = 3  '將主任務(wù)狀態(tài)置為3,退出循環(huán)

     endif

END SUB


image.png


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


image.png

仿真演示效果1


image.png

仿真演示效果2


image.png

仿真演示效果3


image.png

仿真演示效果4


本次,正運動技術(shù)會PLC也能玩轉(zhuǎn)機(jī)器視覺(二),就分享到這里。


更多精彩內(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)載請注明文章來源。


下一篇: PLC、DCS、FCS三大控

上一篇: 機(jī)器視覺運動控制一體

推薦產(chǎn)品

更多