4、主流通信协议(下):Modbus TCP/RTU协议详解、EtherNet/IP协议详解、CC-Link IE Field协议详解

好,咱们接着聊。上一节我们把Profinet和EtherCAT这两个“快枪手”聊透了。这一节,我带你看看另外三个在工业现场同样举足轻重的协议:Modbus、EtherNet/IP和CC-Link IE Field。

这三个家伙,性格完全不同。Modbus是老黄牛,皮实耐用;EtherNet/IP是美国人搞的,跟CIP协议深度绑定;CC-Link IE Field则是日本三菱的看家本领,在亚洲市场占有率极高。你想想看,一个合格的自动化工程师,这三种协议至少得懂两种,不然出去选型很容易被供应商牵着鼻子走。

4.1 Modbus TCP/RTU协议详解

Modbus,说实话,是我入行时接触的第一个现场总线协议。那时候师傅扔给我一本英文手册,说:“小子,把这个啃下来,以后吃饭的本事就有了。” 现在看来,这话一点不假。

Modbus本质上是一个主从(Master-Slave)架构的协议。一个主站,多个从站。主站发命令,从站响应。就这么简单。它有两种最常见的物理层实现:

  • Modbus RTU:走RS-485/RS-232串口。数据是二进制格式,效率高。我习惯用9600或19200波特率,距离能到1200米(加中继器还能更远)。
  • Modbus TCP:走以太网。其实就是把Modbus帧封装在TCP/IP包里,端口号是502。说白了,就是把串口那套逻辑搬到了网上。

我个人建议,如果你现场设备距离近(几十米内),且对实时性要求不高,优先选Modbus TCP。为啥?布线方便,一根网线搞定,不用像RS-485那样纠结A/B线有没有接反。

来看一个典型的Modbus RTU报文帧结构:

地址码 | 功能码 | 数据区 | CRC校验
1字节  | 1字节  | N字节  | 2字节

举个例子,读取从站地址为01的设备的保持寄存器(功能码03),起始地址0x0000,读取2个寄存器:

发送:01 03 00 00 00 02 C4 0B
接收:01 03 04 12 34 56 78 9A BC

这里要注意,CRC校验是Modbus RTU的命根子。我曾经遇到过一台温控器,数据偶尔跳变,查了半天发现是现场变频器干扰导致CRC校验错误,从站直接丢弃了响应包。后来加了终端电阻和屏蔽层,问题解决。

避坑指南: 我曾经在一条生产线上同时挂了32个Modbus RTU从站,结果发现轮询一圈要3秒多。后来把波特率从9600提到115200,才勉强满足要求。记住,从站数量越多,轮询周期越长。如果对实时性有要求,别挂太多从站。
小技巧: Modbus TCP的报文其实和RTU很像,只是去掉了CRC校验(因为TCP/IP层已经做了),加了一个MBAP报文头。你可以在Wireshark里抓包看看,非常直观。

4.2 EtherNet/IP协议详解

EtherNet/IP,全称Ethernet Industrial Protocol。这名字听着就霸气,直接把“工业”两个字写脸上了。它是ODVA(开放DeviceNet供应商协会)推的标准,在美国和欧洲市场用得非常多。

EtherNet/IP的核心思想,是把CIP(Common Industrial Protocol)协议搬到标准以太网上。CIP协议定义了对象模型,每个设备都是一个对象集合。比如一个数字量输入模块,它就是一个“数字输入点对象”。

它的通信方式有两种:

  • 显式报文:用于配置、诊断等非实时数据。走TCP,面向连接,可靠但慢。
  • 隐式报文:用于实时I/O数据。走UDP,无连接,快但不可靠。不过别担心,EtherNet/IP在应用层做了数据完整性校验。

