一:Modbus寄存器种类说明
1:线圈状态
输出端口,可设定端口的输出状态,也可以读取该位的输出状态;
2:离散输入状态
输入端口,通过外部设定改变输入状态,可读但不可写;
3:保持寄存器
控制器运行时被设定的某些参数,可读可写;
4:输入寄存器
控制器运行时从外部设备获得的某些参数,可读不可写;
二:Modbus功能码简述
功能码可以分为位操作和字节操作,位操作的最小单位是Bit,字节操作的最小单位为2个字节(Byte).
1:位操作指令
读线圈状态01H、读离散输入状态02H、写单个线圈05H、写多个线圈0FH.
2:字节操作指令
读保存寄存器03H、读输入寄存器04H、写单个保存寄存器06H、写多个保存寄存器10H.
三:Modbus寄存器PLC地址 和 寄存器协议地址简述
1:寄存器PLC地址
PLC地址是控制器中的地址,采用十进制数表示,共5位,第一位表示寄存器的类型,详见下表;
2:寄存器协议地址
由于功能码和PLC地址的前缀(5位数据的最高位)相对应,所以不区分前缀,用后边的四位数据表示,且需要转换成16进制;
四:Modbus汇总
1、“01”读取线圈状态发送:
功能代码 | 1字节 | 0x01 |
起始地址 | 2字节 | 0x0000~0xFFFF |
线圈数量 | 2字节 | 1~2000(0x7D0) |
功能代码 | 1字节 | 0x01 |
字节数 | 1字节 | N |
线圈状态 | n字节 | n = 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 |
出错时的返回:
功能代码 | 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字节 |
出错时的返回:
功能代码 | 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字节 |
接收:
功能代码 | 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字节 |
接收:
功能代码 | 1字节 | 0x10 |
起始地址 | 2字节 | 0x0000~0xFFFF |
写入寄存器个数 | 2字节 | 0x0001或0x007B |
功能代码 | 1字节 | 0x90 |
错误代码 | 1字节 | 01/02/03/04 |
例子:
4.支持的MODBUS功能码
功能码02H: 读取开关量输入(读实遥信和虚遥信)。
功能码03H:读取保持寄存器(读事件记录等)
功能码04H:读取输入寄存器(读远动遥测)
功能码05H:强制单点继电器输出(远方复归、单步的遥控跳闸、遥控合闸)。
功能码06H:向保持寄存器写单个字(遥控跳闸、遥控合闸的选择和执行操作)