基于LabVIEW的视觉检测系统软件框架设计
2013-06-06李小明向建化吴青凤
龙 云,李小明,向建化,吴青凤
(1.广州大学机械与电气工程学院,广东广州 510006;2.东莞康视达自动化科技有限公司,广东东莞 523000)
0 引言
美国制造工程师协会计算机视觉分会和美国机器人协会的自动化视觉分会对计算机视觉的定义为:“计算机视觉是通过光学的装置和非接触的传感器自动地接收和处理一个真实物体的图像,以获得所需信息或用于控制机器人动作的装置”。它具有快速、可靠、一致性高的优点[1]。被广泛应用于工业、农业、医学、军事等各个领域之中,虽然针对不同的研究对象计算机视觉的具体应用各不相同,但各行各业中的视觉系统应用大致可分为以下四种:(1)定位;(2)检测异物、瑕疵及缺陷;(3)尺寸测量和外观测量;(4)检测物品数或遗漏的物品。
LabVIEW是美国NI公司推出的一种图形化编程语言,其“所见即所得”的可视化编程技术,彻底把工程师们从复杂枯涩的文本编程工作中解放出来,大大提高了程序的开发速度[2]。同时NI提供了丰富的附加模块,用于扩展LabVIEW在不同领域中的应用,其视觉模块IMAQ Vision 是一套包含各种图像处理函数的功能库,它集成了400 多个函数用于图像的显示、处理、分析等操作,为视觉系统提供了完整的开发功能[3],与Lab-VIEW 配合使用能进一步缩短视觉系统的开发周期,广泛地被工业界、学术界和研究实验室所接受。
1 视觉检测系统分析
1.1 基本原理
视觉检测系统通过工业相机采集被检对象的图像并将其转化为数字信号,再经计算机硬件和软件技术处理分析,提取被检对象的各种特征信息,并在此基础上实现被检对象的参数测量、模式识别等多种功能。同时视觉检测系统将检测结果显示给用户并发出指令给设备执行机构对被检对象进行处理。
1.2 系统设计
视觉检测系统由硬件与软件两大部分构成。
典型视觉检测系统的硬件构成如图1 所示,其主要由四部分构成。
(1)运动控制系统,通过PLC 或运动控制卡等接收PC发出的位置信号,并转换为脉冲信号输出给控制电机,从而控制相机或工作平台移动至相应的检测位置。
(2)图像采集系统,通过光源控制器、图像采集卡等硬件设备,控制相机光源,采集图像并数字化后存储至PC,供检测软件分析处理。
(3)图像分析显示系统,PC通过检测软件对采集的图像进行分析处理,并将处理结果显示记录。
(4)执行系统,PC根据处理结果发出处理指令,通过PLC、I/O卡之类的设备控制指示灯、电磁阀等装置,从而产生报警、剔除等执行动作,对异常对象进行相应处理。
其软件系统主要由安装在PC上的上位机程序和下载于PLC、单片机之类设备上的下位机程序两部分构成。上位机程序用于读取检测制程文件、接收用户指令、逻辑处理、对采集的图像进行处理分析识别、发出控制指令给下位机或其他设备等功能的实现。下位机程序主要用于接收解释上位机发出的指令,并对输入的外部信号进行逻辑处理,直接控制相应设备。同时将设备状态等信息反馈给上位机。本文仅对上位机软件框架的设计进行探讨。
图1 典型视觉检测系统主要构成
2 视觉检测系统软件框架设计
对于视觉检测系统的软件框架设计,主要考虑的是尽可能的提高系统运行效率,减少不必要的顺序等待时间。同时满足软件的设计重用性和系统的可扩充性要求[4]。
图1 所示系统的典型视觉检测的过程包含了相机(平台)移动、图像采集、图像处理和执行控制四步过程。其中相机(平台)移动、图像采集、执行控制由PLC、图像采集卡、I/O卡硬件等自行完成,上位机程序只需要对其发送相应的动作指令。对于相机(平台)移动的控制,上位机除发送动作指令外,还必须查询其运行状态,以保证图像采集是在相机(平台)移动到位之后进行。在整个检测系统运行过程中相机(平台)移动与图像处理两个环节占用了系统运行的绝大部分时间。对于单个检测对象要分多个检测视场的情况,由于各视场之间的间距不一致以及各视场图像处理的复杂程度不同,会造成相机(平台)移动时间与图像处理时间不同步的情况,为使运行效率最大化,本文设计了图2 所示的视觉检测系统流程。该流程有两个相互独立的线程,即图像生产与图像消费。在图像生产循环中,相机在保证内存不溢出的情况下顺次移动至各检测点采集图像,并将采集的图像压入事先建立的堆栈中,直至全部检测点采集完毕或系统运行错误时循环结束。而在图像消费循环中,检测系统按照先入先出的方式连续从堆栈中取出图片进行处理,并将处理结果输出给执行机构,直至图像生产结束且堆栈取空或系统运行错误时循环结束。
图2 视觉检测流程
图3 检测系统软件框架设计
为实现图2 所示的视觉检测流程,本系统采用了LabVIEW 生产/消费(Producer/Consumer Design Pattern)与状态机(State Machine)相结合的设计模式进行程序框架的设计,充分利用Lab-VIEW 的自动多线程特性和队列操作函数(Queue Operations Functions)便利的堆栈处理功能[5-7]。系统软件框架设计如图3 所示。该系统通过Lab-VIEW 队列操作函数实现图像堆栈的建立、压栈、出栈、查询、释放操作。通过查询堆栈的存储状态,利用状态机模式,实现图像生产循环中相机(平台)移动、图像采集、等待堆栈空位三种工作状态之间的转换,防止内存溢出。
采用该软件框架设计的视觉检测系统,针对不同的运动控制装置、执行装置,只需在移动对准子函数与执行控制子函数中调用相应硬件的API 函数即可。而对于检测对象或内容的改变,只需在图像处理子函数中调用相应的图像处理算法和读取相应的检测制程文件即可。该软件框架设计能在提高系统运行效率的同时较好地满足软件的设计重用性和系统的可扩充性要求,有助于视觉检测系统的快速搭建。
4 结束语
一个结构良好的框架能在满足性能要求的同时提供更好的重用性和扩展性,为程序开发人员提供更大的便利。本文在分析典型视觉检测系统功能和构成的基础上,在LabVIEW 编程环境下利用其生产/消费模式、状态机模式、队列函数设计了一种适用于典型视觉检测系统搭建的软件框架。目前,该软件框架在作者参与研发的科隆威WIN系列无铅锡膏印刷机2D 锡膏检测系统中运行良好。
[1]王红军.机器视觉-现代工业的眼睛[J].机电一体化,1999(3):26-27.
[2]陈锡辉.LabVIEW8.20 程序设计从入门到精通[M].北京:清华大学出版社,2007.
[3]National Instruments Corporation.IMAQ Vision for Lab-VIEW user manual[Z].2000.
[4]Jon Conway,Steve Watts.软件工程方法在LabVIEW中的应用[M].北京:清华大学出版社,2006.
[5]陈雪冰,郭倩,马皓.基于CAN总线和LabVIEW的能馈电子负载监控系统[J].机电工程,2011(8):954-959.
[6]陈树学,刘萱.LabVIEW宝典[M].北京:电子工业出版社,2012.
[7]Peter A,Blume.The LabVIEW Style Book[M].London:Prentice Hall,2005.