Modbus协议名词
线圈寄存器:开关量,用一个bit的数据来表示,支持读写;
离散输入寄存器:开关量,用一个bit的数据表示,只读;
保持寄存器:存放具体的数据量,用两个byte表示,支持读写;
输入寄存器:存放具体的数据量,用两个byte表示,只读;
Modbus常用功能码
功能码 | 名称 | 位/字操作 | 操作数 |
---|---|---|---|
01 | 读线圈寄存器 | 位操作 | 单个或多个 |
02 | 读离散输入寄存器 | 位操作 | 单个或多个 |
03 | 读保持寄存器 | 字操作 | 单个或多个 |
04 | 读输入寄存器 | 字操作 | 单个或多个 |
05 | 写单个线圈 | 位操作 | 单个 |
06 | 写单个寄存器 | 字操作 | 单个 |
0F | 写多个线圈 | 位操作 | 多个 |
10 | 写多个寄存器 | 字操作 | 多个 |
Modbus帧解析
从站号(1字节) | 功能码(1字节) | 起始地址(2字节) | 寄存器数量(2字节) | 校验码(2字节) |
---|---|---|---|---|
01 | 03 | 12 06 | 00 01 | 61 73 |
上述帧表示主站请求帧。主站向从站1读取保持寄存器的值,被读取保持寄存器的地址为0x1206,读取寄存器数量为1个寄存器,1个寄存器对应两个byte。
从站号(1字节) | 功能码(1字节) | 字节数(1字节) | 寄存器值(N字节) | 校验码(2字节) |
---|---|---|---|---|
01 | 03 | 02 | 00 5E | 39 BC |
上述帧为从站响应帧,寄存器的长度为2个字节,值为0x005E,响应帧寄存器值的字节数=请求寄存器数量*2。