modbus功能码及格式
来源:动视网
责编:小OO
时间:2025-10-01 23:56:54
modbus功能码及格式
1、“01”读取线圈状态发送:功能代码1字节0x01起始地址2字节0x0000~0xFFFF线圈数量2字节1~2000(0x7D0)接收:功能代码1字节0x01字节数1字节N线圈状态n字节n=N/N+1N=读取线圈个数/8,如果余数不为0则N=N+1出错时的返回:功能代码1字节0x81错误代码1字节01/02/03/04例子:2、“02”读取输入状态发送:功能代码1字节0x02起始地址2字节0x0000~0xFFFF输入点数量2字节1~2000(0x7D0)接收:功能代码1字节0x02字节数1
导读1、“01”读取线圈状态发送:功能代码1字节0x01起始地址2字节0x0000~0xFFFF线圈数量2字节1~2000(0x7D0)接收:功能代码1字节0x01字节数1字节N线圈状态n字节n=N/N+1N=读取线圈个数/8,如果余数不为0则N=N+1出错时的返回:功能代码1字节0x81错误代码1字节01/02/03/04例子:2、“02”读取输入状态发送:功能代码1字节0x02起始地址2字节0x0000~0xFFFF输入点数量2字节1~2000(0x7D0)接收:功能代码1字节0x02字节数1
1、“01”读取线圈状态
发送:
| 功能代码 | 1字节 | 0x01 |
| 起始地址 | 2字节 | 0x0000~0xFFFF |
| 线圈数量 | 2字节 | 1~2000(0x7D0) |
接收:
| 功能代码 | 1字节 | 0x01 |
| 字节数 | 1字节 | N |
| 线圈状态 | n字节 | n = N/N+1 |
N=读取线圈个数 / 8 ,如果余数不为0则N=N+1
出错时的返回:
| 功能代码 | 1字节 | 0x81 |
| 错误代码 | 1字节 | 01/02/03/04 |
例子:
2、“02”读取输入状态
发送:
| 功能代码 | 1字节 | 0x02 |
| 起始地址 | 2字节 | 0x0000~0xFFFF |
| 输入点数量 | 2字节 | 1~2000(0x7D0) |
接收:
| 功能代码 | 1字节 | 0x02 |
| 字节数 | 1字节 | N |
| 输入点状态 | n字节 | n = N/N+1 |
N=读取输入点个数 / 8 ,如果余数不为0则N=N+1
出错时的返回:
| 功能代码 | 1字节 | 0x82 |
| 错误代码 | 1字节 | 01/02/03/04 |
例子:
3、“03”保持型寄存器读取
发送:
| 功能代码 | 1字节 | 0x03 |
| 起始地址 | 2字节 | 0x0000~0xFFFF |
| 寄存器数量 | 2字节 | 1~125(0x7D) |
接收:
| 功能代码 | 1字节 | 0x03 |
| 字节数 | 1字节 | 2*N |
| 寄存器值 | N*2字节 | |
N=寄存器数量
出错时的返回:
| 功能代码 | 1字节 | 0x83 |
| 错误代码 | 1字节 | 01/02/03/04 |
例子:
4、“05”写单一线圈
发送:
| 功能代码 | 1字节 | 0x05 |
| 线圈地址 | 2字节 | 0x0000~0xFFFF |
| 写入值 | 2字节 | 0x0000或0xFF00 |
接收:
| 功能代码 | 1字节 | 0x05 |
| 线圈地址 | 2字节 | 0x0000~0xFFFF |
| 写入值 | 2字节 | 0x0000或0xFF00 |
出错时的返回:
| 功能代码 | 1字节 | 0x85 |
| 错误代码 | 1字节 | 01/02/03/04 |
例子:
5、“06”写单一寄存器
发送:
| 功能代码 | 1字节 | 0x06 |
| 寄存器地址 | 2字节 | 0x0000~0xFFFF |
| 写入值 | 2字节 | 0x0000~0xFFFF |
接收:
| 功能代码 | 1字节 | 0x06 |
| 寄存器地址 | 2字节 | 0x0000~0xFFFF |
| 写入值 | 2字节 | 0x0000~0xFFFF |
出错时的返回:
| 功能代码 | 1字节 | 0x86 |
| 错误代码 | 1字节 | 01/02/03/04 |
例子:
6、“15(0x0F)”写多线圈
发送:
| 功能代码 | 1字节 | 0x0F |
| 起始地址 | 2字节 | 0x0000~0xFFFF |
| 写入线圈个数 | 2字节 | 0x0001~0x07B0 |
| 写入字节数 | 1字节 | N |
| 写入值 | N字节 | |
N=写入线圈个数 / 8 ,如果余数不为0则N=N+1
接收:
| 功能代码 | 1字节 | 0x0F |
| 起始地址 | 2字节 | 0x0000~0xFFFF |
| 写入线圈个数 | 2字节 | 0x0001或0x07B0 |
出错时的返回:
| 功能代码 | 1字节 | 0x8F |
| 错误代码 | 1字节 | 01/02/03/04 |
例子:
7、“16(0x10)”写多寄存器
发送:
| 功能代码 | 1字节 | 0x10 |
| 起始地址 | 2字节 | 0x0000~0xFFFF |
| 写入寄存器个数 | 2字节 | 0x0001~0x007B |
| 写入字节数 | 1字节 | 2*N |
| 写入值 | N*2字节 | |
N=写入寄存器个数
接收:
| 功能代码 | 1字节 | 0x10 |
| 起始地址 | 2字节 | 0x0000~0xFFFF |
| 写入寄存器个数 | 2字节 | 0x0001或0x007B |
出错时的返回:
| 功能代码 | 1字节 | 0x90 |
| 错误代码 | 1字节 | 01/02/03/04 |
例子:
modbus功能码及格式
1、“01”读取线圈状态发送:功能代码1字节0x01起始地址2字节0x0000~0xFFFF线圈数量2字节1~2000(0x7D0)接收:功能代码1字节0x01字节数1字节N线圈状态n字节n=N/N+1N=读取线圈个数/8,如果余数不为0则N=N+1出错时的返回:功能代码1字节0x81错误代码1字节01/02/03/04例子:2、“02”读取输入状态发送:功能代码1字节0x02起始地址2字节0x0000~0xFFFF输入点数量2字节1~2000(0x7D0)接收:功能代码1字节0x02字节数1