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