2、主流工业协议概览:Modbus、PROFINET、EtherNet/IP、OPC UA、MQTT、CANopen

好,咱们进入正题。这一章我带你快速过一遍工业现场最常见的六种协议。你想想看,一个网关要适配这么多协议,如果连它们各自的特点都搞不清楚,那后面配置起来肯定抓瞎。

我个人习惯,每接触一个新项目,第一件事就是先看现场用的是什么协议。这决定了你选网关、配参数、甚至排故障的思路。下面这六种,基本覆盖了90%以上的工业场景。

2.1 Modbus:老当益壮的串行之王

Modbus 是我入行时接触的第一个协议。说实话,它太经典了。1979年由Modicon公司提出,到现在还在大量使用。为什么?因为它简单、稳定、开放。

Modbus 主要分两种:

  • Modbus RTU:走串口(RS-232/RS-485),二进制传输,效率高。我在一个水处理项目中遇到过,现场几十个传感器用485总线连起来,一根双绞线搞定,成本极低。
  • Modbus TCP:走以太网,其实就是把RTU的报文封装到TCP包里。端口号502,记住这个,排查网络问题时经常用到。

核心要点:Modbus 是主从架构。一个主机(通常是PLC或网关)轮询多个从机(传感器、执行器)。从机不会主动发数据,你问它才答。

避坑指南:我曾经在一个项目中,从机地址设成了0。嗯,Modbus的广播地址是0,所有从机都会响应,但不会回复。结果我查了半天,以为设备坏了。记住,从机地址范围是1-247。

2.2 PROFINET:西门子的工业以太网王牌

PROFINET 是西门子力推的实时以太网协议。如果你做汽车制造、烟草、物流这些行业,大概率会碰到它。

它最大的特点是实时性。分三个等级:

等级 循环时间 典型应用
RT(实时) 1-10ms 普通工厂自动化
IRT(等时实时) <1ms 运动控制、伺服驱动
NRT(非实时) 标准TCP/IP 参数配置、诊断

我建议你在做网关适配时,重点关注IRT模式。它需要专用的交换机硬件支持,普通交换机不行。有一次客户抱怨说PROFINET网络丢包严重,我过去一看,用的全是家用交换机。嗯,这肯定不行。

2.3 EtherNet/IP:罗克韦尔的开放之选

EtherNet/IP 是罗克韦尔自动化(AB)主导的协议,在北美市场占有率极高。它基于标准的TCP/IP和UDP,但加了一个CIP(通用工业协议)层。

说白了,EtherNet/IP 就是把工厂里的设备都抽象成“对象”。每个对象有属性、服务和行为。这种设计让它非常灵活,但也意味着配置起来稍微复杂一些。

我记得有一次做网关对接,对方PLC是AB的ControlLogix,我这边需要读取一个变频器的电流值。EtherNet/IP 的报文结构里,你得先建立连接(Forward Open),然后才能读写数据。这和Modbus那种直接发指令的方式完全不同。

小技巧:EtherNet/IP 的隐式报文(I/O数据)走UDP,端口号2222;显式报文(配置信息)走TCP,端口号44818。抓包时注意区分。

2.4 OPC UA:面向未来的统一架构

OPC UA 不是单纯的通信协议,它更像一个平台。它解决了传统OPC(基于COM/DCOM)在跨平台、安全性上的痛点。

它的核心优势:

  • 安全:支持证书、加密、鉴权。我在一个核电项目中,客户要求所有通信必须加密,OPC UA 是唯一能满足的。
  • 信息模型:不只是传数值,还能传数据的含义、单位、历史趋势。比如你读一个温度值,它告诉你这是“1号反应釜顶部温度”,单位是“摄氏度”。
  • 跨平台:Linux、Windows、嵌入式系统都能跑。

但要注意,OPC UA 的协议栈比较重。如果你用的是一个只有几百KB内存的MCU做网关,跑OPC UA 会很吃力。我建议至少要有64MB以上的RAM,才能流畅运行。

2.5 MQTT:物联网时代的轻量级选手

MQTT 原本是IBM为卫星通信设计的,现在成了物联网的事实标准。它基于发布/订阅模式,不是传统的请求/响应。

为什么工业网关要用MQTT?

  • 带宽小:报文头只有2个字节。我在一个用4G DTU的项目中,流量费是按兆算的,用MQTT比HTTP省了至少80%。
  • 支持断线重连:有遗嘱消息(Last Will)和保留消息(Retained),设备掉线了也能知道。
  • QoS等级:0(最多发一次)、1(至少发一次)、2(正好发一次)。工业场景我一般用QoS 1,兼顾可靠性和效率。

注意:MQTT本身不保证实时性。如果你需要毫秒级的控制,别用它。它更适合数据采集、远程监控、告警推送这类场景。

2.6 CANopen:嵌入式设备的内部总线

CANopen 基于CAN总线,在机器人、医疗设备、工程机械里用得非常多。它不像前面几种协议那样走以太网,而是走两根线的CAN总线。

它的核心是对象字典。每个设备都有一个对象字典,里面定义了所有参数。比如索引0x6000+节点ID,就是该节点的接收PDO(过程数据对象)。

我建议你在调试CANopen时,一定要准备好SDO(服务数据对象)和PDO的映射表。有一次我调试一个伺服驱动器,怎么都转不起来,最后发现是PDO映射的COB-ID配错了。嗯,这种问题光看报文很难发现,必须对照手册。

CANopen的波特率通常有125k、250k、500k、1M等。总线长度和波特率成反比,1Mbps时最长也就40米左右。这个在布线时要提前规划好。


好了,这六种协议的基本情况就是这样。你可能会问,这么多协议,网关怎么同时处理?别急,下一章我会详细讲网关的协议转换引擎是怎么设计的。记住一句话:理解协议的本质,比死记硬背报文格式更重要