3. 常见工业与物联网协议概览
在MQTT网关与协议转换的工程实践中,首要任务并非直接编写代码,而是建立一张清晰的“协议地图”。工业现场与物联网域中并存着数十种通信协议,它们诞生于不同年代、服务于不同层级、承载于不同物理介质。本章将系统梳理Modbus、OPC UA、BACnet、CoAP、HTTP、TCP/UDP及串口协议的核心特征、适用边界与转换要点,为后续设计协议转换策略奠定基础。理解这些协议的差异,本质上是理解工业通信的“时延-可靠性-语义丰富度”三角约束。
上图展示了MQTT网关在工业与物联网协议矩阵中的枢纽位置。左侧为工业现场域常见协议,右侧为物联网/IT域协议,网关需要完成传输层、语义层、时序层等多维度映射。下面逐一剖析各协议的核心特征。
3.1 Modbus:工业现场的事实标准
核心原理:Modbus由Modicon(现施耐德电气)于1979年发布,采用主从(Master/Slave)架构,基于寄存器模型进行数据读写。其报文格式极为简洁:地址码(1字节)+功能码(1字节)+数据区(N字节)+CRC校验(2字节)。功能码03读保持寄存器、04读输入寄存器、06写单寄存器、16写多寄存器是最常用的操作。Modbus RTU采用二进制编码,而Modbus TCP则将其封装于TCP/IP之上,端口502。
判断方法:选择Modbus作为接入协议时,需确认以下参数:
- 物理层:RS-232(点对点,15米内)、RS-485(总线型,1200米内,支持32节点)或以太网。
- 数据模型:线圈(Coil,位操作)、离散输入(Discrete Input,只读位)、保持寄存器(Holding Register,16位读写)、输入寄存器(Input Register,16位只读)。
- 字节序:大端(Motorola)或小端(Intel),转换时极易出错。
- 从站地址范围:1-247,0为广播地址。
常见误区:初学者常混淆“协议地址”与“数据地址”。Modbus协议中寄存器地址从0开始编号,而人机界面显示地址通常从40001开始(4表示保持寄存器)。转换时需执行协议地址 = 显示地址 - 40001。此外,RS-485总线必须采用菊花链拓扑,避免星型连接导致信号反射。
3.2 OPC UA:面向语义互操作的工业标准
核心原理:OPC UA(统一架构)由OPC基金会维护,不依赖Windows COM/DCOM,采用面向服务架构(SOA)。其核心优势在于信息模型(Information Model):将设备数据组织为对象节点(Object)、变量节点(Variable)和方法节点(Method),并支持类型继承与引用关系。传输层可选TCP(二进制协议,端口4840)或HTTPS(SOAP/JSON),安全机制内置X.509证书与用户名/密码认证。
判断方法:当现场设备(如高端PLC、DCS、CNC)原生支持OPC UA,且上层应用需要丰富语义(如设备健康状态、报警条件、历史趋势)时,优先选择OPC UA直连而非Modbus轮询。需评估:
- 信息模型复杂度:是否需访问自定义对象类型或方法调用。
- 实时性要求:OPC UA PubSub(发布订阅)模式可实现毫秒级通信,但传统Client/Server模式受限于会话轮询。
- 证书管理:需预置CA证书或自签名证书,网关需支持证书信任链配置。
opcua/device1/temperature,保持语义一致性。
案例拆解:某汽车焊装车间采用Rockwell PLC(支持OPC UA),需将2000余个变量(焊接参数、机器人位置、节拍计数)实时同步至MES系统。网关采用OPC UA Client订阅方式,订阅间隔100ms,数据变化阈值0.1%。转换后MQTT消息QoS=1,保留标志位按变量类型设置。实施中发现部分变量为字符串数组,需在网关中配置JSON序列化模板,避免默认的Base64编码导致数据不可读。
3.3 BACnet:楼宇自控领域的通用语言
核心原理:BACnet(Building Automation and Control Networks)由ASHRAE制定,定义了18种标准对象类型(如Analog Input、Binary Output、Schedule)和多种服务(ReadProperty、WriteProperty、SubscribeCOV)。传输层支持BACnet/IP(UDP端口47808)、BACnet MS/TP(RS-485)和BACnet/SC(安全连接)。其核心价值在于设备间互操作:不同厂商的DDC控制器、传感器、执行器可统一寻址。
判断方法:当项目涉及暖通空调(HVAC)、照明、门禁等楼宇子系统集成时,BACnet是首选。需确认:
- 对象实例编号:例如AI:1表示第一个模拟输入点,BO:3表示第三个二进制输出。
- COV(变化上报)配置:设定变化阈值(如温度变化0.5℃)以减少网络流量。
- 网络号与设备号:BACnet/IP需配置全局网络号(0-65535)和唯一设备实例号。
总结复盘:BACnet转换至MQTT时,建议将对象类型映射为主题前缀(如bacnet/ai/1),并将COV事件转换为MQTT的即时消息,而周期性快照使用保留消息。需注意BACnet时间戳为7字节结构(日期+时间),转换时需统一为ISO 8601格式。
3.4 CoAP:物联网受限节点的轻量级选择
核心原理:CoAP(Constrained Application Protocol)由IETF RFC 7252定义,运行于UDP之上,采用类似HTTP的请求/响应模型,但报文头仅4字节。其关键特性包括:
- 可靠性:通过CON(确认)和NON(非确认)消息类型实现分级可靠传输。
- 资源发现:支持
/.well-known/core接口,返回设备资源列表。 - 观察模式:客户端可注册观察资源,服务端在资源变化时主动推送(类似MQTT订阅)。
- 块传输:支持大资源分块传输(Block1/Block2选项)。
判断方法:当终端节点为电池供电的传感器(如温湿度标签、智能阀门),且网络为NB-IoT或LoRaWAN时,CoAP比HTTP更合适。需评估:
- 报文开销:CoAP头部+选项通常小于20字节,而HTTP头部至少200字节。
- 重传机制:CoAP的指数退避重传(初始2秒,最大120秒)需与网关超时配置匹配。
- NAT穿透:UDP无连接特性需配合LwM2M或DTLS会话保持。
3.5 HTTP/REST与TCP/UDP裸协议
核心原理:HTTP基于TCP,采用请求/响应模式,语义丰富(方法、状态码、头部、正文),但开销大、实时性差。TCP提供可靠字节流,适合大文件传输和长连接;UDP提供不可靠数据报,适合低延迟实时控制。在物联网场景中,HTTP常用于设备配置、固件升级和云端API对接;TCP/UDP裸协议则用于视频流(RTSP over TCP)、音频流(RTP over UDP)或自定义工业报文。
判断方法:
| 协议 | 适用场景 | 转换注意事项 |
|---|---|---|
| HTTP | 设备注册、OTA升级、REST API | 需处理连接复用、超时重试、JSON/XML解析 |
| TCP裸流 | PLC自定义协议、视频流、文件传输 | 需定义帧边界(长度头/分隔符),处理粘包拆包 |
| UDP裸流 | 实时控制、音视频、传感器广播 | 需容忍丢包,设计序列号与去重机制 |
案例拆解:某港口起重机远程监控系统,PLC通过TCP发送自定义二进制帧(帧头0xAA55+长度+数据+CRC32),每帧包含吊臂角度、载荷重量等20个参数。网关需实现TCP Server监听5023端口,按帧格式解析,并转换为MQTT主题crane/01/telemetry。实施中遇到粘包问题:两个数据帧连续到达,网关缓冲区需按长度字段精确截取。解决方案:采用状态机解析,先读取2字节长度,再读取完整帧体,最后校验CRC。
3.6 串口协议:物理层与协议栈的边界
核心原理:串口(UART)是异步串行通信接口,RS-232(±12V电平,全双工)、RS-485(差分信号,半双工)、TTL(0-3.3V)是常见电气标准。串口本身不定义应用层协议,Modbus RTU、BACnet MS/TP、自定义协议均可在其上运行。网关需处理波特率、数据位、停止位、校验位、流控等参数匹配。
判断方法:当设备仅提供串口接口(如老式仪表、变频器、扫码枪)时,需通过串口服务器或网关内置串口模块接入。关键决策点:
- 半双工/全双工:RS-485半双工需控制收发切换(DE/RE引脚),网关需支持自动方向控制。
- 帧间隔:Modbus RTU要求帧间间隔≥3.5字符时间(如9600波特率下约4ms),网关需精确计时。
- 多从站轮询:网关需维护轮询队列,处理从站无响应超时(通常100-500ms)。
总结复盘:串口协议转换的核心是“字节流到结构化数据”的映射。建议在网关中建立“通道-设备-寄存器”三级配置模型:通道定义串口参数,设备定义从站地址,寄存器定义数据点属性(地址、类型、缩放系数、单位)。
3.7 协议选型对比与转换策略
| 协议 | 传输层 | 实时性 | 语义丰富度 | 典型场景 | MQTT转换要点 |
|---|---|---|---|---|---|
| Modbus RTU/TCP | 串口/TCP | 中(轮询周期100ms-1s) | 低(寄存器数组) | PLC、仪表、能源监测 | 寄存器地址→主题,轮询→定期发布 |
| OPC UA | TCP/HTTPS | 高(订阅模式) | 高(对象模型) | 高端PLC、DCS、MES | NodeId→主题,数据变化→即时发布 |
| BACnet | UDP/MS/TP | 中(COV事件) | 中(对象类型) | 楼宇自控、暖通 | 对象实例→主题,COV→事件消息 |
| CoAP | UDP | 中(观察模式) | 低(资源URI) | 低功耗传感器、NB-IoT | URI→主题,观察→订阅推送 |
| HTTP | TCP | 低(请求/响应) | 高(REST语义) | 云平台API、设备配置 | URL→主题,响应→消息 |
| TCP/UDP裸流 | TCP/UDP | 高(自定义) | 自定义 | 视频流、自定义工业帧 | 帧解析→JSON,需定义映射规则 |
选型决策流程:首先确认物理层(串口/以太网/无线),其次确认应用层协议(设备手册),然后评估数据量与时延要求,最后设计映射规则。对于多协议混合场景(如同时接入Modbus和BACnet),建议网关采用“插件化协议解析引擎”,每种协议独立加载,避免耦合。
{"value": 23.5, "unit": "℃", "range": [0,100]}),便于云端应用理解。