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连接设备到上位机系统。