Modbus是一种广泛应用于工业自动化领域的开放式通信协议,由Modicon(现施耐德电气)于1979年推出。其核心设计目标是实现简单、高效、跨平台的设备通信。以下从协议架构、传输模式、功能码、数据模型、应用场景及安全性等维度进行深度解析。
一、Modbus协议架构
1. 基础模型
- 主从架构:单主设备(Master)控制通信,多个从设备(Slave)被动响应。
- 请求-响应模式:主设备发起请求(Request),从设备返回响应(Response)。
- 协议独立性:支持多种物理层(RS-232/RS-485、TCP/IP等)。
2. 协议栈分层
层级 | 描述 |
---|---|
应用层 | 定义数据模型和功能码(如读写寄存器) |
协议层 | 报文封装(帧头、校验、地址等) |
传输层 | Modbus TCP使用TCP/IP,RTU/ASCII使用串口 |
物理层 | RS-485、以太网等 |
二、传输模式:RTU vs TCP vs ASCII
1. Modbus RTU
- 编码方式:二进制数据,效率高。
- 帧结构:
markdown
[地址][功能码][数据][CRC校验]
- 校验机制:CRC-16(循环冗余校验)。
- 典型应用:工业现场总线(RS-485网络)。
2. Modbus TCP
- 基于TCP/IP:端口号502,适用于以太网。
- 报文结构:
markdown
[MBAP头][Modbus数据] MBAP头 = [事务ID][协议ID][长度][单元ID]
- 优势:支持跨网络通信,无物理层限制。
3. Modbus ASCII
- 可读性:使用ASCII字符表示十六进制数据,效率低。
- 帧结构:
markdown
:[地址][功能码][数据][LRC校验]<CR><LF>
- 校验机制:LRC(纵向冗余校验)。
三、核心功能码(Function Codes)
功能码 | 名称 | 作用 | 数据类型 |
---|---|---|---|
01 | Read Coils | 读取线圈(开关量输出) | 1-bit(布尔) |
02 | Read Discrete Inputs | 读取离散输入(开关量输入) | 1-bit(布尔) |
03 | Read Holding Registers | 读保持寄存器 | 16-bit(整数) |
04 | Read Input Registers | 读输入寄存器 | 16-bit(整数) |
05 | Write Single Coil | 写单个线圈 | 1-bit(布尔) |
06 | Write Single Register | 写单个保持寄存器 | 16-bit(整数) |
15 | Write Multiple Coils | 写多个线圈 | 1-bit(布尔) |
16 | Write Multiple Registers | 写多个保持寄存器 | 16-bit(整数) |
四、数据模型与地址映射
Modbus通过4种数据类型抽象设备数据:
- 线圈(Coils):可读写,1-bit,地址范围
00001-09999
。 - 离散输入(Discrete Inputs):只读,1-bit,地址范围
10001-19999
。 - 输入寄存器(Input Registers):只读,16-bit,地址范围
30001-39999
。 - 保持寄存器(Holding Registers):可读写,16-bit,地址范围
40001-49999
。
示例:
请求读取地址40001的保持寄存器(功能码03):
- 从设备地址:0x01
- 寄存器地址:0x0000(Modbus协议使用0-based地址)
- 寄存器数量:0x0001
- 完整RTU请求帧:
01 03 00 00 00 01 84 0A
五、错误处理与异常响应
- 异常码格式:功能码 + 0x80 + 异常码(如
83 02
表示功能码03的非法数据地址错误)。 - 常见异常码:
01
:非法功能码02
:非法数据地址03
:非法数据值
六、应用场景与挑战
- 典型场景:
- PLC与传感器/执行器通信
- SCADA系统数据采集
- 能源监控(电表、水表等)
- 挑战:
- 实时性:RTU模式依赖严格的超时控制(典型超时3.5字符时间)。
- 扩展性:TCP模式需处理网络延迟和并发请求。
- 安全性:传统Modbus无加密/认证机制,需通过VPN或TLS增强安全性。
七、现代演进与替代方案
- Modbus Secure:基于TLS 1.3的加密扩展。
- OPC UA:更复杂的工业协议,支持语义化数据模型。
- MQTT:轻量级IoT协议,适用于云边协同场景。
总结
Modbus凭借其简洁性和开放性,仍是工业通信的基石协议。但在物联网和工业4.0时代,需结合现代安全技术和扩展协议(如Modbus TCP)以满足复杂场景需求。开发者需注意数据字节序(大端序)、寄存器对齐等细节,并通过工具(如Modbus Poll、Wireshark)进行协议调试。