
Modbus 是什么、出现在哪里
Modbus 是简单的请求-响应协议。主站向从站请求寄存器或线圈,从站返回值。RTU 走串行线,TCP 走以太网。它流行是因为容易实现,也正因如此,各家实现差异很大。在建筑里,它出现在电表、逆变器、电池系统、冷机、传感器、PLC、客房控制器与发电机控制中。它不是 BACnet 那样的建筑标准,而是一根恰好无处不在的数据管道。这种简单在现场是优势,在集成时是风险:没有对象模型可以协商,每个点位都必须手工定义。协议参考:从站地址为 1 到 247,0 保留给广播,串行网段通常按 32 个单元负载规划。这些是电气上限,并不代表设备一定能及时应答。
- 电表与分项计量表
- 光伏逆变器与电池系统
- 传感器、PLC 与客房控制器
- 冷机、水泵与发电机控制
寄存器表与数据类型
每个 Modbus 集成都从寄存器表开始。它应列出每个值的地址、功能码、数据类型、字序、缩放系数、单位、访问方式与含义。地址约定不一致:有的文档从 0 开始,有的从 1 开始,差一位就是隐性故障。32 位值可能高字在前,也可能低字在前。状态字可能把多个告警塞进一个寄存器。点位表应把寄存器换算为工程量,而不是把原始数字留在操作界面上。可写寄存器要写明安全范围与越界写入的后果。寄存器表应随设备固件版本管理。功能码很重要:读保持寄存器与读输入寄存器不同,写线圈与写寄存器也不同。有符号与无符号值要明确处理;负温度可能显示成一个很大的正数。
- 地址基数与功能码
- 数据类型、字序与字节序
- 缩放系数、偏移与单位
- 位级状态与告警解包
轮询、时序与网络设计
Modbus 是轮询式,要设计流量,而不是让它自然发生。寄存器按块分组,用一次请求读取。轮询周期要匹配数值:电表的电能寄存器不需要和压力传感器同样的速率。串行线长度与波特率不要没有余量。TCP 上要关注连接数、超时与重连行为。某个设备慢时,应把它隔离,避免拖慢整个轮询周期。好的集成文档会写明预期周期,以及设备不应答时如何处理。轮询不是中性设置;它决定告警被看到的速度,也决定还剩多少带宽给其他通信。多个设备的轮询要错开,不要同时启动。超时应长于设备最坏响应时间,重试次数不要成倍放大延迟。
- 寄存器分块与读取长度
- 按数值类型设定轮询周期
- 串行波特率、校验与终端电阻
- TCP 连接数与重试
网关选择与拓扑
把 Modbus RTU 设备接入 IP 网络,或把串行网段接到没有串口的平台,通常需要网关。选择依据是端口数量、支持的模式、允许的寄存器映射、提供的隔离与诊断能力。透明网关直接转发请求;映射网关在内部维护寄存器表。透明更易调试,映射可以减少流量并保护设备。无论哪种,都要记录网关配置并保留备份。多个主站共用一条线时,要定义哪个主站拥有设备、冲突如何解决。网关不能替代寄存器表。要确认它支持设备实际使用的波特率、校验与停止位,能否在无串行冲突的情况下轮询多个从站,以及固件与配置是否纳入变更控制。
- RTU 转 TCP 网关或原生串口
- 透明转发与映射寄存器
- 端口数量、隔离与诊断
- 多主站归属与冲突规则
测试与调试
一次测试一个设备。读取已知值,与设备显示对照。写入一个安全的设定值,确认设备接受。缩放要在整个量程上检查,不能只看一个点。断开设备,确认平台显示通信故障,而不是冻结的数值。电表要在一段时间后对比电能累积与表内寄存器。逆变器要确认状态字与故障位解码正确。记录寄存器、原始值、换算值与结果。只读对一次的寄存器不算调试完成,只是候选。测试应能被下一位工程师重复。测试边界值:零、满量程,以及刚好超出告警限值的值。测试一个设备应当拒绝的写入,并确认它确实被拒绝。测试设备和网关各自断电再上电后的恢复。
- 已知值读取并与本地显示对照
- 安全写入与反馈
- 全量程缩放检查
- 通信中断与恢复
- 电表累积核对
文档、责任与保护措施
Modbus 没有标准对象模型、设备发现与内置认证。寄存器表相同的设备,行为也可能不同。有些厂商只文档化希望被读取的寄存器,而不是平台需要的全部。串行网段在电气上很脆弱,一个接错的设备就能拖垮总线。TCP 设备可能只接受少量连接。保护措施很实际:隔离网段、记录每个寄存器、限制写权限、测试失效模式,并在移交包保留一份本地寄存器表。责任应在设备供应商、自控承包商与网络所有者之间划分并写下来。不要把 Modbus TCP 直接暴露在互联网上;网络分段与访问控制就是安全模型。记录谁可以写每个寄存器、为什么。只存在于安装商笔记本里的寄存器表,不算文档。
- 没有发现机制:配置前先盘点
- 没有标准对象模型:全部文档化
- 串行网段隔离与终端电阻
- 写权限受限并留痕
- 移交包保留寄存器表
Modbus 寄存器定义
14 行| 字段 | 需要记录 | 为什么重要 |
|---|---|---|
| 从站地址 | 单元号或设备 ID | 避免总线地址冲突 |
| 功能码 | 读写线圈或寄存器 | 决定请求类型 |
| 寄存器地址 | 十进制或十六进制,基数约定 | 避免差一位的映射错误 |
| 数据类型 | 16/32 位、有符号、浮点 | 决定正确的解码方式 |
| 字序 | 高字在前或低字在前 | 避免数值错乱 |
| 缩放 | 系数、偏移、单位 | 得到工程量 |
| 位域 | 告警与状态位含义 | 解码打包状态字 |
| 轮询 | 周期、块大小、超时 | 决定流量与响应 |
| 串行参数 | 波特率、校验、停止位 | 匹配设备与网关 |
| 终端与隔离 | 偏置、终端电阻、网段长度 | 保持总线电气稳定 |
| 写权限 | 哪些寄存器可写 | 保护设备与数据 |
| 网关模式 | 透明或映射、端口数量 | 决定行为与诊断方式 |
| 测试记录 | 原始值、换算值、结果 | 证明点位可用 |
| 移交寄存器表 | 带版本的寄存器表与设备固件 | 让后续变更可行 |
项目图景
3 张图片


