①ASCII码模式:
⑴MODBUS 主机询问请求
MODBUS 主机采用ASCII码模式,向地址为1的从机,询问起始地址为0的线圈(继电器和输出光耦)的输出状态,总共询问的数量为8。
请求代码:3A 30 31 30 31 30 30 30 30 30 30 30 38 46 36 0D 0A
说明 | 字节说明 | 使用举例 |
前导码 | 1 BYTE | 0X3A(‘:’) |
MODBUS从机地址 | 1 BYTE | 0X30(‘0’) |
MODBUS从机地址 | 1 BYTE | 0X31(‘1’) |
功能码高位 | 1 BYTE | 0X30(‘0’) |
功能码低位 | 1 BYTE | 0X31(‘1’) |
起始地址高字节高位 | 1 BYTE | 0X30(‘0’) |
起始地址高字节低位 | 1 BYTE | 0X30(‘0’) |
起始地址低字节高位 | 1 BYTE | 0X30(‘0’) |
起始地址低字节低位 | 1 BYTE | 0X30(‘0’) |
读取数量高字节高位 | 1 BYTE | 0X30(‘0’) |
读取数量高字节低位 | 1 BYTE | 0X30(‘0’) |
读取数量低字节高位 | 1 BYTE | 0X30(‘0’) |
读取数量低字节低位 | 1 BYTE | 0X38(‘8’) |
LRC校验码低字节 | 1 BYTE | 0X46 |
LRC校验码高字节 | 1 BYTE | 0X36 |
尾码 CR | 1 BYTE | 0X0D |
尾码 LF | 1 BYTE | 0X0A |
⑵MODBUS 从机响应
MODBUS地址为1的从机接收到请求后,采用ASCII码模式,将起始地址为0的线圈(继电器和输出光耦)的输出状态,总数量为8,发送给Modbus主机。
其中继电器地址7-0状态为1-0-0-0-|0-0-0-1
响应代码:3A 30 31 30 31 30 31 38 31 37 43 0D 0A
说明 | 字节说明 | 使用举例 |
前导码 | 1 BYTE | 0X3A(‘:’) |
MODBUS从机地址高位 | 1 BYTE | 0X30(‘0’) |
MODBUS从机地址低位 | 1 BYTE | 0X31(‘1’) |
功能码高位 | 1 BYTE | 0X30(‘0’) |
功能码低位 | 1 BYTE | 0X31(‘1’) |
返回的读取数量高位 | 1 BYTE | 0X30(‘0’) |
返回的读取数量低位 | 1 BYTE | 0X31(‘1’) |
返回的数据值(1)高位 (地址7数据-地址4数据) | 1 BYTE | 0X38(‘8’) |
返回的数据值(1)低位 (地址3数据-地址0数据) | 1 BYTE | 0X31(‘1’) |
1=ON; 0=OFF。第一个返回数据的数据字节的LSB 为查询中的寻址地址,其他的线圈按顺序在该字节中由低位向高位排列,直至8个为止,下一个字节也是从低位向高位排例。 若返回的线圈数不是 8的倍数,则在最后的数据字节中的剩余位至字节的最高位全部填零。返回的数据值的数量N =读取数量/8 如果余数不为0 则N=N+1 | ||
LRC校验码低字节 | 1 BYTE | 0X37 |
LRC校验码高字节 | 1 BYTE | 0X43 |
尾码 CR | 1 BYTE | 0X0D |
尾码 LF | 1 BYTE | 0X0A |
⑶错误 响应
MODBUS地址为1的从机接收到请求后,发现命令格式错误或者校验通不过去,采用ASCII码模式,把相关错误代码发送给Modbus主机。
错误回传代码:3A 30 31 38 31 30 31 37 44 0D 0A
说明 | 字节说明 | 使用举例 |
前导码 | 1 BYTE | 0X3A(‘:’) |
MODBUS从机地址高位 | 1 BYTE | 0X30(‘0’) |
MODBUS从机地址低位 | 1 BYTE | 0X31(‘1’) |
功能码高位+8 | 1 BYTE | 0X38(‘8’) |
功能码低位 | 1 BYTE | 0X31(‘1’) |
错误类型码高位 | 1 BYTE | 0X30(‘0’) |
错误类型码低位 | 1 BYTE | 0X31(‘1’) |
LRC校验码低字节 | 1 BYTE | 0X37 |
LRC校验码高字节 | 1 BYTE | 0X44 |
尾码 CR | 1 BYTE | 0X0D |
尾码 LF | 1 BYTE | 0X0A |
②RTU模式:
⑴MODBUS 主机询问请求
MODBUS 主机采用RTU模式,向地址为1的从机,询问起始地址为0的线圈(继电器和输出光耦)的输出状态,总共询问的数量为8。
请求代码:01 01 00 00 00 08 3D CC
说明 | 字节说明 | 使用举例 |
MODBUS从机地址 | 1 BYTE | 0X01 |
功能码 | 1 BYTE | 0X01 |
起始地址高字节 | 1 BYTE | 0X00 |
起始地址低字节 | 1 BYTE | 0X00 |
读取数量高字节 | 1 BYTE | 0X00 |
读取数量低字节 | 1 BYTE | 0X08 |
CRC校验码低字节 | 1 BYTE | 0X3D |
CRC校验码高字节 | 1 BYTE | 0XCC |
⑵MODBUS 从机响应
MODBUS地址为1的从机接收到请求后,采用RTU模式,将起始地址为0的线圈(继电器和输出光耦)的输出状态,总数量为8,发送给Modbus主机。
其中继电器地址7-0状态为1-0-0-0-|0-0-0-1
响应代码:01 01 01 81 91 E8
说明 | 字节说明 | 使用举例 |
MODBUS从机地址 | 1 BYTE | 0X01 |
功能码 | 1 BYTE | 0X01 |
返回的读取数量 | 1 BYTE | 0X01 |
返回的数据值(1) (地址7数据-地址0数据) | 1 BYTE | 0X81 |
1=ON; 0=OFF。第一个返回数据的数据字节的LSB 为查询中的寻址地址,其他的线圈按顺序在该字节中由低位向高位排列,直至8个为止,下一个字节也是从低位向高位排例。 若返回的线圈数不是 8的倍数,则在最后的数据字节中的剩余位至字节的最高位全部填零。返回的数据值的数量N =读取数量/8 如果余数不为0 则N=N+1 | ||
CRC校验码低字节 | 1 BYTE | 0X91 |
CRC校验码高字节 | 1 BYTE | 0XE8 |
⑶错误 响应
MODBUS地址为1的从机接收到请求后,发现命令格式错误或者校验通不过去,采用RTU模式,把相关错误代码发送给Modbus主机。
错误回传代码:01 81 01 81 90
说明 | 字节说明 | 使用举例 |
MODBUS从机地址 | 1 BYTE | 0X01 |
功能码+0X80 | 1 BYTE | 0X81 |
返回的读取数量 | 1 BYTE | 0X01 |
CRC校验码低字节 | 1 BYTE | 0X81 |
CRC校验码高字节 | 1 BYTE | 0X90 |