Modbus读线圈命令详解

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

你可能感兴趣的:(工控)