我记得有一次给一个汽车焊装线做改造,甲方指定要用EtherNet/IP。我选了一个支持该协议的远程IO模块,结果发现配置过程比Profinet复杂不少。你需要用RSNetWorx或类似的软件,给每个设备分配IP地址,还要配置CIP对象的参数。嗯,这里要注意,EtherNet/IP的设备IP地址不能冲突,而且子网掩码和网关必须一致,否则设备之间连不上。

来看一个典型的EtherNet/IP数据包结构(简化版):

以太网帧头 | IP头 | UDP头 | 封装头 | CIP命令 | 数据
14字节     | 20字节| 8字节 | 24字节 | 可变   | 可变

你算算,光协议头就占了66字节。如果传一个开关量(1位),效率其实很低。但没办法,工业协议就是这样,可靠性优先。

核心要点: EtherNet/IP的实时性取决于网络负载。我建议一个网段内不要超过50个节点,否则UDP广播风暴会让你头疼。另外,一定要用工业级交换机,别图便宜用商用的,否则丢包丢到你怀疑人生。

4.3 CC-Link IE Field协议详解

CC-Link IE Field,这是三菱电机主导的协议。IE就是Industrial Ethernet的缩写。说白了,这是三菱用来跟西门子的Profinet、罗克韦尔的EtherNet/IP打擂台的产品。

它的最大特点,是1Gbps的通信速率。你没看错,千兆!这在工业以太网里算是顶配了。而且它采用令牌传递(Token Passing)机制,保证了通信的确定性。什么意思?就是每个站拿到令牌后才能发数据,不会出现多个站同时抢线的情况。

我接触CC-Link IE Field是在一个锂电池涂布机项目上。甲方要求整条生产线同步精度在1ms以内。我算了一下,如果用Modbus TCP,轮询周期至少10ms,根本不行。后来选了CC-Link IE Field,配合三菱的L系列PLC,循环周期做到了0.5ms,完美满足要求。

CC-Link IE Field的帧结构比较复杂,我简单说一下:

前导码 | 帧头 | 数据 | FCS | 结束符
8字节  | 14字节| 可变 | 4字节| 1字节

它的数据区可以包含多个站点的数据。比如一个主站带10个从站,主站发一个帧,所有从站都能收到,然后各自提取自己的数据。这种“一帧多收”的模式,大大提高了总线利用率。

注意: CC-Link IE Field的从站模块通常需要设置站号(1-64),而且站号不能重复。我见过一个新手把两个模块都设成站号1,结果整个网络直接瘫痪。另外,它的网线必须用超五类或六类屏蔽线,否则千兆速率下误码率会很高。
个人经验: 如果你用的是三菱PLC,选CC-Link IE Field绝对没错,无缝集成。但如果你用的是西门子或罗克韦尔的PLC,我建议还是老老实实用Profinet或EtherNet/IP,别给自己找麻烦。协议之间的网关转换,性能损耗很大,而且配置起来能让你崩溃。

4.4 三种协议对比总结

好了,三种协议都聊完了。我最后给你一张对比表,方便你选型时参考:

特性 Modbus TCP/RTU EtherNet/IP CC-Link IE Field
物理层 RS-485/以太网 以太网 以太网(千兆)
通信速率 最高100Mbps(TCP) 100Mbps 1Gbps
实时性 低(轮询机制) 中(隐式报文) 高(令牌传递)
最大节点数 247(RTU)/ 无限制(TCP) 约50(建议) 64
典型应用 简单IO、仪表、变频器 离散制造、过程控制 高速生产线、运动控制
配置难度 简单 中等 中等偏难
成本

选型时,我的建议是:

  • 如果预算有限,且对实时性没要求,Modbus TCP是首选。便宜、简单、通用。
  • 如果甲方指定了罗克韦尔或欧姆龙PLC,那就用EtherNet/IP。别问为什么,兼容性第一。
  • 如果做高速同步或运动控制,且用三菱系统,CC-Link IE Field是唯一选择。

嗯,这一节就到这里。下一节我们聊聊无线通信协议,比如WIA-PA和IO-Link Wireless,那又是另一番天地了。