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

本文主要是介绍机器视觉运动控制一体机应用例程 | 齿轮缺齿检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

机器视觉齿轮检测为非接触式的无损检测方法,与传统人工检测相比,具有不可取代的优越性。

机器视觉齿轮检测系统在追求高速度、高效率、高重复性和精确度的工业生产制造过程中也更为可靠,把机器视觉检测方法用于制造系统是工业发展的方向和必然趋势,也是提高生产效率的有效途径。

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

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

一 、检测原理

(一)检测要求

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

2.jpg

(二)软件算法

3.jpg

二 、软件实现

(一)软件实现

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

4.jpg

2.设计HMI界面。

5.jpg

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      = 0TABLE(6)=0                    '将齿轮数量初始化为0END SUB

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

6.jpg

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

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

7.jpg

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

8.jpg

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

        'HMI界面按下测试按钮时响应的函数GLOBAL SUB btn_test()TABLE(6)=0   '检测前先将结果数据清0d_detect_time=0TICKS=0'定义变量,依次为白色像素连通区域,掩模区域,黑色像素连通区域,齿轮连通区域结果列表,单个齿轮连通区域,圆环区域,齿轮齿牙连通区域ZVOBJECT regionWhite, regionMask, regionBlack,re_connecte,circle_connect,region,re_connecte1'生成全图像区域ZV_REGENFULLIMG(grabImg,regionMask)'二值化处理if d_detect_param(0) = 0 then    '如果选择手动阈值模式'根据低阈值和高阈值参数生成白色像素图像regionWhiteZV_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  '打印提示信息,当前二值化阈值endifZV_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, heightZV_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)'生成圆环区域'根据低阈值和高阈值参数生成白色像素图像regionWhiteZV_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)) '显示结果文本endifZV_MARKER(disImg,TABLE(41),TABLE(42),0,50,zv_color(0,255,0))   '在图像img中绘制十字nextZV_LATCH(disImg, 0)     '在锁存通道0中显示结果图像d_detect_time=ABS(TICKS)'计算检测消耗时间END SUB

9.jpg

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

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

10.jpg

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

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

11.jpg

三、 操作演示

(一)操作步骤

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

(二)效果演示

在这里插入图片描述

本次,正运动技术机器视觉运动控制一体机应用例程(七)齿轮缺齿检测,就分享到这里。

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

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

这篇关于机器视觉运动控制一体机应用例程 | 齿轮缺齿检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/297129

相关文章

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签