Modbus 协议

工业与制造

概述

Modbus 由施耐德电气前身于 1979 年发布,现已成为事实标准的工业串行协议。它定义了功能码、寄存器映射与差错校验规则,常见实现包括基于 RS-485 的 Modbus RTU、文本形式的 Modbus ASCII,以及运行于以太网的 Modbus TCP。物联网边缘网关常通过串口采集 RTU 数据,经蜂窝模组封装为 MQTT/HTTP 上云,实现远程监控与预测维护。

与蜂窝网关

时序上需注意轮询周期与蜂窝时延:长 RTT 下过多从站轮询可能导致超时。应合理设置重试、超时与批量读,避免在弱网时雪崩式重发。安全方面,纯 Modbus 无加密,跨公网时应走 VPN 或专网 APN。

常见问题

站号冲突、波特率不一致、终端电阻与接地不良会导致间歇性通讯失败;云端若误解析 16 位与 32 位寄存器拼接顺序,会出现数值跳变。文档化点表与字节序至关重要。

功能码与异常响应

常用功能码包括读保持寄存器(03)、读输入寄存器(04)、写单寄存器(06)、写多寄存器(10)等;异常时从站返回功能码最高位置 1 并带异常码,主站需分类重试或报警。批量读可减少轮询次数,但单帧长度受 RTU 与 TCP 适配层限制。写操作前宜先读回校验,防止误写安全联锁点。与蜂窝网关对接时,建议将周期轮询与事件驱动上报结合,减轻上行压力。

从站仿真与文档治理

开发阶段可用软件从站仿真点表,加速联调;量产前要使用真实 PLC 固件版本验证。点表应版本化并与电气原理图、HMI 画面一致,变更走评审流程。对于跨公网的 Modbus TCP,应配合 TLS 隧道或 IP 白名单,避免明文暴露于互联网。

寄存器地址与校验域

Modbus 把从站的数据看成一张按地址编排的表。功能码决定这次是读保持寄存器、读输入寄存器,还是写一个或连续多个寄存器;异常时从站把功能码的最高位置位,并带回一个异常码,告诉主站是不支持的功能、非法地址还是设备忙。RTU 在串行帧尾用 CRC 判断位错误,TCP 则把同样的协议数据单元放进以太网报文,用事务标识匹配请求和响应,不再靠字符间隔分帧。地址在协议里常从 0 编起,而图纸上习惯从 40001 这类编号写起,两者差一或差一段基址时,读到的是相邻变量。

经蜂窝网关上云时,轮询周期必须大于“串行超时 × 重试 × 从站数”,再留出蜂窝往返。从站数量多、链路又慢时,应合并连续地址一次读回,而不是每个寄存器一次请求。写线圈或写寄存器若会影响联锁,先读回再写,并限制能经公网写入的地址段。纯串行链路没有加密,跨公网只能放在专网或隧道里。

波特率、终端电阻与字节序

总线上有一台从站的波特率或校验位不同,会让整段报文的帧间隔乱掉,表现为随机超时,换一台仪表又好了。终端电阻只加在一端或加了三处,反射造成偶发 CRC 错误,阳光晒到机柜温度升高后更明显。32 位测量值被拆成两个寄存器,高字和低字的顺序与云端模板相反,数值在过某个门槛后突然变成很大的负数。站号冲突时两台从站同时应答,主站校验失败,却去重启蜂窝模组。写多个寄存器的长度超过从站允许的一帧,适配层截断后写出半个设定值。

点表要用同一份版本说明地址、类型、字序、比例和单位,改动和电气图一起评审。需要语义而不是寄存器号时,再映射到OPC的标签。网关与上位画面的职责划分见SCADA:画面不要直接对公网上的从站逐点轮询。上线前用真实从站固件核对异常码,仿真器默认全成功会掩盖非法地址。

点表评审时逐项核对四件事:协议地址与图纸编号的换算、寄存器类型、字序和比例。任何一项口头约定而未写进版本,都会在换人后读出错值。总线上的波特率、校验和停止位必须全站一致,终端电阻只加在总线两端。经网关转发时,给每个从站单独的超时,一台不在线的从站不应拖住其余站的轮询。能经公网写入的地址单独列表,并要求写后读回。异常码要进入告警,而不是当成普通超时重试,否则非法地址会被每秒打击一次。仿真通过后,再用现场那一版从站固件复测帧长限制。

从站不在线时的超时不要连锁拖住整条总线。写操作后的读回值与目标不一致就告警并停止继续写。字序和比例印在点表封面上,云端模板变更必须升版本。公网侧只开放列出的只读地址,联锁相关的写留在现场网络。

相关术语

返回通信模组专业术语