王一舒,陆小龙,黄玉波,张 涛
(1.四川大学锦城学院 机械工程系,成都 611731;2.四川大学 制造科学与工程学院,成都 610065)
汽车零部件生产行业作为汽车工业的配套产业,是其重要组成部分。汽车零部件质量的优劣直接影响着整车性能。然而,由于国内汽车零部件企业多以劳动密集型、低附加值产品为主,行业整体研发投入强度较低,在零部件质量检测和分拣环节主要以传统人工方式为主,存在生产效率低,劳动强度大的缺点[1]。
随着智能制造相关概念的提出,以及新型感知技术和自动检测技术的应用,制造业正在向信息化、自动化和智能化的方向发展[2]。传统的人工检测与分拣方式已经严重制约汽车零部件生产企业的发展。随着整车厂对零部件的质量和供货时间的要求不断提高,产品的自动化检测、分拣就显得尤为必要。李和平等提出了基于LabVIEW软件控制的工业机器人自动分捡系统,采用智能相机完成特定形状物料的分拣[3]。高丹等采用Harris角点特征检测进行零件识别及朝向判断,提高零件的装配精度[4]。袁欢等设计了一套基于计算机视觉的零件方位朝向自动分拣系统,实现零件方位及朝向的自动识别[5]。管经纬等为了解决零件摆放的位姿偏差,采用边缘检测和轮廓跟踪算法确定工件形心位置和旋转角度[6]。刘振宇等提出了一种角点特征结合轮廓特征的识别算法,有效解决了规则几何工件的分拣问题[7]。Fu-Cheng YOU等提出通过计算零件圆度和面积特征,辅以合适的识别规则实现对生产线上的机械零件进行识别和分拣[8]。Gustavo Barea 等设计了一套用于识别和分类小零件的基于机器视觉的自动化系统[9]。
从近些年的研究来看,在机械零件自动检测与分拣领域,计算机视觉检测技术已经成为主要的技术手段之一。研究的重点主要集中在零件朝向的识别和规则几何外形零件的类型识别,相关的研究成果并不适用于对汽车摇臂这类外形复杂的铝合金压铸零件的类型识别。为此,本文根据汽车摇臂的结构特点和分拣要求,基于计算机视觉检测技术,结合PLC自动控制技术,研制一台用于发动机摇臂生产的智能分拣系统。
汽车发动机摇臂主要采用铝合金压铸工艺铸造而成,并辅以车削、铣削工艺完成平面和通孔加工。如图1所示为待分拣的汽车发动机摇臂零件,主要有6种类型。其中前4类零件结构相似,后2类零件结构相似。按照产品信息化管理要求,这6类铝合金零件底部均采用压铸工艺加工有零件编号。待分拣零件的长宽高范围分别为:长120~200mm; 宽:100~160mm; 高:35~160mm。
图1 待分拣的6类零件
由待分拣工件结构特点可知,以下两种方法可用于识别待分拣的6类铝合金零件类型:
(1)识别零件的编号
为了便于产品质量追溯,汽车零部件均有固定编号。通常汽车零部件编号由企业代号、产品代码、组号、分组号、零件序号和变更号等部分组成。功能部位、尺寸和技术要求相同的零件,只能用同一个代号。对于待分拣的6类零件,根据零件编号识别零件的类型是最有效的方法。但是由于这几类零件的零件编号均位于零件底部,对于图1所示Ⅰ、Ⅱ、Ⅲ和Ⅳ4种类型零件结构均呈“┷”型,需将其底部朝上才能检测到其零件编号,增加了自动分拣的难度。
(2)识别零件结构特征
对于待分拣的几种类型零件,其共同特征是采用铝合金压铸工艺铸造而成,辅以车削、铣削工艺加工零件上的孔和平面。图1所示6类零件尽管结构相似,但彼此之间结构上仍有一些不同之处。Ⅰ类和Ⅱ类零件主要区别在于顶部有无钻孔;Ⅲ类和Ⅳ类主要区别在于顶部孔是在圆柱台上还是在平台上;Ⅴ类和Ⅵ类主要区别在于通孔的位置和凸台的形状;Ⅰ、Ⅱ两类和Ⅲ、Ⅳ两类的主要区别在于底部是否加工有平台。采用合适的特征识别算法可以将这几类零件区别开来。
然而,考虑到零件经过超声清洗,被工人初步检查后,快速地放到用于零件分拣的传送带上,导致传送带上零件的摆放姿态并不固定,不能仅靠某一种方法便将所有零件区别开来。因此,项目提出将识别零件编号和识别零件结构特征相结合,以提高零件分拣的准确性。
基于前文分析,针对被分拣对象的结构特点,考虑系统成本和生产现场的安装空间等因素,项目组提出了如图2所示的方案。该系统以同步带为主要输送装置,由零件类型识别模块和零件分拣模块两部分构成。零件类型识别模块由传送带1、视觉检测单元组成,用于完成零件类型的识别。为了保证待拣零件能够尽量竖直地放置在传送带上,传送带1需要进行特殊定制。零件分拣模块由传送带2、气动推杆、6个零件储存工位和1个未识别零件储存工位组成。为了避免零件工位因工人清理不及时造成零件堆积,零件存储工位和未识别零件存储工位均配置有传送带。
图2 分拣系统总体方案
针对零件分拣系统各组成模块的特点,系统采用工控机(IPC)与西门子S7-200 Smart可编程逻辑控制器(PLC)构成主从式控制系统。上位机IPC负责完成视觉图像处理和人机交互任务,如待测零件参数设置、状态监控,数据显示,数据管理以及报表生成等。下位机PLC负责传送带和气动推杆的控制,并按照上位机的检测结果控制气动推杆和传送带动作,完成分拣任务。
在现代工业控制系统中,由工业控制计算机IPC与可编程逻辑控制器PLC构成的主从式控制系统获得了广泛的应用。上位机与下位机的通信是该类控制系统的难点。在发动机摇臂零件自动分拣系统中IPC与PLC间采用TCP/IP协议通信。因此,能否保证PLC与上位机IPC的可靠通信是该自动分拣系统的关键。
TCP/IP协议是SMTP、FTP、TCP、UDP、IP、ARP等协议组的简称,其中TCP和IP是该协议组中最核心的协议。TCP/IP协议只用到ISO/OSI 7层网络参考模型中4层,即物理层、数据链路层,网络层和应用层。其结构简洁,传输速度快,传输距离远。TCP/IP协议不仅提供了可靠的数据传输服务,而且对网络的物理层硬件没有特殊要求,使其组网方便、灵活。
S7-200 PLC是德国西门子公司生产的小型PLC,具有可靠性高、内置功能丰富,性价比高和支持开放式通信等特点,在工业控制领域得到了广泛应用。S7-200 PLC与工业控制计算机IPC通过TCP/IP协议通信,需要双方都调用指令以建立连接及交换数据。上位机IPC利用Visual Studio C#编写程序建立服务器端,下位机S7-200 PLC通过在PLC编程软件中调用Open User Communication指令库中的TCP_CONNECT, DISCONNECT, TCP_SEND和 TCP_RECV 4条指令建立客户端。在服务器端配置监听的IP地址和端口,在客户端程序中配置需要访问的服务器IP地址和端口即可连接通讯。
(1)服务器端主要程序如下:
①创建一个监听Socket
public void StartListen()
{ …
WatchSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddressserverIP = IPAddress.Parse(ServerIP);
IPEndPointserverIPPort = new IPEndPoint(serverIP, ServerPort);
WatchSocket.Bind(serverIPPort);
WatchSocket.Listen(10);
m_bFlag = true;
…
}
②接收客户端连接,并创建通讯的socket
public void AcceptClient()
{ …
ComSocket = WatchSocket.Accept();
thReceivedata = new Thread(ReceiveData);
thReceivedata.IsBackground = true;
thReceivedata.Start(ComSocket);
… }
③接收客户端发来的数据存入缓存区
public void ReceiveData(object o)
{
Socket recSocket = o as Socket;
while (true)
{
try
{ int res = recSocket.Receive(recBuffer);}
catch (System.Exception ex)
}
}
④发送数据到客户端
public void SendData(object o, string strSendMsg)
{ Socket sendSocket = o as Socket;
sendBuffer = Encoding.ASCII.GetBytes(strSendMsg);
try
{ sendSocket.Send(sendBuffer);}
catch (System.Exception ex)
{ }
}
(2)客户端主要程序如图3所示。
(a)初始化连接参数,并建立连接
(c)接收数据图3 客户端主要程序
考虑到放置在传送带上的待拣零件摆放姿态各异,不能仅靠某一种方法便将所有零件区别开来。项目组提出将识别零件编号和识别零件结构特征相结合,以提高零件分拣精度。本分拣系统中视觉检测模块采用Visual Studio C# 与Halcon12 联合编程实现。针对该6类零件的识别问题,分别提出以下两种算法,在检测过程中依据条件判断选择合适的算法:
(1)零件编号识别算法
由于零件编号由数字和字母组成,对零件编号识别过程包括字符的识别和字符数量的识别两部分。具体流程是:根据零件编号的方向对图像进行旋转矫正,保证编号水平;然后进行滤波处理,提取零件编号所在ROI区域;接着在ROI区域对处理结果进行阈值化操作,并由Halcon提供的OCR字符识别函数完成零件编号的提取。
(2)零件结构特征识别算法
如图1所示,待分拣的6种类型零件共同特征是其上均有多个孔洞,通过识别零件上孔洞的特征来区别各类零件。孔洞的识别需要用到Cricle的检测算法。Halcon提供了识别圆的函数,通过对函数参数进行限定,可方便的识别出零件孔洞的位置和半径。具体流程是:对待检图像进行快速二值化处理,得到连通域;根据孔的大小选择连通域的阈值,识别通孔和圆台;然后计算出孔-孔之间的距离;以6类待分拣零件孔洞的加工尺寸的判断条件,识别所检零件种类。
基于前文的设计方案,项目组采用Solidworks三维建模软件完成了汽车摇臂零件自动分拣系统的三维建模,如图4所示。并借助SolidWorks 提供的SimulationXpress工具和Motion Simulation工具对分拣系统关键部件的结构进行了分析,依据仿真结果对系统进行了优化。
图4 汽车摇臂自动分捡系统3D建模
为了验证视觉检测算法的可行性,项目组利用搭建的机器视觉检测单元,完成了待拣零件的图像采集,并利用已提出的零件编号识别算法对待拣零件的编号进行了识别,如图5所示。零件编号字符识别率可以达到95%。同时,在实验过程中发现视觉系统的光照对零件编号的识别有很大影响。
(a)待拣零件 (b)零件编号识别结果图5 零件编号识别结果
此外,利用前文已提出的零件结构参数识别算法对待拣的6种零件进行了处理,如图6所示。从图象处理结果看,待拣零件的轮廓参数、孔洞的识别比较准确,便于零件类型的识别。但是对于Ⅰ、Ⅲ、Ⅴ三类零件的顶部孔洞几何轮廓提取较模糊,增加了零件类型识别的难度。下一步将不断改进算法,提高待分拣零件结构参数的识别精度。
图6 零件结构特征识别结果
文中采用Visual Studio C# 与Halcon12 联合编程,通过识别待拣零件结构特征和编号,完成了对6种类型汽车摇臂零件类型的识别。采用TCP/IP协议实现工业控制计算机IPC和西门子S7-200smart PLC 间的数据通信,提高了系统通信稳定性。待拣零件类型识别试验结果表明本文所提出的摇臂零件类型识别方法可以准确地识别出零件的编号和外形结构特征。相关的研究成果将为下一步分拣系统工程样机的试制提供依据。