首页 新闻 工控搜 论坛 厂商论坛 产品 方案 厂商 人才 文摘 下载 展览
中华工控网首页
  P L C | 变频器与传动 | 传感器 | 现场检测仪表 | 工控软件 | 人机界面 | 运动控制
  D C S | 工业以太网 | 现场总线 | 显示调节仪表 | 数据采集 | 数传测控 | 工业安全
  电 源 | 嵌入式系统 | PC based | 机柜箱体壳体 | 低压电器 | 机器视觉
VPLC系列机器视觉运动控制一体机快速入门(七)识别功能
深圳市正运动技术有限公司
收藏本文     查看收藏

  此前,我们依次讲解了软硬件介绍及计数实例、相机的基本使用、基于形状匹配的视觉定位、BLOB有无检测、测量尺寸、机器视觉方案中使用到的标定功能以及使用ZDevelop软件实现坐标标定的方法。

  本期课程我们继续和大家一起分享使用ZDevelop软件实现一维码和二维码的识别功能。

  视频教程:《VPLC系列机器视觉运动控制一体机快速入门(七)》

  2.png

  条形码是由不同的宽度、不同的反射率的条(黑色)和空(白色)组成的,根据特定的编码规则编制,用于表达一组数字、字母信息的图形标识符。

  3.png

  条形码可以标出商品的生产国、制造厂家、商品名称、生产日期、图书分类号、类别、日期等信息,因而在商品流通、图书管理、银行系统、生产制造等许多领域都得到了广泛的应用。

  4.png

  二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形。在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或光电扫描设备自动识读以实现信息自动处理。

  5.png

  二维码技术是在计算机技术与信息技术基础上发展起来的一门集编码、印刷、识别、数据采集和处理于一身的新兴技术,它解决了条形码表达信息有限的问题。

  一维条形码只能在一个方向上(一般是水平方向)存储表达信息,只能存储数字和字母;二维码在水平和垂直两个方向上均能存储表达信息,它可以存储更多的信息包括数字、字母、汉字、图片、音频、视频等。

  6.png

  条形码需要按照一定规则的编码方式将条和空进行不同的排列用于表示不同的信息;二维码需要按照一定的编码规律使用黑白块在水平方向和垂直方向进行排列,用于表达不同的信息。它们都依赖于特定的编码规则---编码码制,才能准确实现信息的存储和表达。

  7.png

  正是由于条形码和二维码在日常生活和工业生产等多种领域中被广泛应用到,因此在自动化生产制造业中需要自动检测识别条形码和二维码的内容,对识别的内容进行判断,比如根据判断条形码和检测的字符是否一致来最终判断产品包装的信息的准确性;比如,通过识别二维码的内容,导入对应产品的信息。

  机器视觉是常用于自动化生产制造行业的一门自动检测技术,它根据条形码和二维码的编码原理也相应生成了对应的识别算法,可应用于自动检测识别条形码和二维码。

