ModBus TCP 分布式远程IO数据采集模块系统耦合器BL200 Modbus功能码0x06写单个寄存器
ModBus TCP 分布式远程IO数据采集模块系统耦合器BL200 Modbus
功能码0x06写单个寄存器
此功能码用于写入单个远程设备中的保持寄存器。请求PDU指定起始寄存器的地址和寄存器的数量。响应消息中的寄存器数据被打包为每个寄存器两个字节,每个字节内的二进制内容靠右对齐。
该功能码只适用读取串口I/O模块寄存器映射数据,地址范围: 40000 ... 49999 。模拟输入输出 I/O模块的数据类型是32Bit Float 格式,无法读取完整数据,不可以使用该功能。
1. 请求
表 1:功能码0x06-请求报文
字段名称 | 字节数 | 示例 | 说明 |
事务标识符 | 2 Byte | 0x00 01 | Modbus请求/响应事务处理的识别 |
协议标识符 | 2 Byte | 0x00 00 | 0x00 00 :Modbus协议 |
报文长度 | 2 Byte | 0x00 06 | 后面数据的字节数 |
设备地址 | 1 Byte | 0x01 | 从站的地址识别 |
功能码 | 1 Byte | 0x06 | 写单个保持寄存器,用功能码0x06 |
寄存器地址 | 2 Byte | 0x9C 40 | 地址详见“Modbus 寄存器映射”章节 |
数据 | 2 Byte | 0x04 D2 |
2. 响应
表 2:功能码0x06-响应报文
字段名称 | 字节(Byte) | 示例 | 说明 |
事务标识符 | 2 Byte | 0x00 00 | Modbus请求/响应事务处理的识别 |
协议标识符 | 2 Byte | 0x00 00 | 0x00 00 :Modbus协议 |
报文长度 | 2 Byte | 0x00 06 | 后面数据的字节数 |
设备地址 | 1 Byte | 0x01 | 从站的地址识别 |
功能码 | 1 Byte | 0x06 | 写单个保持寄存器,用功能码0x06 |
寄存器地址 | 2 Byte | 0x75 30 | |
数据 | 2 Byte | 0x04 D2 |
3. 异常
表 3:功能码0x06-异常
字段名称 | 字节(Byte) | 示例 | 说明 |
… | |||
功能码 | 1 Byte | 0x86 | Modbus功能码 + 0x80 |
异常编码 | 1 Byte | 0x01 | 0x01 或 0x02 |
4. 示例
将寄存器地址40000的值写入1234 (0x04 D2).
请求
0x00 01 00 00 00 06 01 06 9C 40 04 D2
表 4:功能码0x06-请求报文-示例
Byte | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
Data | 00 01 | 00 00 | 00 06 | 01 | 06 | 9C 40 | 04 D2 | |||||
说明 | 事务标识符 | 协议标识符 | 报文长度 | 设备地址 | 功能码 | 寄存器地址 | 数据 |
响应
0x00 01 00 00 00 06 01 06 9C 40 04 D2
表 5:功能码0x06-响应报文-示例
Byte | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
Data | 00 01 | 00 00 | 00 06 | 01 | 0F | 9C 40 | 04 D2 | |||||
说明 | 事务标识符 | 协议标识符 | 报文长度 | 设备地址 | 功能码 | 寄存器地址 | 数据 |