Modbus 协议速查(功能码 / RTU / TCP)
依据 Modbus 公开规范整理,适用于支持 Modbus 的时序器、IO 模块、PLC 等设备。具体设备的寄存器地址、功能码支持范围与串口参数以设备手册为准。
从一次”全馆同时上电跳闸”说起
展厅二十几路设备——投影、灯光、音响、服务器、显示屏——如果早上开馆一个总闸全推上去,几十台机器同一瞬间涌浪电流,轻则跳闸、重则烧电源。老练的做法是用电源时序器分路、按秒延时逐路上电:先服务器、再显示、再投影、最后音响。而让中控能”按顺序、一路一路”地控这个时序器的,通常就是 Modbus。它是工业界几十年的老协议,简单、透明、几乎所有时序器和 IO 模块都支持。协议本身很朴素,难在寄存器地址、功能码和串口参数这几样对不上就读不到、写不进。这篇把主从机制、功能码、RTU/TCP 封装到展厅分路上电讲透。
Modbus 是什么
Modbus 是一种主从式请求-应答协议:网络上有一个主站(中控)和若干带地址的从站(设备),永远是主站主动发问、从站被动回答,从站之间不说话、也不会主动上报。把它想成点名:老师(主站)念到几号(从站地址),几号才应答,没被念到的一律沉默。主站发一条报文,里面写清”找几号从站、干什么操作(功能码)、操作哪个地址、值是多少”,从站照做并回执。展厅里它常用于电源时序器、继电器 IO 模块、环境监测(温湿度、门磁)等设备的对接。SoftControl 展厅中控 原生支持 Modbus,配好从站地址和寄存器就能直接驱动。
Modbus 的四类数据模型
要看懂功能码,先分清 Modbus 把设备数据分成四种”抽屉”,两两成对(位 / 字 × 读写 / 只读):
| 数据类型 | 位宽 | 读写 | 展厅里对应什么 |
|---|---|---|---|
| 线圈 Coils | 1 位 | 读 / 写 | 继电器开关、时序器某一路的通断 |
| 离散输入 Discrete Inputs | 1 位 | 只读 | 门磁、按钮、到位信号等开关量输入 |
| 保持寄存器 Holding Registers | 16 位 | 读 / 写 | 延时参数、设定值、可写配置 |
| 输入寄存器 Input Registers | 16 位 | 只读 | 温湿度、电压电流等采集值 |
记住这张对应表,功能码就是”对哪种抽屉做什么”的组合,一下就串起来了。
常用功能码表
| 功能码 | Hex | 操作 | 数据类型 |
|---|---|---|---|
| 01 | 0x01 | 读线圈 Read Coils | 1 位 读写 |
| 02 | 0x02 | 读离散输入 | 1 位 只读 |
| 03 | 0x03 | 读保持寄存器 | 16 位 读写 |
| 04 | 0x04 | 读输入寄存器 | 16 位 只读 |
| 05 | 0x05 | 写单个线圈 | 0xFF00 开 / 0x0000 关 |
| 06 | 0x06 | 写单个寄存器 | 16 位 |
| 0F | 0x0F | 写多个线圈 | 批量 |
| 10 | 0x10 | 写多个寄存器 | 批量 |
注意:FC05 写线圈标准只接受两个值——
0xFF00(开)和0x0000(关),中间任何其它值在合规设备上会返回异常码。别自作聪明写个 0x0001 当”开”,标准设备不认。
RTU 与 TCP:同样的芯,不同的壳
Modbus 有两种常见传输封装,功能码和数据模型完全一样,区别只在最外层怎么包:
| Modbus RTU | Modbus TCP | |
|---|---|---|
| 物理层 | RS-232 / RS-485 串口 | 以太网 TCP/IP |
| 帧结构 | 从站地址(1–247) + PDU + CRC 校验 | MBAP 头(事务ID / 协议ID / 长度 / 单元ID) + PDU |
| 校验 | 帧尾 16 位 CRC | 靠 TCP 自身可靠传输,无 CRC |
| 端口 / 参数 | 串口参数(常见 9600 8N1) | TCP 502 |
| 功能码 | 完全一致 | 完全一致 |
PDU(协议数据单元)就是”功能码 + 数据”那部分,两种封装里长得一模一样。 RTU 在前面加从站地址、后面加 CRC 校验(因为串口不可靠,靠 CRC 查错);TCP 换成前面加一个 MBAP 头(事务 ID 用来把应答和请求对上号,单元 ID 相当于串口那边的从站地址),末尾不用 CRC——TCP 本身已经保证不丢不错了。所以你若懂了 RTU,TCP 只是换个壳。很多现场是”Modbus TCP 网关 + 下挂 RS-485 串口设备”,网关把 TCP 报文里的单元 ID 翻成串口从站地址转发,两种封装在网关里握手。
展厅落地:用 Modbus 做分路延时上电
回到开头那个电源时序器。假设它是一台 8 路 Modbus 继电器,每一路对应一个线圈地址(比如线圈 0 到 7 对应第 1 到 8 路)。中控做”开馆分路上电”的逻辑就是:
- FC05 写线圈 0 =
0xFF00(服务器那路先通电),等 3 秒; - FC05 写线圈 1 =
0xFF00(显示屏那路),再等 2 秒; - 依次点亮投影、灯光、音响那几路,每路之间留延时,避开涌浪电流;
- 需要一次开好几路时用 FC0F(写多个线圈)批量下发。
闭馆反过来,按安全顺序逐路 0x0000 断电(一般先关音响投影、最后关服务器)。状态采集上,中控用 FC01 读回各路线圈当前是开是关,核对”该上电的都上了没”;接了环境监测的话用 FC04 读输入寄存器拿温湿度。继电器联动同理,写线圈控制电动幕布、门禁、新风等开关量设备。在 SoftControl 展厅中控 里,这一整套”逐路延时 + 状态核对”被封装成”开馆""闭馆”场景按钮或定时任务,配合 SoftPlayer 展厅播控 做内容联动,运营早上点一下”开馆”,底下 Modbus 就按秒把二十几路设备稳稳唤醒。这跟 DMX512 灯光 和 PJLink 投影 里把底层协议封装成”场景”的思路一样——中控吃掉协议差异,对外只留下一个按钮。
故障排查表
| 现象 | 可能原因 | 排查 / 解决 |
|---|---|---|
| 读不到任何数据 / 一直超时 | 从站地址错、串口参数(波特率 / 校验 / 停止位)不一致 | 核对设备铭牌的从站地址与串口参数,逐项对齐 |
| 读到数据但值不对 / 错位 | 寄存器地址偏移问题(有的手册地址从 1 起、协议从 0 起,差 1) | 试着把地址 ±1,或按手册说明确认基址 |
| 写线圈返回异常码 | FC05 写了 0xFF00/0x0000 以外的值 | 开只写 0xFF00,关只写 0x0000 |
| 功能码报非法 | 该设备不支持这个功能码,或用错了数据类型 | 查手册支持的功能码,输入寄存器只能读(FC04)不能写 |
| RS-485 总线偶发通信错 | 缺终端电阻、接反 A/B、线太长或劣质、多主站抢线 | 末端加 120Ω 终端,核对 A/B 极性,确保总线单主站 |
| 挂多个设备只有部分能通 | 从站地址冲突(两台设同一地址) | 逐台核对并改成互不重复的地址 |
| Modbus TCP 连不上 502 | IP / 端口错、不同网段、防火墙拦、单元 ID 不对 | 核对 IP 端口网段与防火墙,网关下挂串口设备时核对单元 ID |
排查口诀:先对从站地址和串口 / TCP 参数,再对寄存器地址偏移,最后才对功能码。 大半的 Modbus 现场毛病死在”地址或参数没对齐”这一步。
边界与安全
地址偏移是头号坑。 Modbus 有个历史遗留:不少手册按”从 1 开始”的编号写地址(比如 40001 表示第 1 个保持寄存器),而协议报文里实际用的是从 0 开始的偏移。读到的值整体错开一格,八成是这个 ±1 没对上,务必按手册说明确认基址。RS-485 是总线不是星型。 跟 DMX 一样,Modbus RTU 走 RS-485 时要菊花链、末端加 120Ω 终端电阻、A/B 别接反;标准 32 个单位负载,设备多了要加中继。单主站原则。 一条 RTU 总线只能有一个主站发问,两个中控同时抢线会乱套;要多点接入就上 Modbus TCP 或加网关。Modbus 无认证无加密。 报文明文、谁都能发,控制网务必隔离,别把 502 端口暴露在公网。
动手检查清单
对接一台 Modbus 设备前后,对着过一遍:
- 记下设备的从站地址(RTU)或 IP + 单元 ID(TCP)
- RTU 核对串口参数(波特率 / 数据位 / 校验 / 停止位)与设备一致
- 查手册确认寄存器地址基址(从 0 还是从 1 起),避开 ±1 偏移
- 明确每个操作用哪个功能码,读写别用错数据类型
- RS-485 已菊花链、末端 120Ω、A/B 极性正确、单主站
- FC05 写线圈只用 0xFF00 / 0x0000
- 分路上电 / 断电顺序与延时已在中控编好并测试触发
小结
Modbus 的骨架很简单:主站问、从站答,四种数据抽屉配上几个功能码,读写各就各位。RTU 和 TCP 只是同一套 PDU 换了个外壳。真正决定现场通不通的从来不是协议本身,而是那几样必须严丝合缝对齐的东西——从站地址、串口 / TCP 参数、寄存器地址偏移。上层再由中控把逐路延时上电、状态核对封装成”开馆""闭馆”场景,二十几路设备才真正变成运营手里一个按钮的事。
延伸阅读:了解 DMX512 灯光控制、PJLink 投影控制 与 TCP/UDP 通信基础,或查看全部设备协议速查。
SoftControl 原生支持 Modbus 对接展厅设备。了解 SoftControl 展厅中控、查看解决方案与落地案例,或直接联系我们聊聊你的定制需求。