机器视觉运动控制一体机应用例程(七)齿轮缺齿检测

齿轮缺齿是其生产制造过程中的一个重大缺陷,需通过检测技术进行规避。如果使用人工进行检测,不仅会增加人工成本,且检测时容易漏检或者由于注意力不集中而导致误判,因此我们引入了机器视觉检测技术进行齿轮缺齿检测。

机器视觉齿轮检测为非接触式的无损检测方法,与传统人工检测相比,具有不可取代的优越性。
 
    机器视觉齿轮检测系统在追求高速度、高效率、高重复性和精确度的工业生产制造过程中也更为可靠,把机器视觉检测方法用于制造系统是工业发展的方向和必然趋势,也是提高生产效率的有效途径。

上期课程,我们讲述了机器视觉方案中液位检测的应用例程,本期课程我们和大家一起分享机器视觉齿轮缺轮检测的应用例程。

以下视频来源于
正运动小助手
,时长

16:07

教学视频
检测原理

(一)检测要求

检测齿轮状产品外边缘上的轮齿是否完整,如有缺失返回“NG”状态,并显示位置信息。若齿轮完整,则返回“OK”状态。

(二)软件算法

软件实现

(一)软件实现

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

2.设计HMI界面。

3.在“global_variable.bas”文件中定义全局变量,定义完成后运行“Hmi.hmi”文件。

