logo资料库

Linux下EtherNet IP协议的实现.pdf

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
EtherNet LinuxLinuxLinuxLinux 下 EtherNet EtherNet IPIPIPIP 协议的实现 EtherNet 摘要: Linux 作为一款稳定的、源代码开放的、免费的类 Unix 操作系统,已广 泛应用到工业控制领域。与Win-dows 操作系统相比,Linux 操作系统具有很多明 显的优势:性能更加稳定、系统更加安全;采用模块化的内核体系,具有可定制性、 可配置性,可方便的裁剪;源代码完全开放,有着更成熟、更友好的编程接口;成本 低廉。由于 Linux 内核的极大的可裁剪性、可配置性,在嵌入式系统中也取得了 越来越广泛的应用,提高了系统的可靠性并降低了系统的成本。文中给出了在 Linux 下 EtherNet/IP 协议的实现方法。本程序也可方便的移植到嵌入式系统中, 作为 EtherNet/IP 网络上的一个智能节点。 引 言 Linux 作为一款稳定的、源代码开放的、免费的类 Unix 操作系统,已广泛应 用到工业控制领域。与Win-dows 操作系统相比,Linux 操作系统具有很多明显的 优势:性能更加稳定、系统更加安全;采用模块化的内核体系,具有可定制性、可配 置性,可方便的裁剪;源代码完全开放,有着更成熟、更友好的编程接口;成本低廉。 由于 Linux 内核的极大的可裁剪性、可配置性,在嵌入式系统中也取得了越来越 广泛的应用,提高了系统的可靠性并降低了系统的成本。文中给出了在 Linux 下 EtherNet/IP 协议的实现方法。本程序也可方便的移植到嵌入式系统中,作为 EtherNet/IP 网络上的一个智能节点。 2 Linux 下 Socket 编程 套接口 Socket 是开发 TCP/IP 网络应用程序的 API,它定义了很多函数和例 程,提供了访问 TCP、UDP 等协议的接口。应用程序只需通过这些接口就可通过 TCP/IP 协议发送接收数据,而无需了解其协议细节。套接口是面向客户端/服务器 (C/S)模型设计的。为了实现通过 TCP 或 UDP 协议传输数据,需要在客户端和服 务器端执行不同的函数调用。 图 1 为采用 TCP 协议通讯时的函数调用模型,数据通讯前要先建立连接。服 务器端要先用 Socket()函数调用创建一个 TCP 套接字,函数 Bind()将本地地址接 字地址绑定在一起,并可指定服务器的端口号和接受的客户端的 IP 地址范围。函 数 Listen() 将套接字转化为倾听套接字。Accept()返回一个新的套接字与客户端 通信。当客户端通过 Connect() 和服务器建立连接后就可以通过 Read()和 Write() 传送数据。通讯完毕通过 Close()关闭套接字。 EtherNet/IP 协议采用 TCP 传送显性报文。图 2 为采用 UDP 协议通讯时的 函数调用模型,此时不需建立连接。对方地址通过在 Sendto( )和 Recvfrom( )函 数中指定。EtherNet/IP 协议采用 UDP 传送隐性报文。
图 1 TCP 协议的 Socket 编程模型 图 2 UDP 协议的 Socket 编程模型 3 EtherNet/IP 协议体系结构 EtherNet/IP 协议的体系结构如图 3 所示。应用层采用 CIP 协议,其底层完全 采用了现有以太网的传输层、网络层、数据链路层、物理层,未作任何修改。因 此,应用 Linux 的 Socket 编程接口,实现 EtherNet/IP 协议主要就是实现应用层的 CIP 协 议 。EtherNet/IP 协议不仅支持点对点的通讯模式,还支持生产者/消费者通 讯模式,这种一对一个或多个的通讯模式是通过 IP 多播的技术实现的。值得提出 的是, EtherNet/IP 、ControlNet、De-viceNet 网络的应用层都是 CIP 协议,只是 它们基于的物理层、数据链路层不同,实现了一种网络的 CIP 协议,略加修改就可 以应用到其余两种网络上。这使得 CIP 协议有着更好的通用性,也使得 CIP 设备 之间有更好的交互性。
4 CIP 协议模型 图 3 EtherNet/IP 协议体系结构图 CIP 协议提供了基于连接的数据通讯机制。CIP 连接可以动态的建立。CIP 连接可分为 I/O 连接(隐性报文连接)和显性报文连接。I/O 连接为一个生产者和一 个或多个消费者提供了专用的通讯路径。显性报文连接提供了典型的面向请求/ 应答的网络通讯,一般用来上载下载程序、设备信息、组态信息等。CIP 协议的 I/O 连接模型如图 4 所示。CIP 协议的显性报文连接模型如图 5 所示。数据通讯都要 通过专门的连接对象进行。 图 4 CIP 协议 I/O 连接模型
图 5 CIP 协议显性报文连接模型 CIP 协议用面向对象语言描述。CIP 协议对象模型如图 6 所示。未连接报文 管理器(UCMM)的主要作用是建立 I/O 连接和显性连接。当一设备要与网络上另 一设备建立连接时,先给对方设备的 UCMM 发送连接请求,对方设备若答应请求 则创建、初始化连接对象,并向请求设备的 UCMM 返回响应信息。然后原来发出 请求的设备创建、初始化自己的连接对象。连接完成之后,就可以通过连接对象 传送显性报 I/O 报文。报文路由的主要作用是对报文打包、解包,将连接对象接 收过来的报文解包,分发给各个对象。然后将各对象返回的数据打包,交给连接对 象发送。 CIP 设备中的对象分为 3 类:通用对象、应用对象和网络特定对象。通用对 象有连接对象、报文路由对象、身份对象等。身份对象中存有设备型号、名称等 信息。网络特定对象有 TCP/IP 接口对象、ControlNet 接口对象和 DeviceNet 接 口对象,分别存有和 EtherNet/IP 、ControlNet 、DeviceNet 特定网络相关的信息。 应用对象是和具体应用、具体设备相关的对象,比如有 AC/DC 变频器,离 散 量 、 模拟量 I/O 等。 图 6 CIP 协议抽象对象模型 以离散量 I/O 的设备为例,需要实现的类有:身份类、报文路由类、连接类、 连接管理类、TCP/IP 接口类、Ethernet 连接类、离散量 I/O 点类、离散量输入 组/输出组类、汇编类。此外还要实现未连接报文管理器 UCMM,虽然 UCMM 不 是一个类,但是它是每一个设备所必需的。
5 EtherNet/IP 协议数据封装格式 图 7 为 EtherNet/IP 协议的报文封装示意图。CIP 协议报文经封装之后,在通 讯时又逐层被封装上了 TCP、IP、Ethernet 报头。 CIP 报文封装的格式如表 1 所示。下面以向对方的 UCMM 发送建立显性连 图 7 EtherNet/IP 协议的报文封装 接的请求报文为例说明 CIP 报文封装。其 16 进制表示的报文为: 6F003E00000002200000 00000000000000000000 00000000000000000004 020000000000B2002E00 5402200624010AF00000 000000000180ABCD0100 98765432070000004082 1F00FB4240821F00FB42 A30220022401 表 1 CIP 报文封装格式 分析报文时需要注意网络字节顺序和本机字节。网络字节顺序是从高位到低 位,本机字节顺序是从低位到高位。前两字节为命令字 Command,注意高位低位 存放顺序,0x006F 为发送 RRData 命令。数据长度为 0x3E=62 字节,CIP 报文总 长 度 为 62+24( 报 文 头 长 度 )=86 字 节 。 Session ID="0x20020000" 。 Status=0x00000000。Sender Context="0x00000000000000000"。 Options=0x00000000 。 接 下 来 为 RRData 命 令 相 关 数 据 。 Interface Handle="0x00000000",Time out 项为 0x0400。Item Count="0x0002",表明下面 有两项:地址项和数据项。地址项 Addr Item ID="0x0000",Addr Len="0x0000"。 数据项 Data Item="0x00B2",Data Len="0x2E"=46。接下来为 CIP Data 的内容。 将 CIP 报文正确封装好,通过 Socket 编程接口发送到网络上的其他节点,就可以
实现与网络上其他节点的通讯。具体命令、类、属性、行为、服务的 ID 请参照 EtherNet/IP Specification。 6 结束语 本文通过分析 EtherNet/IP 协议给出了 EtherNet/ IP 协议在 Linux 上的实现 方法。虽然目前工业以太网所占工业现场控制的份额较小,但是由于以太网已经 取得的任何其他现场总线都不可比拟的商业应用,以及以太网技术的日益成熟、 稳定、高速,工业以太网在未来的现场总线领域也一定会有所作为甚至“一网到 底”。
分享到:
收藏