一、协议详解
地址域 功能码 数据 差错检验
modbus 使用“big-Endian”表示地址和数据项,这就意味着当发射多个字节时,首先发送最
高字节。
例如:寄存器地址为 0x0014,首先发送的是 0x00,然后才是 0x14;
一个正常的 modbus 响应:响应功能码=请求功能码
一个 modbus 的异常响应:响应功能码=请求功能码+0x80
提供一个异常码来指示差错原因
功能码描述
01 读线圈
可以使用此功能码读取继电器 DO1~DO4 的状态
请求 PDU 详细说明了起始地址,即指定第一个线圈的地址和线圈数量,从零开始寻址
线圈,因此寻址线圈 1-4 为 0-3.
响应 PDU 中 N 个字节的线圈状态的每一个 bit 位代表一个线圈的状态,状态 1=ON,
0=OFF。第一个字节的最低位 LSB 代表第 0 号线圈的状态(即起始地址指定的线圈号为 0 号
线圈),其他线圈依次类推,一直到这个字节的最高位 MSB 为止,并且后续字节中都是由
低到高代表连续的各线圈状态。
如果线圈数量不是 8 的倍数,将用零填充剩余最后数据字节中的剩余比特,字节数量
域说明了数据的完整字节数。
请求 PDU
地址 1 个字节
功能码 1 个字节
0x01
起始地址 2 个字节 0x0014 至 0x0017
线圈数量 2 个字节 n(1 至 4)
CRC 校验 2 个字节
响应 PDU
地址 1 个字节
功能码 1 个字节
0x01
字节数 1 个字节
N
线圈状态 N 个字节 N=n/8, 或 N=n/8+1
CRC 校验 2 个字节
注: 线圈状态的字节数 N=线圈数量 n/8, 如果余数不等于 0,则 N=n/8+1
错误响应 PDU
评论1