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,文章仅供参考,如有错误请谅解
本文来自博客园,作者:{18岁李美人带俩娃},转载请注明原文链接:https://www.cnblogs.com/meirenli/p/18790409

浙公网安备 33010602011771号