连接CNC系统和套料软件的中间件设计与实现
2019-05-27
(华中师范大学 物理科学与技术学院电子信息工程系,武汉 430079)
0 引言
在现代工业生产过程中,过程控制系统占据着重要的地位。近年来,随着科学技术的发展,过程控制自动化取得了长足的进步。然而,随着用户需求的提高,以及生产规模的扩大,工控系统的功能在日趋强大的同时,结构也愈发复杂,目前已形成了多厂商软硬件产品共存的异构环境。在市场日趋激烈的竞争驱使下,各自动化系统厂商迫切希望能够实现应用软件和工控设备的异构整合,达到提升现场作业效率和企业个性化成本优化的效果[1]。
作为一种高效、先进的工艺方法,数控切割在工业制造领域的应用愈加广泛。在实际的数控加工中,CNC系统通过解释并执行G代码文件来实现工业的自动化加工。然而,由于市场分工的精细化,工业设计和现场加工往往是独立分工的,所以G代码文件往往不是直接在CNC系统中生成的。G代码的传输主要有手动输入、信息载体传输和RS232串口传输[2]等方式。但是传统的传输方法存在速度慢、误差大、传输距离短等缺点[3]。随着加工规模的扩大、插补精度的提高,传统的传输方法已不能满足当下数控加工的需求,用户需要一种更快速、准确的方法传输G代码[4]。
为满足市场需求,充分利用异构环境下CNC系统和套料软件各自的优势,本文设计并实现了一款中间件系统。该中间件通过PVIServices接口实现上位机与贝加莱CNC系统的通信设计,采用FTP文件传输协议将套料软件生成的G代码文件传输到CNC系统工件程序存储区,然后通过Windows消息机制实现套料软件和中间件的进程通信。
1 中间件整体设计
中间件的整体功能设计如图1。首先,中间件作为FTP文件传输协议的客户端,工控设备上的CNC系统作为FTP文件传输协议的服务端,在中间件和CNC系统之间建立文件传输通道,将套料软件绘图、编程生成的G代码文件传输到CNC系统,从而实现了数控切割程序的高速远程双向传输。考虑到数控加工中实际的生产需要,并且为了充分体现中间件设计的实用性、灵活性以及高效性等特点,对于CNC系统中已有的加工文件,中间件还可以提供下载、删除等操作。
图1 中间件整体功能设计
其次,中间件重写了PVI客户端接口,对CNC系统中的底层通信协议和数据类型进行封装,为应用层软件系统提供统一的调用接口,方便中间件系统的开发和维护升级。
最后,中间件通过封装的PVI通信协议与CNC系统建立通讯连接,实时获取和显示CNC系统的运行状态,并设计了一种便于普通工程师使用和操作的人机交互界面,从而实现对CNC系统状态和运行参数的控制。此外,中间件通过WM _COPYDATA消息与套料软件实现进程通信,实时传送CNC系统的切割状态到套料软件,以保证实际加工路径与规划路径的一致性。
2 通讯模块设计
2.1 PVI通信模块
PVI(Process Visualization Interface)是为了接入B&R Automation Net提供给所有Windows平台上软件程序包的通用接口[5]。使用PVI,既可以统一、协调的访问各种媒体和协议,也能在处理所有类型的数据的同时对设备进行控制。在开发应用程序时,不必花费时间和精力探索底层之间的通信,只需对PVI的对象结构进行简单配置,就能访问和操作控制器中的变量。
针对PC端Windows应用程序,B&R提供了两类PVI客户端接口(PVICOM interface和PVIServices components)来实现应用程序与贝加莱CNC系统之间的PVI通信。PVICOM interface基于PviCom.dll,早期多应用于Visual C/C++平台,且早期的runtime也仅支持PVICOM方式。随着B&R工控系统的发展和runtime环境的升级,且由于PVICOM interface缺乏实时的升级维护,目前在PC端应用程序开发的过程中已经很少作为客户端接口。
PVIServices components客户端接口基于BR.AN.PVIServices.dll,被所有基于Windows应用的Visual Studio.NET用于控制器的通信和诊断服务上。PVIServices是基于PVICOM接口实现,并在编程环境中通过面向对象的结构呈现,函数和变量数据都以PVIServices Namespace的形式,被整体分组在易于用户使用的类中,实现起来更加简单,并且PVIServices components升级维护良好,支持目前市场上几乎所有B&R系列的工控系统,其对象结构如图2。因此,本中间件系统采用PVIServices components接口作为PVI Client-interface实现中间件与CNC系统的通讯。
图2 PVIServices对象结构
2.2 G代码文件的传输
计算机网络技术的发展加速了数控系统的网络化,为了满足当下数控加工的需求,通过网络快速高效传输数控加工程序,是网络化加工制造的必然趋势[6]。FTP是一个8位的客户端-服务器协议,可以操作任何类型的文件,是计算机网络中使用最广泛的文件传输协议,它屏蔽了计算机系统的诸多细节,非常适合在异构系统中实现文件的传输[7]。因此,本文设计的中间件可以充分利用网络协议的开放性和通用性,使用基于FTP的文件传输协议,将套料软件生成的G代码文件传输到工控设备的CNC系统,实现快速高效的网络传输。
FTP是一个客户机/服务器(C/S)系统,不同于其他基于C/S架构的系统,FTP在客户端和服务器之间建立两条TCP连接来完成文件传输[8],一条连接负责传输控制信息(命令和响应),另外一条负责数据的传送,其结构模型如图3。
图3 FTP客户端/服务端模型
在本文设计的中间件中集成FTP-Client模块,通过与控制器上的FTP Server建立连接,就能将套料软件生成的本地G代码文件传输到CNC系统的加工程序存储区,有效解决了大容量加工程序的传输问题,既能满足当今数控系统的加工生产需求,又提高了数控加工程序传输的速度、可靠性。此外,中间件系统设计的客户端界面可以进行文件的下载、删除和更新等操作,非常便于工业现场的操作。
2.3 中间件与套料软件的进程通信
进程通信是指在进程间进行数据的传输(交换信息)。根据交换信息量的多少和效率的高低,进程通信可以分为低级通信和高级通信。低级通信只能传递状态和整数值(控制信息),传送信息量小,效率低,每次通信传递的信息量固定。高级通信提高了信号通信的效率,可以传递大量数据,减轻程序编制的复杂度。其中高级进程通信主要分为三种方式:共享内存模式、消息传递模式、共享文件模式。消息传递模式通过操作系统的相应系统调用进行消息传递通讯,分为点到点发送的直接通讯和以信箱为媒介进行传递的间接通讯。消息传递的间接通信方式易于建立双向通讯链,通讯安全且实现简单,因此,中间件与套料软件之间的进程通信可以通过基于消息传递的方式实现。
本文设计的中间件基于Windows系统平台,Windows系统是一个由消息驱动的操作系统[9],而Windows消息机制是消息传递的间接通信方式中的一种,相比于其他同机进程通信方式,Windows消息机制实现较为简单、有效[10]。
WM _COPYDATA是一种功能强大又非常简单的Windows消息[11],且中间件与套料软件的通讯满足使用WM_COPYDATA消息的两个条件,即知晓接收消息进程的句柄,接收消息进程重载消息映射后可以给出反馈。为了实时回传CNC系统自动解析并执行G代码时的运行参数,保证CNC系统执行路径与套料软件规划路径的一致性,本文通过WM_COPYDATA消息机制实现套料软件与中间件不同进程之间的数据交互,中间件作为消息发送方,将要发送的信息打包,并寻找作为接收方的套料软件的句柄,找到接受窗体的句柄后将消息发送。当接收方接收到消息时,先判断接收到的消息是否为WM_COPYDATA消息,确认消息正确后才进行接收,程序设计框图如图4。
图4 消息的发送与接收
3 中间件系统的实现
3.1 PVIServices接口实现
中间件重写的PVIServices接口可以识别的通信对象有:服务对象(Service);CPU对象(CPU);任务对象(Task);变量对象(Variable)和模型对象(Module),每个通信对象都由特性、事件与方法三种属性构成,如图5。
图5 PVIServices对象属性
其中,Service对象负责创建连向PVI Manager的连接,是PVI客户端中其他对象(CPU,任务,变量等)操作的基础,当一个新的服务对象创建成功后,即表示一个中间件与控制器系统的远程连接已经被建立。CPU对象则负责建立PVI Client与控制器的连接。当Service对象和CPU对象创建连接成功后,则代表过程变量的映像已经建立好,即可对控制器CNC系统上的变量对象进行读写操作。其函数原型如下,其中cpu_name设定为ARsim或Remote_PLC,相应的ip_adress为默认IP和实际PLC的IP地址。
private void service_Connected(object sender, PviEventArgs e)
{
myCpu = new Cpu(service, cpu_name);
myCpu.Connected += new PviEventHandler(myCpu _Connected);
myCpu.Connection.ANSLTcp.DestinationIpAddress = ip_adress;
}
Task对象与控制器的任务相对应,管理任务中的全局和本地变量。Module 对象定义一个在控制器上的BR模块的属性,可以对模块进行上传、下载和删除等操作。Variable 对象则表现为一个控制器上的变量,可用变量类型有内在变量、全局变量、本地变量,输入不同的高层次对象作为父类就可以创建不同类型的变量。将Service对象和CPU对象作为父类输入,就分别创建了一个内在变量和一个全局变量。
3.2 WM_COPYDATA实现
中间件使用FindWindow函数获得套料软件的句柄,然后调用SendMessage函数向套料软件发送WM_COPYDATA消息,其原型如下:
SendMessage(hwnd, WM_COPYDATA, wParam,IParam);
hwnd表示接收窗体句柄,发送消息类型为WM_COPYDATA,wParam表示发送窗口的句柄,IParam为指向一个COPYDATASTRUCT结构的指针。COPYDATASTRUCT结构声明如下:
typedef struct tagCOPYDATASTRUCT{
DWORD dwData;
DWORD cbData;
PVOID lpData;
} COPYDATASTRUCT,*PCOPYDATASTRUCT;
dwData指定传递给接收方的数据,cbData是要传递的数据块大小,lpData是指向内存块的指针。中间件发送WM_COPYDATA消息时,我们对dwData和lpData所传送的数据进行了自定义设置,并且使用小端模型存储数据。
当dwData=1时,设定当前发送的消息数据为单个变量,IpData所指向的字节流定义如下:
变量N 变量数据长度N 变量数据1 变量数据2 变量数据3…变量数据N。
当dwData=2时,表示消息发送的是多变量数据,IpData指向的字节流如下:
变量1 变量1数据长度N 变量1数据1 变量1数据2 …变量1数据N;
变量2 变量2数据长度N 变量2数据1 变量2数据2 …变量2数据N;
…
变量N 变量N数据长度N 变量N数据1 变量N数据2 …变量N数据N。
中间件发出WM_COPYDATA消息后,套料软件作为接收方在消息映射表中添加ON_WM_COPYDATA()的映射,并定义接收消息的响应函数:
OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
套料软件通过中间件句柄pWnd向中间件发送反馈数据,pCopyDataStruct完成对数据块的接收。
3.3 FTP客户端实现
中间件所实现的FTP客户端具有易于操作与功能完善的图形界面,包括用户登陆与退出、文件及目录的下载与上传,方便工程师对CNC系统中的G代码文件进行下载、删除和更新等操作。
FTP接口程序部分函数如下:
1)连接FTP服务。
bool ConnectFtpServer(string strIp, UINT nPort, string strUserName, string strPassword, bool bPassive = TRUE, bool bUTF8Mode = TRUE);
其中:strIp为FTP地址;nPort为FTP服务端口,默认端口为21;strUserName和strPassword为FTP用户名的密码;bPassive表示是否为被动模式;bUTF8Mode表示编码方式是否为UTF8编码。
2)上传FTP文件。
bool UploadFtpFile(string strRemotePath, string strRemoteFile, string strLocalFilePathName);
其中: strRemotePath为FTP相对目录;strRemoteFile为FTP文件名称;strLocalFilePathName则表示本地文件名称。
3)删除FTP文件。
bool DeleteFTPFile(string strRemotePath, string strRemoteFile);
其中:strRemotePath为要删除的FTP文件相对目录;strRemoteFile为要删除的FTP文件名称。
3.4 数据交互与界面显示
中间件与CNC系统之间通过PVI通信协议、FTP协议连通之后,即可进行CNC系统状态等数据的传输以及各状态参数的显示与控制。
为了保证中间件系统的可读性,便于中间件系统的升级维护,中间件在进行界面变量信息的定义时,遵照CNC系统的变量命名规则,与CNC系统上的变量名称、类型保持一致。但是由于CNC系统变量结构复杂,数量庞大,为了保证变量映射关系的一一对应和升级维护的便利性,中间件设计实现中通过交互变量的映射表构建变量配置文件,通过配置文件的索引来关联变量参数,这样既可以保证变量关联的准确性,还可以便于交互变量的增加或减少,设计灵活高效。
中间件可以接收CNC系统所传输的机床运行状态及配置参数,并采用了一种简洁、易于理解和使用的图形界面来呈现CNC系统的机床状态、工艺参数等内容。中间件的操作界面在CNC系统界面显示的基础上,充分考虑工程师的使用权限和操作习惯,针对性的显示了切割控制、激光调整等各类控件,对相应权限范围下不可操作的参数进行锁定,可以降低现场因误操作导致的损失。
3.5 系统实现
为了保证中间件系统的兼容性和可扩展性,本文设计的中间件以Microsoft Visual Studio 2013为开发环境,采用C++语言基于功能强大的MFC类库进行开发。中间件系统功能模块如图6,主要由通讯连接模块、数据交互模块和测试模块三个部分组成。
图6 中间件功能模块
通讯连接模块包含了中间件与CNC系统的PVI连接和FTP连接设置。图7是中间件连接界面,用户可以根据需求配置中间件与CNC系统的通讯连接。PLC类型选择ARSim时,默认IP地址127.0.0.1,即实现连接虚拟的PLC进行仿真,便于在升级维护的开发过程中进行调试;在实际的应用现场中,PLC类型统一设定为Remote_PLC,需要输入实际PLC的IP地址。在FTP服务设置中,IP地址为实际连接的PLC地址,端口默认21,用户名和密码分别对应CNC系统设置的FTP账号密码,相对路径为G代码在CNC系统的存储路径,默认为/DATA/Programs,实际操作可以根据具体需求进行设定。
图7 CNC连接设置
中间件的数据交互模块实现了CNC系统的机床状态、标定调整、工艺参数、机床维护等16个界面以及G代码的传输和同步页面。中间件与CNC系统连接成功后,就可以实现CNC系统运行状况的实时显示和控制。本文设计的中间件主要采用的是B&R X20系列控制器进行实验测试,图8是中间件与CNC系统连接成功后的激光调整界面,界面上显示的是CNC系统当前的运行参数,在界面中对相应状态参数进行修改,点击应用保存,就可以控制CNC系统的运行状况,操作简单方便。
图8 激光调整
为了方便中间件的升级维护和功能扩展,系统设计了测试模块,包括通讯连接测试、G代码同步测试和PVI接口测试。图9是中间件的PVI接口测试界面,可以对控制器上的全局变量和局部变量进行读写操作,测试中间件与CNC系统的连接情况等。
4 结束语
本文针对目前工业自动化用户的个性化需求,通过整合套料软件和CNC系统的部分功能,研究并开发了一种便于普通工程师理解和操作的中间件系统。通过将标准套料软件生成的G代码传输到并解析到CNC系统,实现了CNC系统数据的实时显示与跟踪,保证了CNC系统执行路径与套料软件规划路径的一致性。系统实际应用表明,该系统人机交互良好,且实现了大容量数控程序的网络化高速传输,能有效解决用户的个性化需求,节约了企业生产成本,具有一定的推广价值。
图9 PVI接口调试