3. 工业通信协议入门
在ESP32工业IoT网关中,协议不是“软件选项”,而是决定数据能否被PLC、传感器、云平台正确理解的语言。一个网关往往同时面对串口、现场总线和以太网三类物理介质,因此需要把Modbus、CANopen、MQTT、OPC UA放在同一张通信地图中理解:谁负责采集、谁负责设备互联、谁负责上云、谁负责语义建模。
一、四类协议的基本定位与报文结构
Modbus RTU运行在RS-485/RS-232串行链路上,采用主从轮询。典型帧由“从站地址 + 功能码 + 数据 + CRC校验”组成。例如读取保持寄存器:
请求: 01 03 00 00 00 02 C4 0B
含义: 从站01,功能码03,起始地址0x0000,读取2个寄存器,CRC=C40B
响应: 01 03 04 00 0A 00 14 FA 33
含义: 从站01,功能码03,4字节数据,寄存器值10和20
Modbus TCP把RTU帧封装进TCP/IP,去掉CRC,增加7字节MBAP头:事务标识、协议标识、长度、单元标识。它适合以太网PLC、SCADA和边缘网关,端口通常为502。由于TCP本身可靠,Modbus TCP更关注连接管理和并发请求,而不是串口时序。
CANopen基于CAN总线,核心是对象字典(OD)、PDO(过程数据对象)、SDO(服务数据对象)、NMT网络管理和心跳。PDO用于实时传输,SDO用于参数配置。CANopen不是“读寄存器”模型,而是“对象索引+子索引”模型,例如索引0x6040是控制字,0x6060是运行模式。
MQTT是发布/订阅协议,报文由固定头、可变头和载荷组成。固定头包含报文类型和剩余长度;CONNECT、PUBLISH、SUBSCRIBE、PINGREQ是常见类型。它依赖Broker,主题如factory/line1/temp,QoS 0/1/2决定可靠性。MQTT适合低带宽、多设备、上云场景,但不提供设备语义模型。
OPC UA是面向工业互操作的平台协议,包含地址空间、节点、引用、信息模型和安全通道。它既支持客户端/服务器,也支持发布/订阅。二进制编码适合高性能,JSON/XML适合Web集成。OPC UA的关键价值是“语义”:一个温度节点不仅是一个数值,还带有单位、工程范围、设备层级和类型定义。
二、方法流程:从现场采集到云端语义映射
- 物理层接入:RS-485使用UART+收发器,CAN使用TWAI控制器+收发器,以太网使用RMII/PHY。ESP32需先确认电平、终端电阻和隔离。
- 协议解析:Modbus按功能码解析寄存器;CANopen按COB-ID和对象字典解析PDO/SDO;MQTT按主题和QoS解析载荷;OPC UA按节点ID和类型读取。
- 数据建模:把不同协议的数据统一为“设备-测点-值-单位-时间戳-质量码”。这一步是网关能否被上层理解的关键。
- 上行发布:轻量遥测走MQTT,语义互操作走OPC UA。若平台只支持MQTT,可在网关内做OPC UA到MQTT的映射。
- 异常处理:串口超时、CAN总线关闭、MQTT断连、OPC UA会话失效都要有重试、缓存和告警策略。
三、案例:一条包装线的协议组合
某包装线有3台变频器(Modbus RTU)、2台伺服(CANopen)、1台边缘网关(ESP32)和云端MES。网关以Modbus主机轮询变频器频率和电流,以CANopen主站读取伺服位置和状态字,再把数据映射为MQTT主题packing/line1/motor1/current,同时对外提供OPC UA节点ns=2;s=Line1.Motor1.Current。这样,SCADA可通过OPC UA读取语义化数据,云端看板通过MQTT订阅实时值。
| 协议 | 典型介质 | 报文核心 | 适用场景 | ESP32实现要点 |
|---|---|---|---|---|
| Modbus RTU | RS-485/RS-232 | 地址+功能码+数据+CRC | 电表、温控、老PLC | UART轮询、超时重试、CRC16 |
| Modbus TCP | 以太网/Wi-Fi | MBAP+PDU | SCADA、以太网PLC | TCP连接池、事务ID管理 |
| CANopen | CAN/CAN FD | COB-ID+PDO/SDO | 伺服、电机、运动控制 | TWAI驱动、对象字典、心跳 |
| MQTT | TCP/TLS | 固定头+主题+载荷 | 上云、遥测、低带宽 | QoS、遗嘱、断线缓存 |
| OPC UA | TCP/HTTPS | 节点+引用+安全通道 | 跨厂商语义互操作 | 信息模型、证书、会话 |
四、误区与复盘
误区2:认为CANopen就是“CAN报文”。CAN只定义物理层和数据链路层,CANopen才定义对象字典、PDO/SDO和网络管理。
误区3:用MQTT替代OPC UA做所有事情。MQTT擅长传输,不擅长语义;OPC UA擅长建模,但资源开销更大。
误区4:忽略时间戳和质量码。工业数据没有时间戳和质量码,云端无法判断数据是否可信。
掌握这四类协议的关键,不是背报文,而是理解它们各自解决什么问题:Modbus解决寄存器级采集,CANopen解决实时设备互联,MQTT解决轻量上云,OPC UA解决语义互操作。ESP32网关的价值,正是在这些协议之间做可靠、可维护、可扩展的翻译与桥接。