rb88会员入口rb88会员入口
>

应用设计

>

会PLC也能玩转机器视觉(二)

会PLC也能玩转机器视觉(二)

深圳市正运动技术有限企业
2021/10/13 10:26:39

image.png

前几期课程,大家讲述了PLC的梯形图语言的基本常识,并与大家分享了使用ZDevelopApp的ZPLC语言调用ZVision视觉指令的方法。

本期课程大家将通过使用ZPLC语言实现识别条形码的视觉功能的程序示例,进一步带领大家去了解PLC玩转机器视觉的实现方法。

一检测原理

(一)识别条形码

条形码是由不同的宽度、不同的反射率的条(黑色)和空(白色)组成的,根据特定的编码规则编制,用于表达一组数字、字母信息的图形标识符。机器视觉在进行条形码识别的过程中,将采集到的条形码信息二值化为黑白条,并根据条形码的编码规则输出对应的存储内容。

(二)PLC玩转视觉

在《会PLC也能玩转机器视觉(一)》的推文中,大家先容了使用ZPLC编程语言调用ZBasic语言的方法,即EXE @BASIC指令。本期课程大家将和大家分享另一种调用方法,即使用ZPLC编程语言调用BASIC子程序。

二App演示

(一)检测要求

使用ZDevelopApp的ZBASIC编程语言编写程序,用于识别App所在目录的flash文件夹下命名为“code”文件夹下的条形码内容。再使用ZPLC编程语言调用BASIC程序的主任务,进行循环检测识别。

(二)实例演示

1.打开ZDevelopApp:新建项目→新建HMI文件→新建main.bas文件→新建global_variable.bas文件→新建Plc1.plc文件,用于编写PLC实行程序→文件添加到项目。

image.png

2.设计HMI界面。

image.png

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

'''''全局变量大部分使用数组结构'''''

''注:basic编程中很多函数会以TABLE(系统的数据结构)做为参数

''table         说明            table    说明

''1~7  矩形roi控件坐标数据    24    数据码类型

''11~12  鼠标操作时获取的坐标    26    数据码结果

'主任务状态

'0 - 未初始化

'1 - 停止

'2 - 运行中

'3 - 正在停止

GLOBAL DIM main_task_state

main_task_state = 1

' 任务号划分, 主任务id - 10

GLOBAL DIM main_task_id

main_task_id = 10

'定义图像变量

GLOBAL ZVOBJECT grabImg

'识别消耗时间

GLOBAL DIM d_identfy_time

d_identfy_time = 0

'识别结果,结果存储方式为:类型:识别内容,如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.关联HMI界面控件变量。

image.png

5.在main.bas文件中添加界面初始化函数,并在hmi系统设置中关联初始化函数名。

end

'HMI界面初始化函数

GLOBAL SUB hmi_init()

      main_task_state = 1            '初始化定位检测主任务状态为停止状态1

    

      ZV_RESETCLIPSIZE(1280, 960) '初始化时依据图像分辨率设置区域的裁剪尺寸,此处图像分辨率为1280x960

      ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(10, 5), HMI_CONTROLSIZEY(10, 5)) '设置锁存的大小

      d_identfy_rst=""

      ZV_LATCHCLEAR(0)'清空锁存通道0

END SUB

image.png

6.在main.bas文件中添加HMI界面按下单次实行按钮响应的函数,并关联动作函数名。

'HMI界面按下单次实行按钮时响应的函数

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)                   '定义中间变量参数

      

      ZVOBJECT codeList, codeRst

      

      ZV_CLEAR(codeList)                      '清空结果列表

      d_identfy_rst=""

      '根据编码类型(自动)和扫描步长(1)读取采集图像中的对应数据码内容,将结果存放到codeList中             

      ZV_CODEREAD(grabImg,codeList,0,1)

      if ZV_LISTCOUNT(codeList) > 0 then      '如果列表中元素的数量大于0

      

           ZV_LISTGET(codeList,codeRst,0)     '取出第一个条码结果作为显示

           ZV_CODETYPESTR(codeRst,64,24)      '获取数据码类型并将其存入起始索引为24的TABLE中

           DMCPY tmp1(0),TABLE(24),64       '将TABLE中的数组拷贝至tmp1中 

           ZV_CODESTR(codeRst,64,26)        '获取数据码结果并将其存入起始索引为26的TABLE中

           DMCPY tmp2(0), TABLE(26), 64       '将TABLE中的数组拷贝至tmp2中 

           d_identfy_rst = tmp1 + ":"tmp2        '显示识别结果为 数据码类型:数据码结果  

      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界面按下连续运行按钮响应的函数,并关联动作函数名。

'HMI界面按下连续运行按钮时响应的函数

GLOBAL SUB btn_run()

    if (1 = main_task_state) then '如果主任务处于停止状态

        if (0 = PROC_STATUS(main_task_id)) then'如果程序中任务未开启

            main_task_state = 2    '将主任务状态设置为正在运行状态

            RUNTASK  main_task_id, main_task'开启主任务

        endif

    endif

  

END SUB

''主任务实行的函数

'main_task:

  '  while(1)

    '    if (3 = main_task_state) then'如果主任务状态处于正在停止状态即停止按钮按下时

      '      main_task_state = 1'将主任务状态设置为停止状态

      '      exit while        '退出循环

    '    endif

  '    

  '    '否则重复实行以下操作

  '    btn_identfy_test()   '识别条形码

  '    

  '  wend

'END

8.在main.bas文件中添加HMI界面按下停止运行按钮响应的函数,并关联动作函数名。

'HMI界面按下停止按钮时响应的函数

GLOBAL SUB btn_stop()

     if (2 = main_task_state) then  '如果主任务状态处于2即正在连续实行任务时

               main_task_state = 3  '将主任务状态置为3,退出循环

     endif

END SUB

image.png

9.在main.bas文件中注释连续运行实行的主任务的函数部分,在Plc1.plc文件中添加ZPLC调用主任务实行函数子程序的代码。

image.png

仿真演示效果1

image.png

仿真演示效果2

image.png

仿真演示效果3

image.png

仿真演示效果4

本次,正运动技术会PLC也能玩转机器视觉(二),就分享到这里。

更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

审核编辑(
王静
)

评论

查看更多评论
深圳市正运动技术有限企业
其他资讯

查看更多

EtherCAT运动控制卡的多轴插补运动和手轮运动

机器视觉运动控制一体机应用例程-多目标形状匹配

会PLC也能玩转机器视觉(一)

EtherCAT运动控制卡的辅助调试工具与方法先容

VPLC系列机器视觉运动控制一体机快速入门(十)