Modbus

Modbus 工业通信的通用语言

1. 什么是Modbus

Modbus 是一种工业级串行通信协议,由施耐德电气(Schneider Electric)旗下的 Modicon 公司于 1979 年推出,最初用于可编程逻辑控制器(PLC)之间的通信。经过数十年发展,它已成为工业自动化领域的通用语言,广泛应用于传感器、变频器、仪表、PLC、SCADA(监控和数据采集系统)等设备间的数据交互,核心优势是结构简单、开源免费、兼容性强。

2. Modbus 的核心特点

Modbus 能在工业场景中普及,源于其适配工业环境的核心特性:

  1. 主从(Master-Slave)通信架构
    通信网络中只有 1 个主设备(如 PLC、工控机)和多个从设备(如传感器、执行器),主设备主动发起请求,从设备仅响应主设备的指令(不主动发送数据),避免网络冲突,适配工业场景的集中控制 需求。
  2. 开源免费,无专利限制
    协议规范完全公开,设备厂商无需支付授权费即可实现兼容,因此几乎所有工业设备厂商(如西门子、罗克韦尔、欧姆龙等)都支持 Modbus。
    轻量化设计,易实现
  3. 协议帧结构简单(仅包含地址、功能码、数据、校验码),对硬件资源要求低,即使是低成本的单片机(如 51 单片机)也能轻松实现。
    支持多种物理层
  4. 可基于不同的物理接口和传输介质部署,满足不同工业场景的距离、速度需求,常见物理层包括 RS-232、RS-485、以太网等。

3. Modbus 的主要协议变体

根据物理层传输方式的不同,Modbus 主要分为三大类,适配不同的工业通信场景:

协议变体 物理层 传输介质 核心特点 典型应用场景
Modbus RTU RS-485 / RS-232 屏蔽双绞线 1. 二进制编码,数据密度高(传输效率高)
2. 抗干扰能力强(RS-485 支持差分传输)
3. 传输距离远(RS-485 单段最大 1200 米)
4. 支持多从机(RS-485 最多 32 个从设备)
车间内短距离、多设备的分布式控制(如传感器组网、变频器控制)
Modbus ASCII RS-485 / RS-232 屏蔽双绞线 1. ASCII 编码(数据以可打印字符传输)
2. 可读性强(便于调试,可直接查看数据)
3. 传输效率低(相同数据占用字节更多)
对调试可读性要求高、数据量小的场景
Modbus TCP 以太网 网线、光纤 1. 基于 TCP/IP 协议,使用端口 502
2. 支持远距离传输(依托以太网 / 互联网)
3. 可实现多主多从(突破 RTU/ASCII 的单主限制)
4. 传输速度快(依托以太网带宽,可达 100Mbps/1Gbps)
跨车间、跨厂区的远程监控(如 SCADA 系统、工业互联网平台)

4. Modbus 通信的核心概念

