①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 |

1万+

被折叠的 条评论
为什么被折叠?



