EtherNet/IP基础:CIP协议栈、TCP/UDP端口、显式/隐式消息、连接类型(Class 1/Class 3)概述
EtherNet/IP(Ethernet Industrial Protocol)是由ODVA(Open DeviceNet Vendors Association)维护的工业以太网协议,其核心并非重新定义一套全新的通信机制,而是将成熟的CIP(Common Industrial Protocol,通用工业协议)完整地封装于标准以太网帧与TCP/IP协议栈之上。理解EtherNet/IP,首先需要建立“CIP是灵魂,以太网是载体”的认知。本章将围绕CIP协议栈的分层结构、TCP/UDP端口分配、显式与隐式消息的本质区别,以及Class 1/Class 3连接模型展开,帮助学员在后续对象建模与接口开发前,打下坚实的协议基础。
2.1 CIP协议栈:从对象模型到以太网帧的封装路径
CIP协议栈的设计哲学是“一次建模,多网复用”。它并不直接绑定到某种物理层,而是通过抽象层将应用对象与传输机制解耦。在EtherNet/IP中,CIP协议栈自上而下分为四层:应用层(CIP Objects)、传输层(CIP Messaging)、网络层(CIP Connection)和数据链路层(EtherNet/IP Adaptation)。每一层都有明确的职责边界,理解这些边界是进行对象建模的前提。
核心原理:CIP对象模型与消息路由
CIP应用层以对象(Object)为基本单元,每个对象包含属性(Attribute)、服务(Service)和行为(Behavior)。例如,一个数字量输入模块可建模为“离散输入点对象”(Discrete Input Point Object),其属性包括“值”(Value)、“状态”(Status)等,服务包括“读取”(Get)、“写入”(Set)。这些对象通过CIP消息路由器(Message Router)进行寻址和调用。消息路由器是CIP协议栈的中枢,它接收来自传输层的请求,根据对象地址(Class ID、Instance ID、Attribute ID)路由到对应的对象实例。
0x20 0x04 0x24 0x01 0x30 0x03,其中0x20 0x04表示Class 4(Assembly对象),0x24 0x01表示Instance 1,0x30 0x03表示Attribute 3。这种路径编码方式在后续开发中会频繁使用。
判断方法:如何区分CIP协议栈与普通TCP/IP协议栈
在实际网络抓包中,可以通过以下特征快速识别CIP协议栈:
- 以太网类型字段:标准EtherNet/IP帧的以太网类型为
0x0800(IPv4),但CIP数据包在IP负载中带有特定的协议标识。 - 端口号:TCP 44818(显式消息)和UDP 2222/2223(隐式消息)是CIP的专属端口。
- 负载特征:CIP数据包通常以
0x6F(CIP命令字)或0x70(CIP响应字)开头,后续跟随命令码和路径信息。
案例拆解:一个简单的“读取设备序列号”操作
假设上位机需要读取某EtherNet/IP从站的序列号(Serial Number),该序列号存储在Identity对象(Class 0x01)的Attribute 3中。操作流程如下:
- 上位机建立到从站TCP 44818端口的连接。
- 发送CIP“Get Attribute Single”请求,路径为
0x20 0x01 0x24 0x01 0x30 0x03。 - 从站消息路由器解析路径,定位到Identity对象实例1的属性3。
- 从站返回响应,包含4字节的序列号数据。
这个过程中,TCP连接保证了请求的可靠传输,而CIP协议栈则负责对象寻址和数据封装。如果使用Wireshark抓包,可以看到TCP三次握手后,紧接着是CIP请求/响应报文。
2.2 TCP/UDP端口分配:显式与隐式消息的物理通道
EtherNet/IP对TCP和UDP端口的使用有严格约定,这是协议兼容性的基础。端口分配不仅决定了消息的传输方式,还直接影响实时性和可靠性。
核心原理:端口与消息类型的对应关系
| 端口号 | 传输层协议 | 消息类型 | 典型用途 | 实时性 |
|---|---|---|---|---|
| 44818 | TCP | 显式消息 | 参数配置、诊断、连接管理 | 低(毫秒级) |
| 2222 | UDP | 隐式消息(I/O) | 实时过程数据交换 | 高(微秒级) |
| 2223 | UDP | 隐式消息(I/O) | 多播或点对点I/O | 高(微秒级) |
TCP端口44818用于承载CIP显式消息,包括UCMM(Unconnected Message Manager)和Class 3连接。UCMM用于无连接的消息交换,例如设备发现(List Identity)、非连接请求等。Class 3连接则是在建立连接后的周期性显式消息传输。UDP端口2222和2223用于承载CIP隐式消息,即I/O数据。隐式消息的特点是数据格式固定、周期发送、不要求确认,因此使用UDP以获得最低延迟。
操作流程:如何配置端口与防火墙规则
在工业现场部署EtherNet/IP网络时,需确保网络设备(如交换机、防火墙)放行以下端口:
- TCP 44818:用于PLC编程软件(如Rockwell Studio 5000)与控制器之间的通信。
- UDP 2222:用于控制器与远程I/O模块之间的实时数据交换。
- UDP 2223:用于支持多播的I/O通信,例如一个控制器向多个从站广播数据。
- ICMP(Ping):用于网络连通性测试,但需注意某些安全策略会禁用ICMP。
案例拆解:排查“PLC无法连接远程I/O”问题
某产线上,PLC(CompactLogix)无法与远程I/O模块(1734-AENT)建立连接。初步检查发现,PLC与I/O模块的IP地址在同一子网,且物理链路正常。使用Wireshark抓包分析:
- 现象:PLC持续向I/O模块发送TCP SYN包(端口44818),但未收到SYN-ACK响应。
- 分析:TCP连接无法建立,说明I/O模块的44818端口未监听或防火墙拦截。
- 进一步排查:检查I/O模块的Web配置页面,发现“EtherNet/IP”功能被意外禁用。
- 解决:重新启用EtherNet/IP功能并重启模块,连接恢复正常。
此案例说明,端口可达性是EtherNet/IP通信的基础,任何一层(物理、网络、传输)的故障都会导致连接失败。
2.3 显式消息与隐式消息:两种截然不同的通信范式
显式消息和隐式消息是CIP协议中最核心的区分。它们不仅传输方式不同,更代表了两种不同的设计哲学:显式消息面向“操作”,隐式消息面向“数据流”。
核心原理:消息结构与应用场景对比
| 对比维度 | 显式消息(Explicit) | 隐式消息(Implicit) |
|---|---|---|
| 传输层 | TCP(可靠) | UDP(不可靠但快速) |
| 数据格式 | 包含完整CIP路径和命令 | 仅包含I/O数据(无路径) |
| 连接类型 | Class 3(有连接)或UCMM(无连接) | Class 1(有连接) |
| 典型应用 | 参数读写、诊断、程序上传/下载 | 实时I/O数据、运动控制、高速反馈 |
| 数据长度 | 可变(通常小于500字节) | 固定(由连接配置决定) |
| 实时性 | 低(毫秒级) | 高(微秒级) |
显式消息的典型特征是“请求-响应”模式。每次通信都包含完整的CIP报文头,包括服务代码、路径、数据等。这种消息适合不频繁但需要可靠确认的操作。隐式消息则不同,它在连接建立时通过“Forward Open”服务协商好数据格式(如输入数据长度、输出数据长度、触发方式),之后便按照固定的周期(RPI,Requested Packet Interval)自动交换数据,不再包含路径信息,因此开销极小。
判断方法:如何选择显式或隐式消息
在实际工程中,选择哪种消息类型取决于应用需求:
- 需要确认的操作:如修改设备参数、触发复位、上传配方,应使用显式消息。
- 周期性数据交换:如模拟量输入、数字量输出、编码器反馈,应使用隐式消息。
- 事件触发:如报警通知,可使用显式消息(UCMM)或隐式消息(通过Change of State触发)。
案例拆解:运动控制中的消息选择
在一个伺服驱动系统中,PLC需要同时实现位置控制(高速周期数据)和参数整定(低速配置数据)。设计如下:
- 位置控制:使用Class 1隐式连接,RPI设为2ms,通过UDP 2222端口交换目标位置、实际位置、速度等数据。
- 参数整定:使用Class 3显式连接,通过TCP 44818端口读写伺服驱动器的PID参数。
这种混合设计既保证了运动控制的实时性,又满足了参数配置的可靠性要求。如果错误地将位置控制放在显式消息中,TCP的重传机制会导致控制周期抖动,影响加工精度。
2.4 连接类型:Class 1与Class 3的深入解析
CIP连接(Connection)是通信双方预先建立的逻辑链路,它定义了数据传输的规则。CIP定义了多种连接类型,其中Class 1和Class 3是最常用的两种。理解它们的区别,是配置EtherNet/IP网络的关键。
核心原理:连接建立与生命周期
无论是Class 1还是Class 3,连接建立都通过“Forward Open”服务完成。该服务在TCP 44818端口上传输,包含以下关键参数:
- 连接路径:指定通信双方的对象(如目标设备的Assembly对象)。
- 传输类型:Class 1(UDP)或Class 3(TCP)。
- RPI:数据包请求间隔,即数据刷新的周期。
- 传输格式:数据长度、字节序等。
- 超时参数:连接超时时间(Timeout Multiplier)。
连接建立后,Class 1连接通过UDP周期性地发送I/O数据,而Class 3连接则通过TCP进行请求/响应交互。连接关闭通过“Forward Close”服务完成。
操作流程:配置Class 1连接的步骤
- 在PLC编程软件中,添加EtherNet/IP从站设备。
- 配置从站的IP地址、子网掩码、网关。
- 在“连接”选项卡中,新建一个Class 1连接。
- 设置RPI(如10ms)、输入大小(如8字节)、输出大小(如8字节)。
- 将连接映射到PLC的输入/输出标签。
- 下载配置并运行,观察连接状态(如“Run”模式)。
案例拆解:多从站系统的连接规划
一个包装机械控制系统包含1个PLC、3个远程I/O模块和2个伺服驱动器。连接规划如下:
| 设备 | 连接类型 | RPI | 数据大小(输入/输出) | 端口 |
|---|---|---|---|---|
| 远程I/O 1 | Class 1 | 10ms | 16 / 16 字节 | UDP 2222 |
| 远程I/O 2 | Class 1 | 10ms | 32 / 32 字节 | UDP 2222 |
| 远程I/O 3 | Class 1 | 20ms | 8 / 8 字节 | UDP 2222 |
| 伺服驱动器 1 | Class 1 | 2ms | 64 / 64 字节 | UDP 2222 |
| 伺服驱动器 2 | Class 1 | 2ms | 64 / 64 字节 | UDP 2222 |
| 所有设备 | Class 3 | 按需 | 可变 | TCP 44818 |
该规划中,伺服驱动器使用较小的RPI(2ms)以满足运动控制需求,而远程I/O使用较大的RPI(10-20ms)以降低网络负载。所有设备的参数配置和诊断通过Class 3连接完成。这种分层设计是工业网络规划的典型实践。
2.5 总结与工程实践要点
本章从CIP协议栈、端口分配、消息类型和连接类型四个维度,构建了EtherNet/IP的基础知识框架。在实际项目中,建议遵循以下原则:
- 先规划,后实施:在部署EtherNet/IP网络前,明确哪些数据需要实时交换(使用Class 1),哪些操作需要可靠确认(使用Class 3)。
- 监控网络负载:使用Wireshark或EtherNet/IP诊断工具,定期检查UDP端口2222的流量,确保RPI设置合理。
- 注意多播管理:如果使用UDP 2223端口进行多播,需在交换机上启用IGMP Snooping,避免广播风暴。
- 备份连接配置:在PLC程序中备份所有Class 1/Class 3连接的参数,便于故障恢复。
掌握这些基础概念后,下一阶段将进入CIP对象建模的具体实践,包括Assembly对象、Connection Manager对象的开发与调试。