Modbus 通信的核心概念主要是以下两点:

  1. 从设备地址(Slave Address)

    • 仅用于 Modbus RTU/ASCII(TCP 用 IP 地址标识设备),是从设备的唯一标识(范围:1-247,0 为广播地址)。
    • 主设备发起请求时,需指定目标从设备的地址,只有地址匹配的从设备才会响应。
  2. 功能码(Function Code)

    • 功能码是 主从设备的指令约定,主设备通过功能码告知从设备要做什么,从设备通过相同功能码响应(或返回错误码)。

    • 常见功能码如下:

      功能码 名称 作用 典型应用
      01 读线圈状态 读取从设备的线圈(离散输出,如继电器开关) 查看电机启停状态、阀门开关状态
      02 读离散输入状态 读取从设备的离散输入(如按钮、传感器开关) 查看急停按钮状态、光电传感器信号
      03 读保持寄存器 读取从设备的保持寄存器(16 位整数,可读写) 读取变频器频率、仪表测量值(如温度、压力)
      04 读输入寄存器 读取从设备的输入寄存器(16 位整数,只读) 读取模拟量传感器数据(如电流、电压信号)
      05 写单个线圈 控制从设备的单个线圈(置 1 或置 0) 控制继电器吸合 / 断开、阀门打开 / 关闭
      06 写单个保持寄存器 向从设备的单个保持寄存器写入数据 设置变频器目标频率、设定仪表报警阈值
      16(0x10) 写多个保持寄存器 批量写入多个保持寄存器 批量设置设备参数(如 PLC 的多通道输出值)
  3. 数据地址(Register Address)
    设备的寄存器 / 线圈按地址 划分,主设备需指定起始地址数据长度 来读写数据。
    需注意:

    • 地址偏移问题:不同厂商的设备可能存在地址偏移(如 Modbus 标准地址为 40001 开始的保持寄存器,部分设备可能显示为 00001 开始),需参考设备手册确认。
    • 数据类型:寄存器通常为 16 位整数,若需传输 32 位浮点数(如温度值 25.5℃),需将两个 16 位寄存器拼接(大端 / 小端顺序需与设备约定)。
  4. 校验码(Checksum)
    仅用于 Modbus RTU/ASCII(TCP 依赖 TCP 协议的校验机制,无需额外校验),用于检测传输过程中的数据错误:

    • RTU 校验:采用 CRC16 循环冗余校验(2 字节),计算整个数据帧的校验值,从设备接收后重新计算,不匹配则丢弃。
    • ASCII 校验:采用 LRC 纵向冗余校验(1 字节),计算数据帧中所有字节的异或值,实现简单但抗干扰能力弱于 CRC16。

5. Modbus 通信流程(以 RTU 为例)

主设备读取从设备的数据 为例,流程如下:

  1. 主设备发起请求:
    数据帧结构为 [从地址] + [功能码] + [起始地址] + [数据长度] + [CRC16校验]
    如读取地址 1 的传感器(功能码 03,起始地址 00 00,读取 1 个寄存器),帧为 01 03 00 00 00 01 84 0A
  2. 从设备接收并响应:
    从设备(地址 1)接收后,验证 CRC 校验,确认功能码和地址匹配,读取寄存器数据,返回响应帧:
    [从地址] + [功能码] + [数据长度] + [数据] + [CRC16校验]
    01 03 02 00 19 79 8E(其中 02 为数据长度,00 19 为数据(2个字节表示一个寄存器的值)。
  3. 主设备处理数据:
    主设备接收响应帧,校验 CRC 后,解析数据(00 19 转换为十进制 25),完成一次通信。

6. Modbus 的优缺点与应用场景

  1. 优点
    • 兼容性极强:几乎所有工业设备都支持,不同厂商设备可直接通信(无需定制协议)。
    • 部署成本低:RTU 基于 RS-485,硬件成本低;TCP 可复用现有以太网网络。
    • 调试便捷:有大量开源工具(如 Modbus Poll、QModMaster)支持数据监控和测试。
  2. 缺点
    • 安全性弱:协议本身无加密机制,数据传输为明文,易被窃取或篡改(需额外叠加 VPN、防火墙等安全措施)。
    • RTU/ASCII 单主限制:仅支持 1 个主设备,无法满足多系统同时控制的场景(需用 Modbus TCP 或网关转换)。
    • 数据长度有限:单帧最大传输 256 字节,不适合大数据量传输(如视频、大量日志)。
  3. 典型应用场景
    • 工业自动化控制:PLC 与变频器、伺服驱动器通信,实现电机转速控制。
    • 过程监控:传感器(温度、压力、流量)与 SCADA 系统通信,实时采集生产数据。
    • 智能楼宇:楼宇控制器与空调、照明、电梯设备通信,实现能耗监控。
    • 物联网(IIoT):通过 Modbus TCP 或网关(RTU 转 TCP)将工业设备接入云端平台(如阿里云 IoT、AWS IoT)。