ModBus TCP 分布式远程IO数据采集模块系统耦合器BL200 Modbus 功能码0x04读输入寄存器
ModBus TCP 分布式远程IO数据采集模块系统耦合器BL200 Modbus
功能码0x04(读输入寄存器)
此功能码用于读取多个远程设备中的连续输入寄存器。请求PDU指定起始寄存器的地址和寄存器的数量。响应消息中的寄存器数据被打包为每个寄存器两个字节,每个字节内的二进制内容靠右对齐。
1. 请求
表 1:功能码0x04-请求报文
字段名称 | 字节数 | 示例 | 说明 |
事务标识符 | 2 Byte | 0x00 01 | Modbus请求/响应事务处理的识别 |
协议标识符 | 2 Byte | 0x00 00 | 0x00 00 :Modbus协议 |
报文长度 | 2 Byte | 0x00 06 | 后面数据的字节数 |
设备地址 | 1 Byte | 0x01 | 从站的地址识别 |
功能码 | 1 Byte | 0x04 | 读输入寄存器,用功能码0x04 |
起始地址 | 2 Byte | 0x0B B8 | 地址详见“Modbus 寄存器映射”章节 |
寄存器数量 | 2 Byte | 0x00 08 |
2. 响应
字段名称 | 字节(Byte) | 示例 | 说明 |
事务标识符 | 2 Byte | 0x00 00 | Modbus请求/响应事务处理的识别 |
协议标识符 | 2 Byte | 0x00 00 | 0x00 00 :Modbus协议 |
报文长度 | 2 Byte | 0x00 13 | 后面数据的字节数 |
设备地址 | 1 Byte | 0x01 | 从站的地址识别 |
功能码 | 1 Byte | 0x04 | 读输入寄存器,用功能码0x04 |
字节数 | 1 Byte | 0x10 | |
数据 | 16 Byte | 0x 3F 8E 38 86 40 0E 38 86 40 55 54 CA 40 8E 35 3F |
3. 异常
字段名称 | 字节(Byte) | 示例 | 说明 |
… | |||
功能码 | 1 Byte | 0x84 | Modbus功能码 + 0x80 |
异常编码 | 1 Byte | 0x01 | 0x01 或 0x02 |
4. 示例
从地址3000开始,读4个模拟输入的值。由于BL200耦合器节点寄存器映射数据类型是32Bit Float,即1个模拟输入数据 = 2个寄存器 = 4个字节 ,因此需要读8个输入寄存器。
请求
0x00 01 00 00 00 06 01 04 0B B8 00 08
Byte | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
Data | 00 01 | 00 00 | 00 06 | 01 | 04 | 0B B8 | 00 08 | |||||
说明 | 事务标识符 | 协议标识符 | 报文长度 | 设备地址 | 功能码 | 起始地址 | 寄存器数量 |
响应
0x00 01 00 00 00 13 01 04 10 3F 9D 70 A4 40 15 C2 8F 40 5C CC CD 40 91 EB 85
Byte | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10…25 |
Data | 00 01 | 00 00 | 00 13 | 01 | 04 | 10 | xxx | |||
说明 | 事务标识符 | 协议标识符 | 报文长度 | 设备地址 | 功能码 | 字节数 | 数据 |
其中数据部分共16个字节,转换成十进制如下:
Byte | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
Data | 3F 9D 70 A4 | 40 15 C2 8F | 40 5C CC CD | 40 91 EB 85 | ||||||||||||
十进制 | 1.23 | 2.34 | 3.45 | 4.56 | ||||||||||||
说明 | 第一个数据 | 第二个数据 | 第三个数据 | 第四个数据 |