8.png

  识别流程图

  9.png

  演示实例说明:本课程实例将演示使用ZDevelop软件识别常用条形码和二维码的类型。

  1.打开ZDevelop软件:新建项目→新建HMI文件→新建main.bas文件,用于编写界面响应函数→新建global_variable.bas文件用于存放全局变量并开启HMI自动运行任务→新建identify.bas文件用于初始化测量参数→新建camera.bas文件用于实现相机采集功能→新建draw.bas文件用于更新绘制检测区域ROI刷新界面→文件添加到项目。

  10.png

  2.设计HMI文件界面。

  11.png

  3.在global_variable.bas文件中定义全局变量。
 

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

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

  ''在这里table均是做为中间变量

  ''table 0-10 作为中间变量使用

  ''table 11-15,区域ROI参数,参数位置与dd_identfy_param对应,控件坐标系

  ''table 21-22,鼠标按键,控件坐标系

  ''table 31-35,控件坐标转换后对应的图像坐标,图像坐标系
 

  '主任务状态

  '0 - 未初始化

  '1 - 停止

  '2 - 运行中

  '3 - 正在停止

  GLOBAL DIM main_task_state

  main_task_state = 1
 

  '采集开关

  '0 - 停止采集

  '1 - 请求采集

  GLOBAL DIM grab_switch

  grab_switch = 0
 

  '相机个数

  GLOBAL cam_num

  cam_num = 0
 

  '相机种类,""

  GLOBAL DIM CAMERA_TYPE(100)

  'CAMERA_TYPE = "zmotion;mindvision;basler;mvision;huaray"

  CAMERA_TYPE = "mvision"
 

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

  GLOBAL DIM main_task_id

  main_task_id = 10
 

  '连续采集线程id - 9

  GLOBAL DIM grab_task_id

  grab_task_id = 9
 

  '目前不能作为函数参数,故使用全局变量表示

  GLOBAL ZVOBJECT grabImg
 

  '常用颜色变量

  GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOW

  C_RED = RGB(255,0,0)

  C_GREEN = RGB(0,255,0)

  C_BLUE = RGB(0,0,255)

  C_YELLOW= RGB(255,255,0)
 

  '数据码识别参数数组,依次为中心cx、cy、w、h、angle、data_code_type、step

  GLOBAL DIM d_identfy_param(7) 'd开头表示数据结构
 

  '识别消耗时间

  GLOBAL DIM d_identfy_time

  d_identfy_time = 0
 

  '是否使用roi,0-不使用,不使用时就用全图进行识别数据码,1-使用时就用roi区域截取图像用来识别数据码

  GLOBAL DIM d_useRoi

  d_useRoi = 0
 

  '条码类型

  GLOBAL DIM code_type

  code_type = 0
 

  '识别结果,结果存储方式为:类型:结果,如EAN-13:123456789

  GLOBAL DIM d_identfy_rst(256)
 

  RUN "Hmi.hmi",1
 

  4.在HMI界面的元件中关联变量。

  

  12.png

  

  5.在identify.bas文件中初始化测量参数。
 

  end
 

  GLOBAL SUB init_param() '初始化测量参数
 

     '初始化测量参数

     d_identfy_param(0) = 320.0     'roi中心x

     d_identfy_param(1) = 240.0     'roi中心y

     d_identfy_param(2) = 160         'roi宽

     d_identfy_param(3) = 120.0     'roi高

     d_identfy_param(4) = 0.0         'roi角度

     d_identfy_param(5) = 0            '条码类型为自动

     d_identfy_param(6) = 4           '扫描步长
 

  END SUB
 

  6.在main.bas文件中添加初始化函数并在HMI编辑设置中关联函数名。
 

  'HMI界面初始化函数

  GLOBAL SUB hmi_init()
 

     grab_switch = 0

     main_task_state = 1

     init_param() '初始化测量参数

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

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

     ZV_LATCHCLEAR(0)
 

     '将检测测量器ROI的图像坐标数据转到控件坐标数据

     TABLE(11, d_identfy_param(0), d_identfy_param(1))

     ZV_POSFROMIMG(0, 1, 11, 11) '图像坐标转换到HMI控件坐标

     TABLE(13) = ZV_LENFROMIMG(0, d_identfy_param(2))

     TABLE(14) = ZV_LENFROMIMG(0, d_identfy_param(3))

     TABLE(15) = d_identfy_param(4)
 

  END SUB

  

  13.png

  

  7.在camera.bas文件中添加采集操作相关函数,并关联动作函数名。
 

  end
 

  'HMI界面按下扫描相机按钮时响应的函数

  GLOBAL SUB cam_scan_all()

     ZV_SETSYSINT("LogLevel", 7)

     ZV_SETSYSSTR("DataDir","")
 

     '扫描相机

     CAM_SCAN(CAMERA_TYPE)

     cam_num = CAM_COUNT()

     ?"cam_num = " cam_num

     if (0 = cam_num) then

         ?"未找到相机"

             ' ZV_READIMAGE(grabImg, "QR.png", 1)

         return

     endif
 

     '扫描到有相机就对一些相机参数进行设置

     if cam_num > 0 then

         CAM_SEL(0)

         CAM_SETEXPOSURE(5000)

         CAM_SETPARAM("GevSCPD", "3000")

         CAM_SETPARAM("GevHeartbeatTimeout", "3000")

         CAM_SETMODE(0)'设置触发模式为软触发

         CAM_START(0)'开始采集

     endif
 

  END SUB
 

  'HMI界面按下单次采集按钮时响应的函数

  GLOBAL SUB btn_grab()
 

     if cam_num=0 then

         ?"请先扫描相机!"

     return
 

     endif
 

     CAM_SETPARAM("TriggerSoftware", 0)

     CAM_GET(grabImg, 0)

     ZV_LATCH(grabImg, 0) '将带显示的图像转换到锁存通道指定的锁存区域
 

  END SUB
 

  'HMI界面按下连续采集按钮时响应的函数

  GLOBAL SUB btn_mea_cgrab()
 

     if cam_num=0 then

         ?"请先扫描相机!"

     return
 

  endif
 

  grab_switch = 1

     if (1 = grab_switch) then

         if (0 = PROC_STATUS(grab_task_id)) then

             RUNTASK grab_task_id, grab_task

     endif

  endif
 

  END SUB
 

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

  GLOBAL SUB btn_mea_stopCgrab()

      grab_switch = 0

  END SUB
 

  '连续采集任务

  grab_task:

     while(1)

         if (0 = grab_switch) then

             exit while

         endif

         btn_grab()

     wend

  END
 

  8.在draw.bas文件中添加更新绘制Roi函数,并在自定义元件属性窗口关联刷新函数和绘图函数。
 

  end
 

  '和绘制(即选择ROI)有关的界面的刷新绘制函数放在这个bas文件里
 

     DIM is_redraw

     is_redraw = 0
 

     DIM set_roi_open_init

     set_roi_open_init = 0
 

     DIM sr_mpos_x, sr_mpos_y, hit_pos
 

  '根据鼠标操作更新检测区域ROI的坐标位置和形状大小

  GLOBAL SUB update_identfy()
 

  if mouse_scan(21) = 1 then '扫描按下操作

     hit_pos = ZV_HMIADJRECT2(table(21), table(22), 11, -1) '只有按下时可以改变击中位置

     is_redraw = 1

  endif
 

  if mouse_scan(21) = -1 then '扫描松开操作

     ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)

     is_redraw = 1

  endif
 

  if (MOUSE_state(21)) then

     ZV_HMIADJRECT2(table(21), table(22), 11, hit_pos)

     is_redraw = 1

  endif
 

  if (1 = is_redraw) then

     '控件roi坐标转图像roi坐标

     is_redraw = 0

     ZV_POSTOIMG(0,2, 11, 0) 'TABLE(0)作为中间变量临时使用

     d_identfy_param(0) = TABLE(0)

     d_identfy_param(1) = TABLE(1)

     d_identfy_param(2) = ZV_LENTOIMG(0, TABLE(2))

     d_identfy_param(3) = ZV_LENTOIMG(0, TABLE(3))

     d_identfy_param(4) = TABLE(4)

     SET_REDRAW

     endif

     SET_REDRAW

  END SUB
 

  '更新ROI位置和大小后实时绘制ROI区域

  GLOBAL SUB draw_identfy()
 

     if d_useRoi =1 then

         SET_COLOR(C_BLUE)

         TABLE(16, 0, 0) '对子区域宽度和个数两个参数清零

         ZV_HMIRECT2(11, 300)

         DRAWLINE(TABLE(300), TABLE(301), TABLE(302), TABLE(303)) '外矩形

         DRAWLINE(TABLE(302), TABLE(303), TABLE(304), TABLE(305))

         DRAWLINE(TABLE(304), TABLE(305), TABLE(306), TABLE(307))

         DRAWLINE(TABLE(306), TABLE(307), TABLE(300), TABLE(301))
 

         DRAWLINE(TABLE(308), TABLE(309), TABLE(310), TABLE(311)) '方向箭头

         DRAWLINE(TABLE(312), TABLE(313), TABLE(310), TABLE(311))

         DRAWLINE(TABLE(314), TABLE(315), TABLE(310), TABLE(311))
 

     endif
 

  END SUB
 

  9.添加在HMI界面按下【测试】按钮时响应的函数,并关联动作函数名。
 

  'HMI界面按下测试按钮时响应的函数

  GLOBAL SUB btn_identfy_test()
 

     '开始识别

     TICKS = 0

     DIM tmp1(64),tmp2(64)
 

     ZVOBJECT grayImg, codeList, codeRst

     if ZV_IMGCNS(grabImg) > 1 then '获取图像通道数,单通道表示灰度图

         ZV_RGBTOGRAY(grabImg,grayImg)

     else

         ZV_COPY(grabImg,grayImg) '复制grabImg图像到grayImg图像中

     endif
 

     code_type = d_identfy_param(5)

     if code_type = 7 then '如果在界面中选择QR码类型

         code_type = 20

     elseif code_type = 8 then '如果在界面中选择DM码类型

         code_type = 21

     endif
 

     ZV_CLEAR(codeList)

     ZV_CODEREAD(grayImg,codeList,code_type,d_identfy_param(6))

     if ZV_LISTCOUNT(codeList) > 0 then '获取列表中元素的数量
 

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

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

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

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

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

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

     else

         d_identfy_rst = "identify fail!"

     endif
 

     d_identfy_time = abs(TICKS) '识别时间
 

  END SUB

  

  14.png

  

  10.添加在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

         if cam_num = 0 then

             btn_stop()

             return

         endif

         '持续采集图像,对图像进行操作

             btn_grab()

             btn_identfy_test()

     wend

  END

  

  15.png

  

  11.添加在HMI界面按下【停止】按钮时响应的函数,并关联动作函数名。
 

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

  GLOBAL SUB btn_stop()

     if (2 = main_task_state) then

                             main_task_state = 3

                             endif

  END SUB

  

  16.png

  17.png

  EAN-13码

  

  18.png

  19.png

  本次,正运动技术VPLC系列机器视觉运动控制一体机快速入门(七)——使用ZDevelop软件实现一维码和二维码的识别功能就分享到这里,更多精彩内容请关注“正运动小助手”公众号。

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


 

