一、工业协议三剑客: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, 数据...
1.2 PROFINET:西门子的“实时王牌”
Profinet是西门子主推的工业以太网协议。它最大的特点就两个字:实时。
为什么需要实时?你想想看,一个机器人手臂每秒要接收几百个位置指令,延迟超过1毫秒就可能撞机。Profinet通过硬件加速和优先级调度,把循环时间压到微秒级。
Profinet的三种通信通道
| 通道类型 | 循环时间 | 典型应用 |
|---|---|---|
| NRT(非实时) | >100ms | 参数配置、诊断 |
| RT(实时) | 1-10ms | 过程数据交换 |
| IRT(等时实时) | <1ms | 运动控制、高速同步 |
我记得第一次调Profinet IRT,被那个“同步域”的概念绕晕了。说白了,就是所有设备必须在一个时间基准下工作,像军队走正步一样整齐。
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的报文结构,包括功能码、数据地址映射这些实战中天天要用的东西。到时候我会拿一个温控仪表的实际案例,手把手教你怎么读数据。