常见问题
01Modbus RTU 与 TCP 有什么区别?
RTU 走串行线,使用从站地址;TCP 走以太网,使用 IP 地址与单元标识。寄存器模型相似,但布线、时序与诊断不同。
02可以接入我们的电表吗?
通常可以,前提是电表提供有文档的 Modbus 寄存器表,且通信参数已知。审计会确认寄存器表、接口,以及数值能否按所需周期读取。
03为什么 Modbus 数值差了倍数?
常见原因是缩放或字序。跨两个寄存器的 32 位值可能需要交换,电表也可能使用不同单位。寄存器表与已知值测试可以定位问题。
04Modbus 与 BACnet 可以一起用吗?
可以。平台可以同时读取 Modbus 电表与 BACnet 机房设备,再汇入同一模型。只有当两个网络无法直接连接时才需要网关。
05Modbus 支持告警吗?
没有标准告警模型。告警从状态位解码,或由平台计算。点位表应定义每个位的含义。
06一条 Modbus 线可以接多少设备?
取决于电气限制、设备负载与轮询时间。设计应确认网段长度、波特率、终端电阻与预期响应时间,而不只是地址范围。
07可以通过 Modbus 写设定值吗?
通常可以,前提是设备暴露可写寄存器,且项目授予控制权限。写入应受限、留痕并测试,同时定义通信失败时的回退方式。
08Modbus 安全吗?
Modbus 本身没有认证或加密。安全性来自网络隔离、访问控制与写入限制。不应把它直接暴露在互联网上。
下一步
把建筑交给我们。
告诉我们建筑类型、纳入范围的系统,以及你需要的结果。我们会给出通往可用系统的最短路径。