状 态: 离线

公司简介
产品目录

公司名称: 深圳市正运动技术有限公司
联 系 人: 戴德弟
电  话: 0755-32976042
传  真: 0755-2606 6955
地  址: 深圳市宝安区西乡洲石路阳光工业园A1栋5楼
邮  编: 518100
主  页:
 
该厂商相关技术文摘:
重庆国际电池展:正运动邀您共赴电池智造交流会
EtherCAT运动控制器的MATLAB开发
成都工博会:正运动技术邀您探索智能制造新趋势
运动控制卡/运动控制器的ZCAN总线ZMIO310扩展模块使用
EtherCAT运动控制器在ROS上的应用(下)
运动控制器/运动控制卡配套ZCAN总线ZIO模块的使用
ITES | 深圳工业展正运动重磅产品即将亮相
2024上海慕尼黑正运动展位现场直击
2024上海慕尼黑超高实时PCIe 运动控制卡解决方案
2024上海慕尼黑机器视觉运动控制一体机解决方案
正运动技术邀您共聚2024西安国际工业自动化机器人展
EtherCAT运动控制器在ROS上的应用(上)
更多文摘...
立即发送询问信息在线联系该技术文摘厂商:
用户名: 密码: 免费注册为中华工控网会员
请留下您的有效联系方式,以方便我们及时与您联络

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 不良信息举报
工控网客服热线:0755-86369299
版权所有 中华工控网 Copyright©2022 Gkong.com, All Rights Reserved