Modbus协议是一种广泛应用于工业自动化领域的串行通信协议,由Modicon公司(现施耐德电气)于1979年开发,主要用于可编程逻辑控制器(PLC)之间的通信。该协议采用主从架构,支持单主多从通信模式,最多可连接247个从设备,已成为工业通信的实际标准。
核心特点
主从架构:Modbus采用请求-响应模式,主设备(Master)主动发起通信请求,从设备(Slave)被动响应。这种设计确保了通信的有序性,避免了多设备并发冲突。
开放标准:协议完全开源免费,无专利和版权限制,支持跨品牌设备互联,兼容性极强。
多传输方式:支持RS-232、RS-485串行通信(Modbus RTU/ASCII)和以太网TCP/IP通信(Modbus TCP),适应不同应用场景。
数据类型与功能码
Modbus定义了四种核心数据类型:
|
数据类型 |
读写权限 |
地址范围 |
功能码 |
典型应用 |
|
线圈(Coils) |
读写 |
00001-09999 |
01/05/0F |
开关量输出控制 |
|
离散输入(Discrete Inputs) |
只读 |
10001-19999 |
02 |
开关量输入状态 |
|
输入寄存器(Input Registers) |
只读 |
30001-39999 |
04 |
模拟量输入数据 |
|
保持寄存器(Holding Registers) |
读写 |
40001-49999 |
03/06/10 |
设备参数配置 |
常用功能码包括:0x01(读线圈)、0x02(读离散输入)、0x03(读保持寄存器)、0x04(读输入寄存器)、0x05(写单个线圈)、0x06(写单个寄存器)、0x0F(写多个线圈)、0x10(写多个寄存器)。
协议帧结构
Modbus RTU帧格式:
[从站地址][功能码][数据][CRC校验]
- 从站地址:1字节,标识目标设备(1-247)
- 功能码:1字节,指定操作类型
- 数据:变长,包含参数或返回数据
- CRC校验:2字节,循环冗余校验,确保数据完整性
Modbus TCP帧格式:
[MBAP头][从站地址][功能码][数据]
MBAP头包含事务标识符、协议标识符和长度字段,利用TCP/IP协议栈的可靠性机制,无需CRC校验。
应用场景
Modbus协议广泛应用于:
- 工业自动化:PLC控制电机启停、读取传感器数据
- 能源管理:电表数据采集、能源监控系统
- 楼宇自控:HVAC系统监控、照明控制
- 智能仪表:水表、燃气表数据抄表
- 物联网边缘节点:设备数据上传至云平台
优势与局限性
优势:
- 协议简单易实现,代码量小(RTU模式仅需2KB Flash)
- 抗干扰能力强,CRC-16校验检错率超99.99%
- 跨平台兼容性好,支持不同品牌设备互联
- 硬件成本低,适合资源受限的单片机系统
局限性:
- 无内置加密机制,安全性不足
- 传输速率相对较低(RTU模式波特率一般不超过19200bps)
- 不支持设备主动上报数据,需主设备轮询
开发与调试
常用开发工具包括Modbus Poll(主站模拟)、Modbus Slave(从站模拟)、Wireshark(网络协议分析)等。开源库如libmodbus(C/C++)、pymodbus(Python)提供了完整的协议实现。
Modbus协议凭借其简单、可靠、开放的特性,历经40余年发展仍保持旺盛生命力,在工业自动化、物联网等领域持续发挥重大作用。


