MODBUS TCP
读寄存器 请求 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 事务处理标识 | 2个字节 | 高字节在前 | |
2 | 协议标识 | 2个字节 | 高字节在前 | |
3 | 长度 | 2个字节 | 高字节在前 | |
4 | 单元标识 | 1个字节 | 0x00-0xff | |
5 | 功能码 | 1个字节 | 0x03 | |
6 | 起始寄存器地址 | 2个字节 | 高字节在前 | |
7 | 寄存器个数 | 2个字节 | 高字节在前 |
读寄存器 回应 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 事务处理标识 | 2个字节 | 高字节在前 | |
2 | 协议标识 | 2个字节 | 高字节在前 | |
3 | 长度 | 2个字节 | 高字节在前 | |
4 | 单元标识 | 1个字节 | 0x00-0xff | |
5 | 功能码 | 1个字节 | 0x03 | |
6 | 数据长度 | 1个字节 | 寄存器个数*2 | |
7 | 数据 | 寄存器个数 *2个字节 | 每个寄存器 高字节在前 |
写单个 寄存器 请求 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 事务处理标识 | 2个字节 | 高字节在前 | |
2 | 协议标识 | 2个字节 | 高字节在前 | |
3 | 长度 | 2个字节 | 高字节在前 | |
4 | 单元标识 | 1个字节 | 0x00-0xff | |
5 | 功能码 | 1个字节 | 0x10 | |
6 | 寄存器地址 | 2个字节 | 高字节在前 | |
7 | 寄存器数值 | 2个字节 | 高字节在前 |
写单个 寄存器 回应 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 事务处理标识 | 2个字节 | 高字节在前 | |
2 | 协议标识 | 2个字节 | 高字节在前 | |
3 | 长度 | 2个字节 | 高字节在前 | |
4 | 单元标识 | 1个字节 | 0x00-0xff | |
5 | 功能码 | 1个字节 | 0x10 | |
6 | 寄存器地址 | 2个字节 | 高字节在前 | |
7 | 寄存器数值 | 2个字节 | 高字节在前 |
写多个 寄存器 请求 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 事务处理标识 | 2个字节 | 高字节在前 | |
2 | 协议标识 | 2个字节 | 高字节在前 | |
3 | 长度 | 2个字节 | 高字节在前 | |
4 | 单元标识 | 1个字节 | 0x00-0xff | |
5 | 功能码 | 1个字节 | 0x10 | |
6 | 起始寄存器地址 | 2个字节 | 高字节在前 | |
7 | 寄存器个数 | 2个字节 | 高字节在前 | |
8 | 数据长度 | 1个字节 | 寄存器个数*2 | |
9 | 数据 | 寄存器个数 *2个字节 | 每个寄存器 高字节在前 |
写多个 寄存器 回应 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 事务处理标识 | 2个字节 | 高字节在前 | |
2 | 协议标识 | 2个字节 | 高字节在前 | |
3 | 长度 | 2个字节 | 高字节在前 | |
4 | 单元标识 | 1个字节 | 0x00-0xff | |
5 | 功能码 | 1个字节 | 0x10 | |
6 | 起始寄存器地址 | 2个字节 | 高字节在前 | |
7 | 寄存器个数 | 2个字节 | 高字节在前 |
错误返回 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 事务处理标识 | 2个字节 | 高字节在前 | |
2 | 协议标识 | 2个字节 | 高字节在前 | |
3 | 长度 | 2个字节 | 高字节在前 | |
4 | 单元标识 | 1个字节 | 0x00-0xff | |
5 | 功能码 | 1个字节 | 请求功能码+0x80 | |
6 | 错误码 | 1个字节 | 其代号见表格 |
错误代码 | 错误代号 | 意义 |
0x01 | 不支持该功能码 | |
0x02 | 越界 | |
0x03 | 寄存器数量超出范围 | |
0x04 | 读写错误 |
MODBUS RTU
读寄存器 请求 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 从设备地址 | 1个字节 | 0x00-0xff | |
2 | 功能码 | 1个字节 | 0x03 | |
3 | 起始寄存器地址 | 2个字节 | 高字节在前 | |
4 | 寄存器个数 | 2个字节 | 高字节在前 | |
5 | CRC校验码 | 2个字节 | 低字节在前 |
读寄存器 回应 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 从设备地址 | 1个字节 | 0x00-0xff | |
2 | 功能码 | 1个字节 | 0x03 | |
3 | 数据长度 | 1个字节 | 寄存器个数*2 | |
4 | 数据 | 寄存器个数 *2个字节 | 每个寄存器 高字节在前 | |
5 | CRC校验码 | 2个字节 | 低字节在前 |
写单个 寄存器 请求 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 从设备地址 | 1个字节 | 0x00-0xff | |
2 | 功能码 | 1个字节 | 0x10 | |
3 | 起始寄存器地址 | 2个字节 | 高字节在前 | |
4 | 寄存器数值 | 2个字节 | 高字节在前 | |
5 | CRC校验码 | 2个字节 | 低字节在前 |
写单个 寄存器 回应 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 从设备地址 | 1个字节 | 0x00-0xff | |
2 | 功能码 | 1个字节 | 0x10 | |
3 | 起始寄存器地址 | 2个字节 | 高字节在前 | |
4 | 寄存器数值 | 2个字节 | 高字节在前 | |
5 | CRC校验码 | 2个字节 | 低字节在前 |
写多个 寄存器 请求 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 从设备地址 | 1个字节 | 0x00-0xff | |
2 | 功能码 | 1个字节 | 0x10 | |
3 | 起始寄存器地址 | 2个字节 | 高字节在前 | |
4 | 寄存器个数 | 2个字节 | 高字节在前 | |
5 | 数据长度 | 1个字节 | 寄存器个数*2 | |
6 | 数据 | 寄存器个数 *2个字节 | 每个寄存器 高字节在前 | |
7 | CRC校验码 | 2个字节 | 低字节在前 |
写多个 寄存器 回应 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 从设备地址 | 1个字节 | 0x00-0xff | |
2 | 功能码 | 1个字节 | 0x10 | |
3 | 起始寄存器地址 | 2个字节 | 高字节在前 | |
4 | 寄存器个数 | 2个字节 | 高字节在前 | |
5 | CRC校验码 | 2个字节 | 低字节在前 |
错误返回 | 序号 | 意义 | 所占字节 | 字节存放格式 |
1 | 从设备地址 | 1个字节 | 0x00-0xff | |
2 | 功能码 | 1个字节 | 请求功能码+0x80 | |
3 | 错误码 | 1个字节 | 其代号见表格 | |
4 | CRC校验码 | 2个字节 | 低字节在前 |
错误代码 | 错误代号 | 意义 |
0x01 | 不支持该功能码 | |
0x02 | 越界 | |
0x03 | 寄存器数量超出范围 | |
0x04 | 读写错误 |
MODBUS RTU 功能码
下面“线圈”,“寄存器”其实分别为“位变量”,“16位变量”。
功能码 | 意义 |
0x01 | 读线圈 |
0x02 | 读离散量输入 |
0x03 | 读保持寄存器 |
0x04 | 读输入寄存器 |
0x05 | 写单个线圈 |
0x06 | 写单个寄存器 |
0x0F | 写多个线圈 |
0x10 | 写多个寄存器 |
Modbus RTU与Modbus TCP读指令对比
MBAP报头文 | 地址码 | 功能 码 | 寄存器 地址 | 寄存器 数量 | CRC校验 | |
RTU | 无 | 01 | 03 | 01 8E | 00 04 | 25 DE |
TCP | 00 00 00 00 00 06 00 | 无 | 03 | 01 8E | 00 04 | 无 |
指令的涵义:从地址码为01(TCP协议单元标志为00)的模块0x18E(01 8E)寄存器地址开始读(03)四个(00 04)寄存器。
Modbus RTU与Modbus TCP写指令对比
MBAP报头文 | 地址码 | 功能 码 | 寄存器 地址 | 寄存器 数量 | 数据 长度 | 正文 | CRC校验 | |
RTU | 无 | 01 | 10 | 01 8E | 00 01 | 02 | 00 00 | A8 7E |
TCP | 00 00 00 00 00 09 00 | 无 | 10 | 01 8E | 00 01 | 02 | 00 00 | 无 |
指令的涵义:从地址码为01(TCP协议单元标志为00)的模块0x18E(01 8E)寄存器地址开始写(10)一个(00 01)寄存器,具体数据长度为2个字节(02),数据正文内容为00 00(00 00)。