一、工业协议三剑客:Modbus、PROFINET、EtherNet/IP

各位工程师朋友,咱们今天聊聊工业通信里最绕不开的三个协议。说实话,我入行那会儿,厂里还遍地都是RS485走Modbus RTU,现在新项目基本清一色Profinet或者EtherNet/IP了。但别急着追新——老协议能活到现在,自然有它的道理。

1.1 Modbus RTU/TCP:老当益壮的“通用语言”

Modbus诞生于1979年,比我都大几岁。但它至今仍是工业设备联网的“保底方案”——几乎所有PLC、仪表、变频器都支持它。

Modbus RTU(串行通信)

说白了,就是通过RS232/485线缆,用两根线把设备串起来。我习惯叫它“一问一答”模式:主机发请求,从机回数据,简单粗暴。

关键参数:
  • 物理层:RS485(常用),RS232(短距离)
  • 波特率:9600、19200、115200(我一般用19200,稳定性和速度平衡)
  • 数据格式:1位起始位,8位数据位,1位停止位,无校验(常用)
  • 最大节点数:32个(RS485标准,加中继可扩展)

我在项目里遇到过最头疼的事:两台设备波特率设成一样,但校验位不同,死活通不上。嗯,这里要注意——Modbus RTU的报文里没有波特率信息,全靠两边约定好。

Modbus TCP(以太网通信)

其实就是把Modbus RTU的报文,直接塞进TCP/IP包里。端口号502,这是IANA分配的,别乱改。

// Modbus TCP报文结构(我简化了)
// 事务标识符(2字节) + 协议标识符(2字节) + 长度(2字节) + 单元标识符(1字节) + 功能码(1字节) + 数据(N字节)

// 举个例子:读取保持寄存器
// 请求:00 01 00 00 00 06 01 03 00 00 00 0A
// 解释:事务ID=1, 协议ID=0, 长度=6, 单元ID=1, 功能码=03, 起始地址=0, 读取10个寄存器

// 响应:00 01 00 00 00 17 01 03 14 00 01 00 02 ...
// 解释:事务ID=1, 协议ID=0, 长度=23, 单元ID=1, 功能码=03, 字节数=20, 数据...
我的经验:Modbus TCP调试时,先用串口助手抓包看报文对不对。我曾经花了两小时查代码,最后发现是网线水晶头接触不良——物理层问题永远是最坑的。

1.2 PROFINET:西门子的“实时王牌”

Profinet是西门子主推的工业以太网协议。它最大的特点就两个字:实时。

为什么需要实时?你想想看,一个机器人手臂每秒要接收几百个位置指令,延迟超过1毫秒就可能撞机。Profinet通过硬件加速和优先级调度,把循环时间压到微秒级。

Profinet的三种通信通道

通道类型 循环时间 典型应用
NRT(非实时) >100ms 参数配置、诊断
RT(实时) 1-10ms 过程数据交换
IRT(等时实时) <1ms 运动控制、高速同步

我记得第一次调Profinet IRT,被那个“同步域”的概念绕晕了。说白了,就是所有设备必须在一个时间基准下工作,像军队走正步一样整齐。

避坑指南:我曾经在一条生产线上,把Profinet设备和普通以太网设备混接在同一个交换机上。结果运动控制周期抖动得厉害——因为普通数据包抢了带宽。后来加了专用Profinet交换机才解决。

1.3 EtherNet/IP:罗克韦尔的“开放生态”

EtherNet/IP由罗克韦尔自动化(AB)主导,但它是个开放协议。它的核心思想是:把工业设备的数据,封装成标准对象,通过TCP/UDP传输。

应用场景

  • 离散制造:汽车焊装线、电子装配线(我见过最多的场景)
  • 过程控制:石化、制药(配合CIP Safety安全协议)
  • 混合行业:食品饮料、包装(设备种类多,EtherNet/IP兼容性好)

EtherNet/IP最让我欣赏的是它的“对象模型”。每个设备都像是一个对象,有属性、方法、事件。比如一个变频器,你可以直接读取它的“运行频率”属性,调用“启动”方法。

// EtherNet/IP的CIP对象模型(简化示例)
// 变频器对象
Class ID: 0x04 (Motor Data)
Instance ID: 1 (主电机)

// 属性列表
Attribute 3: 电机电流 (REAL类型)
Attribute 7: 电机速度 (REAL类型)
Attribute 10: 电机状态 (USINT类型: 0=停止, 1=运行, 2=故障)

// 读取电机电流的报文(封装在TCP里)
// 服务码: 0x0E (Get Attribute Single)
// 路径: 0x20 0x04 0x24 0x01 0x30 0x03
// 解释: Class=0x04, Instance=1, Attribute=3
选型建议:
  • 如果现场全是西门子设备,闭眼选Profinet
  • 如果设备品牌杂、预算有限,Modbus TCP最稳妥
  • 如果甲方指定用罗克韦尔或需要CIP Safety,EtherNet/IP是唯一选择

1.4 三个协议怎么选?

我个人的经验是:别被厂商绑架。有一次项目,甲方要求全用Profinet,但现场有台国产仪表只支持Modbus。最后加了个网关,多花了5000块,还多了一个故障点。

你想想看,如果当初选Modbus TCP,虽然实时性差一点,但所有设备都能直连,省事又省钱。所以我的建议是:

  • 实时性要求高(<1ms):Profinet IRT
  • 中等实时(1-10ms):EtherNet/IP或Profinet RT
  • 非实时或兼容性优先:Modbus TCP
  • 老旧设备改造:Modbus RTU(成本最低)
一个小技巧:做方案时,先列出现有设备支持的协议,再选主协议。如果三种协议都有,我建议用Modbus TCP做“兜底”,其他协议做“主力”。这样万一主力出问题,还能降级运行。

好了,这一章咱们把三个主流协议的核心特点捋了一遍。下一章我会详细讲Modbus的报文结构,包括功能码、数据地址映射这些实战中天天要用的东西。到时候我会拿一个温控仪表的实际案例,手把手教你怎么读数据。