APP下载

Ethernet/IP 协议的分析实现及在工厂信息化中的应用

2015-12-17李泽琦

电脑知识与技术 2015年28期
关键词:通信控制系统信息系统

李泽琦

摘要:随着信息技术的快速发展,各种信息管理系统在各行各业得到了广泛的应用,在工业信息系统的实现过程中往往需要信息系统与控制系统互相通信进行数据交换。在实际实现中,控制系统只是被动的响应数据读写的请求,如果请求的数据量较大,并且在控制系统的数据实际变化频率不高的情况下将造成大量的无用读写,浪费控制系统通信带宽和系统运算能力。该文介绍一种利用Ethernet/IP协议实现控制系统主动发送读写数据的方式,以减少网络上的无效读写请求,提高信息系统与控制系统之间的通信效率。

关键词:Ethernet/IP;信息系统;控制系统;通信

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2015)27-0024-02

随着信息技术的快速发展,各种信息管理系统在各行各业都得到了广泛的应用。信息管理系统也从最初的单机系统发展到网络系统。随着信息系统的不断壮大,信息系统与底层工业控制系统之间的信息交互越来越频繁,数据量越来越大。如何构建一个稳定和高效的数据交互层变得越来越重要。

1 常用信息系统与控制系统通信方式及缺点

在现有的方案中,大多数信息系统与工业控制系统之间的交互是通过OPC技术来实现的。OPC是OLE for Process Control的简称,是一个工业标准,它是许多世界领先的自动化软硬件公司与微软公司合作定制的。通常每个硬件供应商会为其设备开发一个实现了OPC标准接口的软件。因为各个硬件厂商都遵循同一软件标准,因此,作为OPC客户端的上层信息系统应用不用关心底层的硬件实现细节,只要按照OPC的标准编写客户端程序就可与厂商提供的接口通信读写数据。

OPC标准最初是在1996年发布的。因此OPC标准有着那个时代的局限性。首先当时的OPC标准是基于微软的COM技术实现的,不能很好地跨操作系统平台并且对复杂网络环境不能很好地支持。为了适应技术发展的变化,OPC基金会在2006年发布了OPC UA架构,OPC UA不再依靠COM而是基于面向服务架构(SOA),这种架构独立于编程语言和操作系统,提供了平台独立性,高可靠性,高扩展性和互联网连接性等一系列重要的特性。

然而,即使使用OPC UA,信息系统也只能主动地去与工业控制系统通信,并不能被动的从控制系统接受数据,因此为了获得控制系统中变化的数据,信息系统只能不断地去轮询,这样当控制系统的数据变化频率不规律时,信息系统将浪费大量的轮询时间和网络带宽。

2 Ethernet/IP协议的介绍

以太网是一种广泛使用的局域网实现,随着其广泛的应用,以太网也渐渐进入到工业控制领域,各大硬件厂商也都推出了自家的工业以太网产品和相应的标准。其中美国Rockwell公司提出的Ethernet/IP协议就是一种广泛应用的工业以太网标准。它底层使用以太网和TCP/IP、UDP/IP协议,能与上层信息系统无缝连接,同时它应用层使用CIP(通用工业协议)可以直接与支持CIP协议的设备包括ControlNet和DeviceNet设备通信。基于这种特性,可以通过在信息系统中实现Ethernet/IP协议从而实现信息系统与工业控制系统的双向通信。

本文将着重介绍一种软件实现的Ethernet/IP方式,通过这种方式实现与控制系统的双向通信。首先对Ethernet/IP协议的通信流程和协议帧栈进行分析,然后使用Python语言实现Ethernet/IP协议,并测试数据的双向通信。

3 Ethernet/IP协议的分析

Ethernet/IP协议使用TCP/IP协议发送报文。首先作为服务端的一方监听端口0xAF12,当有客户端连接时首先建立TCP连接,紧接着客户端会发送一个RegisterSession的请求,服务端会应答这个请求并给客户端返回一个会话句柄,客户端在之后的每次请求都会包含这个会话句柄。这时客户端和服务器之间就建立了会话,客户端可以向服务端发送UCMM报文。客户端可以向服务端发送一个包含Forward Open的服务请求的报文,服务端响应请求并返回一个ConnectionID的报文,这时客户端和服务器之间就建立了一个显式的CIP连接,之后客户端就可以向服务器发送CIP ReadData和CIP WriteData的服务请求从而实现对控制系统的数据的读写。当数据读写结束时客户端可以向服务器发送一个包含Forward Close 服务的请求报文,服务端响应请求并关闭这个显式连接。接着客户端可以发送UnRegisterSession的请求,服务器响应请求并关闭TCP连接。

一个Ethernet/IP报文包含一个24字节固定长度的封装头部和不定长度的数据,其中头部包含请求命令、长度、会话句柄、状态、发送上下文、选项6个字段。其中请求命令表示请求的类型,长度表示的是报文除头部外的字节长度,会话句柄如上文所说由服务端返回给客户端,状态表示请求的状态,发送上下文用于保证请求和响应的对应。在封装头部之后一般包含一个称之为CPF的通用包格式,每个CPF中包含若干个条目,一般情况下会包含一个地址条目和一个数据条目。如果客户端与服务器之间建立了连接,会在地址条目中包含对方的ConnectionID,并且在数据条目中包含序列号。在CPF之后会包含一个服务请求头部,服务请求头部包含了请求的服务代码,请求路径的字长度和请求路径。之后的数据根据请求的服务类型不同包含不同的内容。其中当请求的服务为Forward Open时,之后的数据为连接的参数以及连接的路径。当请求的服务为CIP Read 或CIP Write时,之后的数据为需要读写的元素的个数。当请求的服务为Forward Close时,之后的数据为客户端的连接参数和连接的路径。

