modbus内容学习记录
modbus是什么?
Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。
modbus的构成
modbus由地址、功能码、数据和crc校验码构成:
功能码
功能码 | 功能说明 |
---|---|
0x01 | 读取输出线圈 |
02H | 读取输入线圈 |
03H | 读取保持寄存器 |
04H | 读取输入寄存器 |
05H | 写入单线圈 |
06H | 写入单寄存器 |
0FH | 写入多线圈 |
10H | 写入多寄存器 |
功能码解读
03H功能码:
请求读寄存器:
从机地址 | 功能码 | 起始地址(hight) | 起始地址(low) | 数量(hight) | 数量(low) | crc校验位 |
---|---|---|---|---|---|---|
0x01 | 0x03 | 0x00 | 0x01 | 0x00 | 0x01 | 0xD5 0xCA |
01:表示从机的地址;
03:查询功能,表示读取从机数据
0x0001: 表示读取数据的起始地址
ox0001:表示读取23个寄存器的数据
响应读寄存器功能:
从站地址 | 功能码 | 字节计数 | 字节1 | 字节2 | 校验 |
---|---|---|---|---|---|
0x01 | 0x03 | 0x0002 | 0x00 | 0x02 | 0xCB 0x65 |
01:表示从机地址
03:查询功能
0x0002:表示返回的数据字节数,即:寄存器数目*2
0x0002:表示寄存器的数值
0xCB65:是crc校验值
10H功能码(写多个寄存器):
写多个寄存器请求:
从站地址 | 功能码 | 起始地址 | 寄存器的数量 | 字节数 | 数据1 | 数据2 | crc校验 |
---|---|---|---|---|---|---|---|
0x01 | 0x03 | 0x0001 | 0x0002 | 0x04 | 0x0102 | 0x1011 | 0x09AE |
返回:
从站地址 | 功能码 | 起始地址 | 寄存器的数量 | crc校验 |
---|---|---|---|---|
0x01 | 0x03 | 0x0001 | 0x0002 | 0xAC0A |