modbus功能码及格式

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
例子:
4.支持的modbus功能码
  功能码02h: 读取开关量输入(读实遥信和虚遥信)。
功能码03h:读取保持寄存器(读事件记录等)
功能码04h:读取输入寄存器(读远动遥测)
功能码05h:强制单点继电器输出(远方复归、单步的遥控跳闸、遥控合闸)。
功能码06h:向保持寄存器写单个字(遥控跳闸、遥控合闸的选择和执行操作)
功能码10h: 向保持寄存器(内存区)写多个16位的字(通讯对时)。