4. 总线基础(三):EtherNet/IP与CIP协议——隐式/显式报文、对象模型、EDS文件

好,咱们接着聊总线。前两章我们把EtherCAT和PROFINET的底裤都扒了一遍,今天轮到EtherNet/IP了。

说实话,EtherNet/IP这玩意儿在北美市场占有率极高,罗克韦尔(AB)的御用协议。我最早接触它是在一个汽车焊装线项目上,甲方指定要用ControlLogix配PowerFlex 755驱动器。那时候我刚从西门子阵营转过来,一看报文结构差点没晕过去——怎么还有隐式显式之分?后来啃了半个月CIP规范才搞明白。

今天我就把当年踩过的坑、总结的规律,一次性倒给你们。

4.1 从TCP/IP到CIP:EtherNet/IP的协议栈

先看一张图,这是EtherNet/IP的协议栈结构。我手绘的SVG,凑合看。

CIP应用层(对象模型、服务、行为) CIP传输层(隐式报文 / 显式报文) 封装层(Encapsulation) TCP(显式报文) UDP(隐式报文) IP + 以太网 实时I/O 参数配置

看到没?EtherNet/IP本质上就是在标准以太网上跑了CIP协议。CIP才是灵魂,以太网只是载体。我习惯把CIP比作一个「通用翻译器」——不管底层是DeviceNet、ControlNet还是EtherNet/IP,上层对象模型完全一样。

这意味着什么?你学会了CIP,就等于同时掌握了三种总线。嗯,这笔买卖划算。

4.2 隐式报文 vs 显式报文

这是EtherNet/IP最核心的概念,也是新人最容易懵的地方。

显式报文(Explicit Messaging):说白了就是「一问一答」。你发一个请求,设备回一个响应。典型场景:读参数、写配置、诊断。

  • 走TCP,可靠性高
  • 报文里包含完整路径和属性信息
  • 适合非实时数据交换

隐式报文(Implicit Messaging):这是「生产者-消费者」模式。数据周期性自动发送,不需要你每次去问。典型场景:实时I/O数据、伺服的位置/速度/转矩指令。

  • 走UDP,延迟低
  • 报文里只有数据本体,没有路径信息
  • 连接建立后自动运行

关键区别一句话总结:

显式报文 = 你打电话问「现在温度多少?」对方回答「25度」。

隐式报文 = 温度传感器每隔10ms自动广播「25度、25度、25度...」你只管听就行。

我在一个包装机械项目上遇到过这么个事:调试时伺服驱动器老是报连接超时。查了半天,发现是上位机把隐式报文的RPI(请求包间隔)设成了5ms,而驱动器只支持10ms。你想想看,你发得比人家能处理的还快,不丢包才怪。

我的经验:

隐式报文的RPI设置,一般伺服驱动器建议10-20ms,IO模块可以设到5ms。别盲目追求快,稳定第一。

4.3 CIP对象模型

CIP协议把所有设备都抽象成「对象」的集合。每个对象有属性、服务和行为。这跟面向对象编程的思路一模一样。

一个典型的伺服驱动器,至少包含以下对象:

对象类ID 对象名称 主要功能
0x01 Identity Object 设备标识、厂商、序列号
0x04 Assembly Object I/O数据打包/解包
0x06 Connection Manager 管理隐式/显式连接
0x28 Motor Data Object 电机参数(额定电流、转速等)
0x29 Control Supervisor Object 运行状态、故障码
0x2A AC Drive Object 变频器控制(启停、频率给定)

每个对象都有实例。比如你有4台伺服,那Motor Data Object就有4个实例,实例1对应1号轴,实例2对应2号轴,以此类推。

我刚开始学的时候,总觉得这玩意儿太抽象。后来自己写了个EDS解析工具,才真正理解——对象模型其实就是给设备画了一张「地图」,告诉你哪个地址存了什么数据。

4.4 EDS文件——设备的身份证

EDS(Electronic Data Sheet)文件,说白了就是设备的「简历」。里面记录了设备支持哪些对象、每个对象的属性范围、默认值、单位等等。

一个典型的EDS文件片段长这样:

[File]
DescText = "PowerFlex 755 Drive EDS"
CreateDate = 03-15-2023

[Device]
VendorID = 1
ProductType = 2
ProductCode = 755
MajorRevision = 10
MinorRevision = 5

[Connection Manager]
ConnectionType = 1  ; 隐式连接
TransportClass = 1
ProducedConnectionSize = 8
ConsumedConnectionSize = 8

[Assembly Object]
AssemblyCode = 100
AssemblyName = "Basic Speed Control"
InputSize = 4
OutputSize = 4

看到没?EDS文件就是一份纯文本的「配置说明书」。上位机组态软件(比如Studio 5000、Sysmac Studio)通过读取EDS文件,就知道怎么跟这个设备通信。

注意!

EDS文件版本必须跟设备固件版本匹配。我曾经因为用了旧版EDS文件配置新固件的驱动器,结果Assembly对象的数据映射全乱了,现场折腾了整整一天。

4.5 实战:如何用EDS文件配置伺服驱动器

假设你手头有一台安川Σ-7伺服,要通过EtherNet/IP跟欧姆龙NX系列PLC通信。步骤是这样的:

  1. 获取EDS文件:从安川官网下载对应固件版本的EDS文件
  2. 导入组态软件:在Sysmac Studio中导入EDS,软件自动识别设备类型和参数
  3. 配置连接参数:设置RPI(比如10ms)、输入输出数据大小
  4. 映射I/O数据:把伺服的状态字、位置反馈映射到PLC的内存地址
  5. 下载并测试:下载配置,观察连接状态指示灯

这里有个坑:不同品牌的EDS文件格式可能略有差异。罗克韦尔的EDS文件里会多一个[Param]段,用来定义参数对象。而欧姆龙的EDS文件则更简洁。我建议你拿到EDS文件后,先用文本编辑器打开看一眼,确认格式没问题再导入。

我的小技巧:

如果组态软件报错「EDS文件无效」,别急着骂厂家。先检查文件编码——必须是ANSI,不能是UTF-8。我遇到过三次这种问题,都是编码惹的祸。

4.6 隐式报文的连接建立过程

最后聊一下隐式连接是怎么建立的。这个过程叫「Forward Open」,说白了就是PLC跟驱动器先握个手,约定好通信参数。

步骤大致如下:

  1. PLC发送Forward Open请求,包含目标设备的IP地址、RPI、数据大小
  2. 驱动器收到后,检查资源是否充足(比如连接数是否已满)
  3. 如果OK,驱动器返回成功响应,并分配一个连接ID
  4. 双方开始按约定的RPI周期交换数据
  5. 如果一方超时(比如连续4个RPI没收到数据),连接自动断开

我在调试时习惯用Wireshark抓包看这个握手过程。正常情况应该是:

  • PLC → 驱动器:Forward Open Request(0x54)
  • 驱动器 → PLC:Forward Open Response(0x54)
  • 然后就开始看到周期性的UDP数据包了

如果只看到请求没看到响应,那八成是驱动器的连接数满了,或者EDS文件里的连接参数不匹配。

好了,EtherNet/IP的核心内容就这些。隐式显式报文、对象模型、EDS文件,这三样东西搞明白了,你就能在AB、欧姆龙、施耐德、安川之间自由穿梭。下一章我们聊点更刺激的——多品牌PLC之间的EtherNet/IP互通实战。


公众号:蓝海资料掘金营,微信deep3321