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的I/O连接并非“无连接”的UDP广播,而是通过Connection Manager建立的有状态连接,包含RPI(请求数据包间隔)和超时倍率等参数,超时后连接会断开并触发故障处理。

四、典型应用场景与开发启示

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服务码是否符合规范。

复盘要点:先明确设备扮演Scanner还是Adapter角色,再确定需要实现哪些CIP对象,最后验证显式与隐式两条通道是否都能正常工作。对象建模的完整性直接决定设备能否被主流PLC识别。
EtherNet/IP 协议栈与 CIP 对象关系 协议栈层次 CIP 应用层 对象 / 服务 / 连接管理 封装层 Encapsulation 命令 / 会话句柄 / 状态码 TCP 端口 44818 UDP 端口 2222 IP 层 寻址 / 路由 / 组播 以太网 MAC / PHY IEEE 802.3 标准以太网 物理介质 双绞线 / 光纤 / M12 CIP 对象模型(设备内部) Identity (0x01) 厂商 / 设备类型 / 序列号 Message Router (0x02) 显式请求分发 Assembly (0x04) 输入/输出数据聚合 Connection Manager (0x06) 连接建立 / 超时 TCP/IP Interface (0xF5) IP / 掩码 / 网关 Ethernet Link (0xF6) 速率 / 双工 / 统计 通信方式对照 ● 显式消息 → TCP 44818 → 配置/诊断/参数 ● 隐式消息 → UDP 2222 → 实时 I/O 数据 ● 封装层统一承载 CIP 消息与连接管理