'''''全局变量大部分使用数组结构'''''''注:basic编程中很多函数会以TABLE(系统的数据结构)做为参数''table 说明 table 说明''0 ' 自动二值化阈值 11~12 鼠标操作时获取的坐标''2 亮区域的面积 20~24 图像信息''4 暗区域的面积 6 齿轮的数量 ''40~42 齿轮的面积和位置X,Y数据
'主任务状态'0 - 未初始化'1 - 停止'2 - 运行中'3 - 正在停止GLOBAL DIM main_task_statemain_task_state = 1
'采集开关'0 - 停止采集'1 - 请求采集GLOBAL DIM grab_switchgrab_switch = 0
'相机个数GLOBAL cam_numcam_num = 0
'相机种类,'zmotion;mvision;basler;mindvision;huaray'GLOBAL DIM CAMERA_TYPE(16)CAMERA_TYPE = 'mvision'
' 定义主任务id - 10GLOBAL DIM main_task_idmain_task_id = 10
'定义连续采集任务id - 9GLOBAL DIM grab_task_idgrab_task_id = 9
'定义全局图像变量GLOBAL ZVOBJECT grabImg '采集图像GLOBAL ZVOBJECT disImg '显示图像
'定义常用颜色变量GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOWC_RED = RGB(255, 0, 0)C_GREEN = RGB( 0,255, 0)C_BLUE = RGB( 0, 0,255)C_YELLOW= RGB(255,255, 0)
'检测参数:阈值模式(自动阈值或手动阈值)、低阈值、高阈值、最小面积、最大面积GLOBAL DIM d_detect_param(5) 'd开头表示数据结构
'检测消耗时间GLOBal DIM d_detect_time
'显示打印的字符GLOBAL ShowString(64)GLOBAL ShowString1(64)
'***********定义读取本地文件功能相关变量**************''注意,该功能只在使用仿真器时有效'定义是否使用本地图片标志GLOBAL DIM d_use_imgfile
'定义本地图片索引GLOBAL DIM d_index
'定义读取图片的路径GLOBAL DIM File_Name(100)
'***********结束定义读取本地文件功能相关变量**********
'运行HMI文件RUN 'Hmi.hmi',1

4.在“detectParam.bas”文件中初始化测量参数。

endGLOBAL SUB init_detect_param()    '初始化测量参数        '初始化检测参数:阈值模式(自动阈值 = 1 或 手动阈值 = 0)、低阈值、高阈值、极性(黑或白)、最大、最小、反向(即结果取反,成功变成失败、失败变成成功)    d_detect_param(0) = 0         '手动阈值    d_detect_param(1) = 140       '低阈值    d_detect_param(2) = 255       '高阈值    d_detect_param(3) = 160000    '最小面积即像素个数    d_detect_param(4) = 180000    '最大面积      d_use_imgfile = 1             '默认使用本地图片    d_index      = 0        TABLE(6)=0                    '将齿轮数量初始化为0END SUB

5.关联HMI界面控件变量。

6.在“main.bas”文件中添加HMI界面初始化函数并在Hmi系统设置中关联初始化函数。

'HMI界面初始化函数GLOBAL SUB hmi_init() grab_switch = 0 '停止采集 main_task_state = 1 '主任务停止运行 ZV_RESETCLIPSIZE(1280, 960) '依据图像分辨率设置区域的裁剪尺寸,此处图像分辨率为1280x960 ZV_LATCHSETSIZE(0, HMI_CONTROLSIZEX(10, 7), HMI_CONTROLSIZEY(10, 7)) '设置锁存的大小 init_detect_param() '初始化测量参数 ZV_SETSYSDBL('CamGetTimeout', 1000) '设置采集超时 ZV_SETSYSINT('LineWidth',6) ZV_LATCHCLEAR(0) '清空锁存通道0 END SUB

7.在“camera.bas”文件中添加HMI界面中采集相关按钮响应的函数并关联动作函数。(说明:具体实现函数前两篇课程内容已经有操作演示,此处不做赘述。)

8.在“main.bas”文件中添加HMI界面按下【测试】按钮时响应的函数并关联动作函数名。

'HMI界面按下测试按钮时响应的函数GLOBAL SUB btn_test()    TABLE(6)=0   '检测前先将结果数据清0    d_detect_time=0    TICKS=0    '定义变量,依次为白色像素连通区域,掩模区域,黑色像素连通区域,齿轮连通区域结果列表,单个齿轮连通区域,圆环区域,齿轮齿牙连通区域    ZVOBJECT regionWhite, regionMask, regionBlack,re_connecte,circle_connect,region,re_connecte1         '生成全图像区域    ZV_REGENFULLIMG(grabImg,regionMask)      '二值化处理    if d_detect_param(0) = 0 then    '如果选择手动阈值模式            '根据低阈值和高阈值参数生成白色像素图像regionWhite          ZV_RETHRESH(grabImg, regionMask, regionWhite, d_detect_param(1), d_detect_param(2))          '对白色像素区域进行一次1*1的开运算          ZV_REOPENING(regionWhite,regionWhite,3,3)          '对白色像素区域进行一次1*1的闭运算          ZV_RECLOSING(regionWhite,regionWhite,3,3)        else                             '如果选择自动阈值模式              Dim autoThresh               '定义自动阈值模式下的二值化阈值          '在grabImg图像中的指定区域内对图像进行自动二值化处理,输出二值化区域regionWhite           ZV_REAUTOTHRESH(grabImg, regionMask, regionWhite, 0)          '对白色像素区域进行一次1*1的开运算          ZV_REOPENING(regionWhite,regionWhite,1,1)          '对白色像素区域进行一次1*1的闭运算          ZV_RECLOSING(regionWhite,regionWhite,1,1)          autoThresh = TABLE(0)          ? 'autoThresh = ' autoThresh  '打印提示信息,当前二值化阈值            endif        ZV_REDIFF (regionMask, regionWhite, regionBlack)   '差集运算,结果为regionBlack(黑色像素区域)    ZV_REAREA(regionBlack, 500)                         '计算黑色像素区域的面积(即像素数量)存放到table(500)中    if(TABLE(500)>0) then '如果获取到的黑色像素数量大于0                          ZV_RECONNECT(regionBlack,re_connecte)     '计算区域的连通区域,存放到re_connecte列表中         zv_refilter(re_connecte,0,d_detect_param(3),d_detect_param(4),0)'对区域列表中的区域进行过滤,保留面积在 d_detect_param(3) 到 d_detect_param(4) 的区域,面积不在此范围的区域将被过滤掉         zv_refilter(re_connecte,20,0.9,1.2,0)'对区域列表中的区域进行过滤,保留最小外接矩形高宽比在0.9 到 1.2 的区域,面积不在此范围的区域将被过滤掉         ZV_LISTCOUNT(re_connecte,6)     '获取列表中的连通区域的数量,存放到table(6)中     endif        '绘制效果图    Dim width, height    ZV_IMGINFO (grabImg, 20)'获取grabImg的图像信息    width = TABLE(20)    height = TABLE(21)    ZV_GRAYTORGB(grabImg,disImg)'将灰度图转换到RGB图像,用于绘制检测结果图像          ZV_REGION(disImg, regionMask, 0, ZV_COLOR(0,0,0))      '绘制黑色的regionMask区域    ZV_REGION(disImg, regionWhite, 0, ZV_COLOR(255,255,255))'绘制白色的regionWhite区域        for i=0 to TABLE(6)-1     '循环获取齿轮的位置XY信息生成圆环区域,检测是否缺齿          ZV_LISTGET(re_connecte,circle_connect,i)   '获取列表中序号为i的元素,即依次获取列表中齿轮连通区域          ZV_REAREACENTER(circle_connect,40)  '计算每个齿轮的面积与中心位置,将数据放入TABLE(40)中            ZV_REGENANNULAR(region,TABLE(41),TABLE(42),220,260)'生成圆环区域            '根据低阈值和高阈值参数生成白色像素图像regionWhite          ZV_RETHRESH(grabImg, region, regionWhite, d_detect_param(1), d_detect_param(2))          ZV_REDIFF (region, regionWhite, regionBlack)'进行差集运算,结果为regionBlack(黑色像素区域)          ZV_RECONNECT(regionBlack,re_connecte1)     '计算圆环区域内的黑色连通区域,存放到re_connecte列表中          zv_refilter(re_connecte1,0,1000,3000,0)    '对区域列表中的连通区域进行面积过滤                    ZV_LISTCOUNT(re_connecte1,8)     '获取单个齿轮齿牙的数量,存放到table(8)中                     if TABLE(8)=25 then                ZV_TEXT(disImg,'OK',TABLE(41),TABLE(42),70,ZV_COLOR(0,255,0)) '显示结果文本          else                 ShowString=TOSTR(TABLE(41),1,2)              ShowString1=TOSTR(TABLE(42),1,2)              ZV_TEXT(disImg,'NG,'ShowString','ShowString1,TABLE(41),TABLE(42),55,ZV_COLOR(255,0,0)) '显示结果文本          endif          ZV_MARKER(disImg,TABLE(41),TABLE(42),0,50,zv_color(0,255,0))   '在图像img中绘制十字          next          ZV_LATCH(disImg, 0)     '在锁存通道0中显示结果图像          d_detect_time=ABS(TICKS)'计算检测消耗时间END SUB

9.在“main.bas”文件中添加【运行】按钮响应的函数并关联动作函数。

'HMI界面按下运行按钮时响应的函数GLOBAL SUB btn_run()   if(2 = main_task_state) then           '如果主任务处于运行状态,打印提示信息并退出函数 ?'已经开启连续运行任务,请勿重复操作!' return endif if (1 = main_task_state) then '如果主任务处于停止状态 if (0 = PROC_STATUS(main_task_id)) then '如果任务未开启 main_task_state = 2 '主任务状态设置为2,表示正在执行连续任务 RUNTASK main_task_id, main_task '开启主任务 endif endifEND SUB

10.在“main.bas”文件中添加【停止】按钮响应的函数并关联动作函数。

'HMI界面按下停止按钮时响应的函数GLOBAL SUB btn_stop()    if (2 = main_task_state) then   '如果主任务状态处于3即正在连续执行任务时        main_task_state = 3           '将主任务状态置为3,退出循环    endif  END SUB
操作演示

(一)操作步骤

查看运行效果:将控制器接入电源,使用网线将控制器与PC连接,将相机通电并接入控制器→将相机、光源安装在打光测试架上,镜头连接到相机上→连接控制器,并将项目下载到控制器→运行程序,调整打光图像效果,测试程序运行效果。

(二)效果演示
以下视频来源于
正运动小助手
,时长

00:56

(0)

相关推荐

  • 爱普生(EPSON)机器人程序框架

    PLC与爱普生机器人通信程序 1.FINS_TCP ①通信初始化(Function FINS_TCP_Init): a)设定最终握手指令 b)设定FINS/TCP头代码 c)FINS读.写指令 d)F ...

  • ECSHOP手机号码邮箱用户名同时登陆修改教程

    功能介绍: ecshop会员可以采取多种方式,例如用户名,邮箱,手机号登录系统. 安装流程: 插件安装: 1.打开includes\modules\integrates\integrate.php文件 ...

  • 每一个GISer都应该了解的算法

    前言:作为一个 GISer 需要掌握多方面的知识,哪怕不是开发方向,了解了解天天和我们打交道的 GIS 数据变化背后的原因也是很好的! 除了社交.娱乐,人们外出使用最多的软件可能就是各种地图导航软件了 ...

  • Table中的函数-结构化引用

    Table是Excel中的一个特殊类型的区域.将一个单元格区域转换为Table后,会给数据处理带来一系列变化.其中关于Table中的函数和引用Table数据的函数变化最大.对于刚接触这些函数的使用者来

  • 机器视觉运动控制一体机应用例程(六)液位检测

    顺应现代生活的不断发展,瓶装液体成为人们日常生活中不可或缺的消费品.它的包装中产品净含量是否达标是检测产品质量的一个重要指标,对于同一规格的包装瓶中,其液位高度直接反映了瓶中液体的净含量. 在传统的瓶 ...

  • 机器视觉运动控制一体机应用例程(三) 基于BLOB分析的多圆定位

    我们在<VPLC系列机器视觉运动控制一体机快速入门(三)>的推文中,讲述了基于形状匹配的视觉定位功能,而BLOB斑点分析也可以实现定位功能. 本期课程我们将在BLOB斑点分析定位的基础上进 ...

  • 机器视觉运动控制一体机应用例程(二) 颜色识别

    前面课程讲述的所有的机器视觉功能如形状匹配.BLOB检测.数据码识别以及OCR等功能,我们都是对单通道的灰度图像进行处理. 本次课程我们将和大家一起分享使用ZDevelop软件对采集到的彩色图像进行颜 ...

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

    以上为广告 我们在前面的基于形状匹配的视觉定位课程中,讲述了形状匹配的基本原理.应用场景以及使用ZDevelop软件实现形状匹配功能的方法.但在课程演示的程序示例中,只输出了一个匹配目标的结果,本节课 ...

  • 机器视觉运动控制一体机应用例程(八)零件分拣系统

    工件分拣是工业生产环节中重要的组成部分,其目的是将不同类型的物料或工件分类摆放到相应的位置,避免不同的物料或工件产生混料,其步骤主要分为定位.识别.抓取和放置4个阶段. 在传统分拣中一般采用人工分拣的 ...

  • 机器视觉运动控制一体机应用例程(十)工件圆度检测

    现有的测量工件圆度的方法一般是采用圆度测量仪,其是利用回转轴法测量圆度的长度测量工具.圆度仪分为传感器回转式和工作台回转式两种检测方法. 检测圆度时,样品需要与精密轴系同心安装,精密轴系带着电感式长度 ...

  • 机器视觉运动控制一体机应用例程|产品全局外观检测(十一)

    前面讲述的外观检测的课程中,我们都是以矩形ROI区域框选我们需要检测的外观表面范围. 但是很多产品外形通常都不是规则的矩形或者圆形,用矩形或者圆形ROI区域很难对产品的外观进行全局检测,可能会遗漏掉某 ...

  • 机器视觉运动控制一体机应用例程|瓶盖密封完整性检测(十三)

    以上为广告 对于许多可饮用的瓶装产品而言,其密封的完整性可向消费者保证此产品未经任何改动,消费者可放心饮用. 如果产品的瓶盖缺失或翘起会导致无谓的产品加工原料的浪费和代价高昂的返工费,从而造成利润损失 ...

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

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