2. 工业以太网与CIP基础
在工业自动化现场,以太网早已不只是办公网络的代名词。工业以太网在物理层、链路层和协议栈上做了大量增强,使其能够在振动、电磁干扰、宽温等恶劣条件下稳定运行,并满足实时控制对确定性的要求。理解工业以太网协议的分化、CIP协议族的层次结构,以及EtherNet/IP如何同时借助TCP/IP与UDP/IP承载不同语义的数据,是进行EtherNet/IP对象建模与设备开发的起点。
一、工业以太网协议对比:三条技术路线
工业以太网并非单一协议,而是围绕“实时性如何实现”分化出的多条技术路线。可以粗略分为三类:基于标准以太网+上层实时协议的方案、基于以太网修改的实时方案、以及基于时间同步的确定性方案。
- EtherNet/IP:基于标准IEEE 802.3以太网和TCP/IP、UDP/IP,应用层采用CIP。它不修改以太网硬件,通过UDP+IP组播实现I/O实时数据交换,通过TCP实现配置与诊断,是“标准以太网+应用层实时”的典型代表。
- PROFINET:分为RT(实时)和IRT(等时实时)。RT基于标准以太网,通过优先级标签优化;IRT则需要专用硬件支持时间片调度,实现微秒级抖动。
- EtherCAT:采用“飞读飞写”的集总帧机制,从站在数据帧经过时即时处理,无需存储转发,因此循环周期极短,但需要专用从站控制器芯片。
- POWERLINK:采用时间槽轮询机制,主站统一调度,从站按分配时隙发送,实时性高且基于标准以太网。
从设备开发角度看,EtherNet/IP的最大优势是“无需专用ASIC”,普通ARM Cortex-A/M系列处理器配合标准以太网MAC即可实现,开发门槛和物料成本相对较低。代价是实时性依赖网络规划与交换机QoS配置,通常循环周期在1~10 ms量级,适合大多数离散制造与过程控制场景。
二、CIP协议族:统一的应用层语义
CIP(Common Industrial Protocol,通用工业协议)是EtherNet/IP、DeviceNet、ControlNet共享的应用层协议。它定义了对象模型、服务、连接管理和数据封装方式,使不同底层网络上的设备可以用同一套语义进行访问。
CIP的核心抽象是“对象”。每个设备被建模为一组对象,对象包含属性(数据)、服务(操作)和实例。常见的对象包括:
- Identity对象(0x01):设备身份信息,如厂商ID、设备类型、产品代码、序列号、设备名称。
- Message Router对象(0x02):消息路由,将显式请求分发到目标对象。
- Assembly对象(0x04):输入/输出数据的聚合容器,是I/O连接的数据载体。
- Connection Manager对象(0x06):管理连接建立、关闭与超时。
- TCP/IP Interface对象(0xF5):网络配置,如IP地址、子网掩码、网关。
- Ethernet Link对象(0xF6):链路层统计与速率、双工状态。
CIP提供两类通信方式:显式消息(Explicit Messaging)用于配置、诊断、参数读写,请求-应答模式,通常走TCP;隐式消息(Implicit Messaging)用于实时I/O数据交换,基于连接,通常走UDP。这一区分是理解EtherNet/IP协议栈的关键。
三、EtherNet/IP与TCP/IP、UDP/IP的关系
EtherNet/IP的协议栈可以自下而上描述为:以太网物理层与数据链路层 → IP层 → TCP或UDP → 封装层(Encapsulation) → CIP应用层。其中封装层是EtherNet/IP特有的,它在TCP/UDP报文与CIP消息之间提供统一的头部,包含命令、长度、会话句柄、状态码等字段。
具体分工如下:
| 传输层 | 承载消息类型 | 典型用途 | 端口 |
|---|---|---|---|
| TCP | 显式消息 | 设备配置、参数读写、诊断、对象浏览 | 44818 |
| UDP | 隐式消息(I/O连接) | 实时输入/输出数据交换、组播 | 2222 |
| UDP | 显式消息(可选) | 低开销的请求-应答 | 44818 |
为什么I/O数据走UDP而不是TCP?因为TCP的重传、拥塞控制和按序交付机制会引入不确定延迟。工业I/O数据具有“最新值优先”的特点,旧数据重传没有意义,因此UDP的“尽力而为”反而更合适。而配置和诊断数据要求可靠、有序,TCP正好满足。
四、典型应用场景与开发启示
EtherNet/IP广泛应用于汽车制造、食品饮料、包装、物料搬运、过程控制等领域。典型场景包括:PLC与远程I/O站之间的循环数据交换、变频器与伺服驱动器的速度/位置指令下发、机器人控制器的状态监控、以及SCADA系统通过显式消息采集设备参数。
以一个远程I/O站为例,其数据流如下:
PLC(Scanner) 远程I/O(Adapter)
| |
|--- TCP 44818 显式消息:建立连接 ---|
|--- Forward Open 请求(含RPI) ---->|
|<-- Forward Open 响应(连接ID) ----|
| |
|=== UDP 2222 隐式消息:I/O数据 ===>|
|<== UDP 2222 隐式消息:I/O数据 ====|
| |
|--- TCP 44818 显式消息:诊断 -------|
|--- Forward Close 关闭连接 -------->|
在设备开发中,常见误区包括:把I/O数据错误地放在TCP上传输,导致实时性不达标;忽略Assembly对象的实例编号与数据长度对齐,造成数据错位;未正确实现Connection Manager的超时逻辑,导致网络闪断后无法恢复。建议在开发早期就用抓包工具确认封装层头部字段与CIP服务码是否符合规范。