Modbus协议基础
Modbus协议是工业自动化领域最广泛使用的通信协议之一,尤其在PLC、DCS、传感器、变频器等设备之间的数据传输中应用广泛。它由Modicon公司(现为施耐德电气的一部分)于1979年提出,用于可编程逻辑控制器之间的通信。
Modbus协议的基本特点:
- 简单、易实现。
- 开放标准,厂商兼容性强。
- 支持主从通信模式(Master-Slave)。
- 数据传输效率高,但功能相对简单。
Modbus协议的通信模式:
主从模式:
- 主站(Master):发送命令、读取或写入数据。
- 从站(Slave):接收命令、返回数据或执行操作。
请求与响应:
- 主站发送请求(如读取寄存器值)。
- 从站收到请求后处理并返回响应。
多从站:
- 一条总线上可以有多个从站,每个从站有唯一的地址(1~247)。
Modbus协议的通信方式:
Modbus RTU(Remote Terminal Unit)
- 基于串行通信(RS-232/RS-485)。
- 数据以二进制形式传输。
- 优点:效率高,占用带宽小。
- 常用于工业现场设备。
Modbus ASCII
- 基于串行通信(RS-232/RS-485)。
- 数据以ASCII码形式传输。
- 优点:便于人工调试。
- 缺点:通信效率比RTU低。
Modbus TCP/IP
- 基于以太网通信(TCP/IP协议)。
- 数据封装在TCP数据包中传输。
- 优点:支持网络化、大量设备连接、易于集成。
- 现在工业物联网中应用广泛。
数据结构:
Modbus使用“寄存器(Register)”存储数据,每个寄存器占16位。主要类型有:
| 类型 | 功能 | 地址范围 | 说明 |
| Coil(线圈) | 读/写 | 00001~09999 | 离散输出,单个位 |
| Discrete Input(离散输入) | 只读 | 10001~19999 | 单个位输入 |
| Input Register(输入寄存器) | 只读 | 30001~39999 | 16位模拟输入 |
| Holding Register(保持寄存器) | 读/写 | 40001~49999 | 16位模拟输出或参数 |
常用功能码(Function Code)
功能码用于告诉从站主站请求的操作类型。常用的有:
| 功能码 | 功能 | 说明 |
| 01 | 读线圈状态 | 读取离散输出 |
| 02 | 读离散输入 | 读取离散输入 |
| 03 | 读保持寄存器 | 读取可写寄存器 |
| 04 | 读输入寄存器 | 读取只读寄存器 |
| 05 | 写单个线圈 | 控制输出 |
| 06 | 写单个寄存器 | 写单个模拟量 |
| 15 | 写多个线圈 | 批量输出控制 |
| 16 | 写多个寄存器 | 批量写入模拟量 |
通信流程:
主站发送请求:
- 包含从站地址、功能码、数据地址、数据长度等。
从站解析请求:
- 根据功能码执行操作(读/写)。
从站返回响应:
- 成功返回数据,失败返回异常码。
主站处理响应:
- 对读取的数据进行处理,或确认写入成功。
Modbus协议的应用:
- 工业自动化控制:PLC与传感器、执行器之间通信。
- 数据采集系统(SCADA/DCS):实时监控现场数据。
- 工业物联网:通过Modbus TCP/IP连接设备到上位机系统。