Modbus RTU 报文格式及注意事项

线圈寄存器 开关量 位操作 可读可写 0x01 0x05 0x0f
离散输入寄存器 开关量 位操作 只读 0x02
保持寄存器 具体值 字操作 可读可写 0x03 0x06 0x10
输入寄存器 具体值 字操作 只读 0x04

读操作

命令 从机地址 功能码 寄存器起始地址 寄存器数量 CRC
字节数 1 1 2 2 2
响应 从机地址 功能码 数据字节长度 数据字节 CRC
字节数 1 1 1 分为读字和读位两种情况 2

读位:

命令:02 01 00 00 00 03 7C 38
告诉从机02,要读取从0开始的连续三个位寄存器,校验码是7C 38
响应:02 01 01 05 91 CF
02为从机地址,01为功能码,第二个01表示接下来的数据有1个字节(8个位)。05是十六进制表示,转换为二进制0000 0101,即所读的寄存器1是0,寄存器2是0,寄存器3是1.

写操作

写单个寄存器

命令 从机地址 功能码 寄存器起始地址 写入值 CRC
字节数 1 1 2 2 2
响应 原帧发送给主机

写多个寄存器

命令 从机地址 功能码 寄存器起始地址 寄存器数量 写入数据字节长度 数据 CRC
字节数 1 1 2 2 1 分写字/写位两种情况 2
响应 从机地址 功能码 寄存器起始地址 寄存器数量 CRC
字节数 1 1 2 2 2

注意;

1. Modbus传输的最小单位是字节,数据部分报文是16进制表示,一个数表示4位。
2.低地址的寄存器数据先进入发送报文。
3.报文中的起始地址、寄存器数量都是高字节在前。
4.读字时,1字=2字节,数据字节长度=所读寄存器数量×2;读位时,需要具体讨论。
5.主机是主动发起请求的,从机是只会响应的。

注:本人刚学习modbus,文章仅供参考,如有错误请谅解

posted @ 2025-03-24 23:26  18岁李美人带俩娃  阅读(410)  评论(0)    收藏  举报