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,凑合看。
看到没?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通信。步骤是这样的:
- 获取EDS文件:从安川官网下载对应固件版本的EDS文件
- 导入组态软件:在Sysmac Studio中导入EDS,软件自动识别设备类型和参数
- 配置连接参数:设置RPI(比如10ms)、输入输出数据大小
- 映射I/O数据:把伺服的状态字、位置反馈映射到PLC的内存地址
- 下载并测试:下载配置,观察连接状态指示灯
这里有个坑:不同品牌的EDS文件格式可能略有差异。罗克韦尔的EDS文件里会多一个[Param]段,用来定义参数对象。而欧姆龙的EDS文件则更简洁。我建议你拿到EDS文件后,先用文本编辑器打开看一眼,确认格式没问题再导入。
我的小技巧:
如果组态软件报错「EDS文件无效」,别急着骂厂家。先检查文件编码——必须是ANSI,不能是UTF-8。我遇到过三次这种问题,都是编码惹的祸。
4.6 隐式报文的连接建立过程
最后聊一下隐式连接是怎么建立的。这个过程叫「Forward Open」,说白了就是PLC跟驱动器先握个手,约定好通信参数。
步骤大致如下:
- PLC发送Forward Open请求,包含目标设备的IP地址、RPI、数据大小
- 驱动器收到后,检查资源是否充足(比如连接数是否已满)
- 如果OK,驱动器返回成功响应,并分配一个连接ID
- 双方开始按约定的RPI周期交换数据
- 如果一方超时(比如连续4个RPI没收到数据),连接自动断开
我在调试时习惯用Wireshark抓包看这个握手过程。正常情况应该是:
- PLC → 驱动器:Forward Open Request(0x54)
- 驱动器 → PLC:Forward Open Response(0x54)
- 然后就开始看到周期性的UDP数据包了
如果只看到请求没看到响应,那八成是驱动器的连接数满了,或者EDS文件里的连接参数不匹配。
好了,EtherNet/IP的核心内容就这些。隐式显式报文、对象模型、EDS文件,这三样东西搞明白了,你就能在AB、欧姆龙、施耐德、安川之间自由穿梭。下一章我们聊点更刺激的——多品牌PLC之间的EtherNet/IP互通实战。
公众号:蓝海资料掘金营,微信deep3321