顾德英 何风行
(东北大学秦皇岛分校自动化系 秦皇岛 066004)
摘要 分析了EtherN et/IP协议、CIP协议对象模型,根据实际数据分析了报文封装,给出了L inux下So cket编程方法和EtherN et/IP协议的实现方法。
关键词 Ether Net/IP CI P T CP/IP 套接口编程
Realization of EtherNet/IP Protocol on Linux
Gu Deying He Fenghang
(A utomation D ep ar tment,N or theas ter n U niver sity at Qinhuangdao,Q inhuangdao066004,China)
Abstract Et herNet/IP prot ocol and CIP prot ocol object model are analyzed.T he message encapsulat ion is also analyzed by t he data capt ured.T he met hod of Socket programming on L inux and met hod of realization of Ether-Net/IP prot ocol are given.
Key words Et herN et/IP CIP T CP/IP Socket programming
1 引 言
Linux作为一款稳定的、源代码开放的、免费的类U nix操作系统,已广泛应用到工业控制领域。与Win-dows操作系统相比,Linux操作系统具有很多明显的优势:性能更加稳定、系统更加安全;采用模块化的内核体系,具有可定制性、可配置性,可方便的裁剪;源代码完全开放,有着更成熟、更友好的编程接口;成本低廉。由于L inux内核的极大的可裁剪性、可配置性,在嵌入式系统中也取得了越来越广泛的应用,提高了系统的可靠性并降低了系统的成本。
文中给出了在Linux下Et herNet/IP协议的实现方法。本程序也可方便的移植到嵌入式系统中,作为Et herNet/IP网络上的一个智能节点。
2 Linux下Socket编程
套接口Socket是开发T CP/IP网络应用程序的API,它定义了很多函数和例程,提供了访问T CP、U
DP等协议的接口。应用程序只需通过这些接口就可通过T CP/IP协议发送接收数据,而无需了解其协议细节。套接口是面向客户端/服务器(C/S)模型设计的。为了实现通过T CP或U DP协议传输数据,需要在客户端和服务器端执行不同的函数调用。
图1 T CP协议的Socket编程模型
图1为采用T CP协议通讯时的函数调用模型,数据通讯前要先建立连接。服务器端要先用Socket()函数调用创建一个T CP套接字,函数Bind()将本地地址
第26卷第8期增刊 仪 器 仪 表 学 报 2005年8月
和套接字地址绑定在一起,并可指定服务器的端口号和接受的客户端的IP 地址范围。函数L isten ()将套接字转化为倾听套接字。Accept ()返回一个新的套接字与客户端通信。当客户端通过Connect ()和服务器建立连接后就可以通过Read()和Write()传送数据。通讯完毕通过Close()关闭套接字。EtherN et /IP 协议采用T CP 传送显性报文。
图2为采用U DP 协议通讯时的函数调用模型,此时不需建立连接。对方地址通过在Sendt o ()和Recvf rom ()函数中指定。EtherN et /IP 协议采用U DP
传送隐性报文。
图2 U D P 协议的Socket 编程模型
3 EtherNet /IP 协议体系结构
Et herNet /IP 协议的体系结构如图3所示。应用层采用CIP 协议,其底层完全采用了现有以太网的传输层、网络层、数据链路层、物理层,未作任何修改。因此,应用Linux 的Socket 编程接口,实现Et herNet/IP 协议主要就是实现应用层的CIP 协议。
Et herNet /IP 协议不仅支持点对点的通讯模式,还支持生产者/消费者通讯模式,这种一对一个或多个的通讯模式是通过IP 多播的技术实现的。
值得提出的是,Et herNet /IP 、ControlNet 、De-viceNet 网络的应用层都是CIP 协议,只是它们基于的物理层、数据链路层不同,实现了一种网络的CIP 协议,略加修改就可以应用到其余两种网络上。这使得CIP 协议有着更好的通用性,也使得CIP 设备之间有更好的交互性。
4 CIP 协议模型
CIP 协议提供了基于连接的数据通讯机制。CIP 连接可以动态的建立。
CIP 连接可分为I /O 连接(隐性报文连接)和显性报文连接。I /O 连接为一个生产者和
一个或多个消费者提供了专用的通讯路径。显性报文连接提供了典型的面向请求/应答的网络通讯,一般用来上载下载程序、设备信息、组态信息等。
图3 EtherN et/IP 协议体系结构
CIP 协议的I /O 连接模型如图4所示。CIP 协议的显性报文连接模型如图5所示。数据通讯都要通过
专门的连接对象进行。
图4 CIP 协议I /O 连接模型
图5 CI P 协议显性报文连接模型CIP 协议用面向对象语言描述。CIP 协议对象模型如图6所示。未连接报文管理器(U CM M )的主要作用是建立I/O 连接和显性连接。当一设备要与网络上另一设备建立连接时,先给对方设备的U CM M 发送连接请求,对方设备若答应请求则创建、初始化连接对象,并向请求设备的U CM M 返回响应信息。然后原来发出请求的设备创建、初始化自己的连接对象。
连接完成之后,就可以通过连接对象传送显性报
442
仪 器 仪 表 学 报 第26卷
文和I/O 报文。报文路由的主要作用是对报文打包、解包,将连接对象接收过来的报文解包,分发给各个对象。然后将各对象返回的数据打包,交给连接对象发送。
CIP 设备中的对象分为3类:通用对象、应用对象和网络特定对象。通用对象有连接对象、报文路由对象、身份对象等。身份对象中存有设备型号、名称等信息。网络特定对象有T CP/IP 接口对象、Cont rolNet 接口对象和DeviceNet 接口对象,分别存有和EtherN et /IP 、Cont rolN et 、DeviceN et 特定网络相关的信息。应用对象是和具体应用、具体设备相关的对象,比如有AC /DC 变频器,离散量、
模拟量I /O
等。图6 CIP 协议抽象对象模型
以离散量I/O 的设备为例,需要实现的类有:身份类、报文路由类、连接类、连接管理类、T CP/IP 接口类、Et hernet 连接类、离散量I/O 点类、离散量输入组/输出组类、汇编类。此外还要实现未连接报文管理器U CM M ,虽然U CM M 不是一个类,但是它是每一个设备所必需的。
5 EtherNet /IP 协议数据封装格式
图7为EtherN et /IP 协议的报文封装示意图。CIP
协议报文经封装之后,在通讯时又逐层被封装上了
T CP 、IP 、Et hernet 报头。
图7 Ether Net /IP 协议的报文封装
CIP 报文封装的格式如表1所示。下面以向对方的U CM M 发送建立显性连接的请求报文为例说明CIP 报文封装。其16进制表示的报文为:6F003E00000002200000 0000000000000000000000000000000000000004 020*********B 2002E 005402200624010A F00000 000000000180ABCD010098765432070000004082 1F 00FB 4240821F 00FB 42A 30220022401
表1 CIP 报文封装格式
字段数据类型意义报文头
(24字节)
Command UINT 命令字Length
UINT 数据长度Session handle
UDINT S es sion ID Status UDINT 状态代码S end er Context
8字节数组发送方上下文Options
UDINT 选项标志数据
En cap sulated
Data
0~65511字节长数组
特定命令相关的数据
分析报文时需要注意网络字节顺序和本机字节顺序。网络字节顺序是从高位到低位,本机字节顺序是从低位到高位。
前两字节为命令字Command,注意高位低位存放顺序,0x006F 为发送RRData 命令。数据长度为0x 3E =62字节,CIP 报文总长度为62+24(报文头长度)=86字节。Session ID =0x 20020000。St at us =0x 00000000。Sender Context =0x 00000000000000000。Opt ions=0x00000000。接下来为RRDat a 命令相关数
据。Int erf ace Handle =0x 00000000,T ime out 项为0x 0400。It em Count =0x 0002,表明下面有两项:地址项和数据项。地址项A ddr It em ID=0x 0000,A ddr Len =0x 0000。数据项Data Item =0x 00B 2,Dat a Len =0x2E=46。接下来为CIP Dat a 的内容。
将CIP 报文正确封装好,通过Socket 编程接口发送到网络上的其他节点,就可以实现与网络上其他节点的通讯。具体命令、类、属性、行为、服务的ID 请参照Et herNet /IP Specification 。
6 结束语
本文通过分析EtherN et /IP 协议给出了Ether-
443
第8期增刊
L inux 下Ether N et /IP 协议的实现
参考文献
1 张斌,高波,等.Linux下网络编程[M].北京:清华大学
出版社,2000.32~42,78~80.
2 O DV A/CI.Ether N et/I P specificatio ns[M],Release
1.0.2001.
3 吴爱国,李长滨.工业以太网协议Ether Net/IP.计算机应用[J].2003,23(11):9~11.
(上接第440页)
据发送给备用控制器,以实现主备控制器数据同步。
(3)从处理器在主处理器处于硬件故障、主要错误或编程状态时,获得在ControlN et网络上发送控制信息到Pow erFlex70的权力,同时主控制器失去在Con-trolN et网络上发送控制信息到Pow erFlex70变频器的权力。
因此,基于Cont rolNet网络的Cont rolLogix处理器冗余热备系统中的RSL ogix5000工程要完成的任务包括:对主处理器按控制系统的设计及要求进行通道设置、标签的建立及梯形图的编写,梯形图中包括用于过程控制,用于系统联锁保护和用于系统CPU热备的梯形图等几大部分。其中,用于CPU冗余备份程序的流程图如图4所示。
当主处理器进入非正常工作状态时,整个系统的输出模块的控制权交给了从处理器,由于输出模块在切换中无论是模拟量还是开关量都必须保持不变。所以,从处理器在主处理器工作时,处理器内部储存的输出模块的值就必须实时地与主处理器中的相应的输出值保持一致,实现无扰切换。而完成这项功能,就要求在两个Cont rolLogix处理器中,用梯形图程序来实时进行检测出模块值的传递,当主处理器对输出有改变时,同时把相应的变化值传递给从处理器。这样在切换时才会对连续的生产不产生任何的影响。
4 结 论
设计了基于Cont rolNet网络控制的Cont rolL ogix 冗余热备系统。系统通过切换控制权来切换对网络上的变频器Pow erFlex70的控制;通过风力负载模型的浮球位置的变化,来直观的反映切换效果。此CPU冗余热备系统的切换时间小于0.5s,切换过程中的扰动小于5%。设计方案可应用于基于不同网络控制的可编程控制器系统。在工业控制中应用该方案,不仅可以降低系统硬件成本,而且可以有效地提高控制系统的可靠性,降低由于控制器故障带来的损失和危害。
参考文献
1 So ftw are output sw itching.Rockw ell Auto mation., 1999:4~25.
2 姜坚华.双机热备系统的技术研究和具体实现.微型电脑应用,2004,20(3).
3 冯立.冗余控制系统的原理机性能优化.仪器仪表学报, 2003,24(4).
444仪 器 仪 表 学 报 第26卷