Modbus 寄存器映射实战(地址偏移 / 数据类型 / 字节序)
Modbus寄存器映射需要同时确认数据区、地址基准、类型、单位倍率和设备手册版本。读到一个“看起来合理”的数值只是候选解释;必须用已知量及原始回包复核,不能因某一种字序接近室温就直接定版。
本文依据Application Protocol 1.1b3、Serial Line 1.02和TCP实现指南1.0b,保留地址与数据布局教程,修正跨寄存器统一性、TCP消息边界及批量写原子性的过度结论。下例均为合成样本,未接真实仪表。
数据区、功能码与参考编号
| 数据区 | 常用功能码(十六进制) | 传统参考编号 | 协议地址 |
|---|---|---|---|
| 线圈 | 01读、05写单个、0F写多个 | 00001起 | 从0开始的地址字段 |
| 离散输入 | 02读 | 10001起 | 同上 |
| 输入寄存器 | 04读 | 30001起 | 同上 |
| 保持寄存器 | 03读、06写单个、10写多个 | 40001起 | 同上 |
若手册明确使用传统40001编号,则40011对应PDU地址10,即0x000A。若手册已直接列0基地址,就不要再次减1。40001不是发送报文中的完整地址值,功能码决定数据区。工具可能替用户转换,必须保存实际线上请求确认。
映射表必须带单位与已知量
| 业务量 | 文档与地址约定 | 原始寄存器 | 解码 | 结果 |
|---|---|---|---|---|
| 合成温度A | demo-v1;FC03;PDU0;两寄存器 | 0x41C8、0x0000 | IEEE754 float32;ABCD;°C | 25.0°C |
| 合成温度B | 同上 | 0x4148、0x0000 | 同上 | 12.5°C |
| 合成定点温度 | demo-v2;PDU2;一寄存器 | 2530 | UINT16×0.01°C | 25.30°C |
这些数值可本地计算复核,不是传感器测量。要确认地址,还应另读设备手册允许的已知固定量;数值相似无法证明访问了正确寄存器。类型、无效值和量程都写入表,不能只留“温度地址0”。
字节序与跨寄存器布局
规范字段的多字节值高字节先传,但跨多个寄存器的32位应用类型由设备映射定义。ABCD、BADC、CDAB、DCBA是常用候选重排记法,必须明确A/B/C/D代表原始哪四个字节。重排不改变线上16位寄存器字节顺序的规范要求。
INT32、UINT32、float32都占两个16位寄存器,但解码完全不同。字符串也不能统一假定ASCII或每寄存器恰好两个有效字符。不同业务量可能使用不同布局,不能验证一个量后全机照搬。完整候选输出与双已知量演示见Modbus已知值字节序验证。
异常响应与RTU计时
| 异常码 | 规范类别 | 排查方向 |
|---|---|---|
| 01 | 非法功能 | 功能是否支持 |
| 02 | 非法数据地址 | 地址、数量及映射范围 |
| 03 | 非法数据值 | 请求结构或允许参数;不等于所有应用值越界都用此码 |
| 04 | 服务器设备故障 | 对照设备故障记录 |
| 06 | 服务器忙 | 按设备要求处理,避免紧密重发 |
异常响应功能码为请求功能码加0x80。没有响应也可能是通信、广播、无效帧或设备状态问题,不能说处理不了就一定返回异常。
RTU以静默间隔界定帧,Serial Line 1.02规定t1.5/t3.5;高于19200bps建议固定750微秒和1.750毫秒。字符时间取决于实际帧格式,例如9600bps下11位字符约1.146毫秒,不能一律用8N1的10位字符估算所有Modbus配置。USB接收回调间隔不等于线上字节间隔,需区分采集层次。
TCP本身没有应用消息边界,Modbus TCP依MBAP长度字段重组,不用RTU CRC与静默时间。一次socket读取可能只有半帧或包含多帧。Unit ID在网关寻址中的验证见网关后的从站号核对。
批量访问和写超时
FC03/04标准最大读取125个寄存器,实际设备可能限制更少;合并范围内有未定义地址也可能被拒绝。FC10减少请求次数,但不自动保证设备业务动作整体原子完成,更不能保证丢失应答后未执行。
写超时需区分目标值与触发类副作用,先回读或查询动作记录,再决定是否重发。地址、单位或读写属性换版时,按寄存器手册版本差异维护映射版本,不把旧写命令直接迁移。
下载和复现
双已知值与四种重排JSON保存原始字节和期望25.0、12.5。先按IEEE754解码复核,再用空白映射表记录型号、固件、手册、地址、单位和已知量来源。该演算不验证接线、仪表准确度或设备写入能力。
一级依据
核对日期2026-10-23。实际映射与业务副作用仍以对应设备手册为准。
相关阅读
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。