4 Ethernet/IP协议的实现

根据上文的定义,采用Python语言来定义需要使用的基本包结构并实现一个简单的客户端和服务器。之所以采用Python语言,是因为其语言设计简单高效,可用于快速的实现。并且其对网络编程有很好的支持,有很多开源的网络库实现,编写代码时不必要再关心不必要的细节,同时Python语言支持多种操作系统,具有很好的跨平台性。使用Python语言来实现可以更多的关心Ethernet/IP的基础定义实现,从而能对Ethernet/IP协议有更深入的认识。

首先定义Ethernet/IP协议的封装头部类,在其中定义每个上文所描述的字段为封装头部类的成员变量,并定义两个名为pack和unpack的成员函数。其中pack函数用于将其中的成员变量安装封装顺序打包为一个二进制字节数组,而unpack函数用于将从网络上接收的二进制字节数组解包为类的成员变量。

之后可以按照定义封装头部的方式,依次定义CPF类和相应的条目类、服务请求类和服务响应类、Forward Open连接参数类、Forward Close 连接参数类。

有了相应的报文封装类,就可以先进行客户端的编写并对协议的实现进行初步测试。首先,按照Ethernet/IP协议的通信流程定义OpenSocket、RegisterSession、Forward_Open、ReadData、WriteData、Forward_Close、UnRegisterSession等函数。其中OpenSocket函数用于建立到服务器0xAF12端口的连接;RegisterSession函数用于向服务器发送RegisterSession请求报文并接收服务器返回的会话句柄;Forward_Open用于创建连接参数报文并按封装结构发送给服务器,然后从服务器接收响应报文并解包获得服务器的ConnectionID; ReadData函数使用已获得的会话句柄和ConnectionID向服务器发送CIP Read服务请求报文并接收服务器的响应报文获得需要读取数据;WriteData函数与ReadData类似只是发送CIP Write服务请求;Forward_Close函数和UnRegisterSession函数则分别用于关闭连接和注销会话。之后按顺序调用以上函数,将客户端连接到Rockwell的ControlLogix 5573控制器测试数据的读写,经测试数据的读写成功。

通过客户端可以实现信息系统主动从控制系统读写数据,之后需要实现一个服务器才能被动从控制系统接收数据。服务器的实现采用流行的Twisted网络库,该网络库基于事件驱动模型,将网络的读写操作进行封装,开发者只需要关注数据的处理。因此服务器的实现只需要定义EIPMsgServer和EIPProtocol类并分别继承ServerFactory和Protocol类。EIPMsgServer类在接收到一个客户端连接后会自动创建一个EIPProtocol类,当客户端有数据传输时就会调用EIPProtocol类中的dataReceived函数。在dataReceived函数中,首先读取客户端发送前24字节数据并使用之前定义的封装头部类对其进行解包,从而可以获得剩余数据的长度,然后读取剩余长度的数据,将封装头部和剩余数据一起交给自定义的processPack函数处理,如此循环处理客户端发送来的数据。在processPack函数中读取封装头部中的命令字段,将不同的命令交给相应的自定义函数处理。在相应的自定义函数中,对剩余数据按照相应的命令和服务请求解包为相应的封装类,根据封装类的请求创建响应封装类并打包发送给客户端。最后在ControlLogix 控制器中编写程序,创建一条MSG指令将路径指向编写好的服务器并触发指令,可以看到从控制器中成功地实现了对服务器中数据的读写。

至此该协议的实现已经可以被动的接收数据了,之后可以将该协议的实现集成到实际的信息系统中,既可以实现从信息系统主动获取控制系统的数据也可以实现信息系统被动的从控制系统获得数据。当控制系统中的一些数据并不长期变化时可以通过控制系统直接向信息系统发送MSG指令传送数据,而不需要信息系统按照一定的频率一直向控制系统发送数据读写请求,从而大大地节省了网络带宽并减轻了控制系统的运行压力。

5 总结

本文分析了信息系统与控制系统通信常用的OPC接口方式并分析其存在的缺陷,进而通过分析Ethernet/IP协议,分别实现了通过Ethernet/IP协议读写控制系统数据的客户端和接受控制系统MSG指令响应客户端数据读写请求的服务器。提供了一种信息系统与控制系统的通信新思路,为以后工厂信息化中信息系统和控制系统的互联互通提供了更多的选择。

参考文献:

[1] Rockwell Automation. Communicating with RA Products Using EtherNet/IP Explicit Messaging (Rev. 1.2), ab.rockwellautomation.com.

[2] 孙军凯.从EtherNet/IP工业以太网到工厂信息化技术[J].自动化博览,2004(4):35-39.

猜你喜欢

通信控制系统信息系统
企业信息系统安全防护
基于区块链的通航维护信息系统研究
信息系统审计中计算机审计的应用
Ka频段卫星通信自适应抗雨衰控制系统设计
简述计算机通信网络安全与防护策略
Android环境下主UI线程与子线程通信机制研究
无线自组网在野战防空通信系统中的应用
基于PLC的钢厂热连轧感应加热炉控制系统实现
对数字微波通信技术的研究
基于SG-I6000的信息系统运检自动化诊断实践