2. Modbus协议基础

Modbus 是工业自动化领域应用最广泛的通信协议之一。它诞生于 1979 年,由 Modicon 公司(后被施耐德电气收购)为可编程逻辑控制器 PLC 设计。协议最初的目标非常朴素:让 PLC 与编程终端之间用一根串行线交换寄存器数据。由于规范简单、开放、易于实现,Modbus 逐渐从私有协议演变为事实上的工业通信标准,并被大量仪表、变频器、传感器、网关和 SCADA 系统采用。理解 Modbus 的起源与发展,有助于我们在测试和排障时判断“为什么这样设计”“哪些行为是规范允许的”“哪些是厂商扩展”。

一、起源与发展脉络

Modbus 的演进可以概括为“从串行到网络、从单一到多形态”。早期版本运行在 RS-232/RS-485 串行链路上,采用 RTU 或 ASCII 编码;随着以太网进入工业现场,Modbus TCP 将协议封装到 TCP/IP 之上,保留了原有的功能码和数据模型。之后又出现了 Modbus RTU over TCP、Modbus ASCII over TCP 等变体,用于兼容串行设备通过网关接入网络。测试人员需要特别注意:不同变体的帧结构、校验方式和端口号不同,混用会导致“能连上但读不到数据”的典型故障。

二、主从架构:请求—响应模型

Modbus 采用主从(Master/Slave)架构,也称客户端/服务器模型。主站发起请求,从站被动响应;从站之间不直接通信。每个从站有唯一地址(串行链路中通常为 1~247,0 为广播地址)。主站发出请求帧后,从站根据功能码执行操作,并返回响应帧;若出错,则返回异常响应(功能码最高位置 1,并附带异常码)。这种“一问一答”的模型决定了 Modbus 的实时性受轮询周期限制,也决定了排障时必须先确认“谁在问、谁在答、问什么、答什么”。

核心数据模型:Modbus 将数据分为四类:线圈(Coils,可读写位)、离散输入(Discrete Inputs,只读位)、保持寄存器(Holding Registers,可读写 16 位)、输入寄存器(Input Registers,只读 16 位)。功能码决定访问哪类数据,例如 01 读线圈、02 读离散输入、03 读保持寄存器、04 读输入寄存器、05 写单个线圈、06 写单个寄存器、15 写多个线圈、16 写多个寄存器。

三、串行与 TCP/IP 传输方式对比

串行传输与 TCP/IP 传输在物理层、帧结构、寻址和测试方法上差异明显。下表给出关键对比,便于在测试选型和故障定位时快速判断。

对比项Modbus RTU(串行)Modbus ASCII(串行)Modbus TCP
物理层RS-232/RS-485RS-232/RS-485以太网
编码方式二进制ASCII 字符二进制
校验CRC16LRC由 TCP/IP 保证,无 CRC
从站寻址帧内地址字节帧内地址字节MBAP 头中的单元标识符
默认端口无(串口)无(串口)502
典型速率9600~115200 bps9600~115200 bps10/100/1000 Mbps
测试工具串口调试助手、Modbus Poll串口调试助手Modbus Poll、Modbus Slave、Wireshark

RTU 帧由地址、功能码、数据、CRC 组成,帧间需要至少 3.5 个字符时间的静默间隔;ASCII 帧以冒号开头、CRLF 结尾,可读性好但效率低;TCP 帧在原有 PDU 前增加 MBAP 头(事务标识、协议标识、长度、单元标识),因此抓包时可以看到“TCP 载荷里套着 Modbus 数据”。

# Modbus TCP 请求示例(读保持寄存器,单元 ID=1,起始地址 0,数量 2)
事务标识: 00 01
协议标识: 00 00
长度:     00 06
单元标识: 01
功能码:   03
起始地址: 00 00
寄存器数: 00 02

# 对应十六进制帧
00 01 00 00 00 06 01 03 00 00 00 02

四、应用场景与测试关注点

Modbus 的典型应用包括:PLC 与变频器、温控仪表、电表、流量计、IO 模块之间的数据采集;SCADA 系统通过 Modbus TCP 轮询现场设备;网关将 Modbus RTU 转换为 Modbus TCP 或 MQTT 接入上层平台。测试时,串行链路要关注波特率、数据位、停止位、校验位是否一致,终端电阻是否接入,A/B 线是否接反;TCP 链路要关注 IP、端口、单元标识符、防火墙和连接数限制。常见误区是“用 Modbus TCP 工具去测 RTU 设备”或“忽略单元标识符导致网关下多台设备全部响应异常”。

排障提示:若请求无响应,先确认物理层(串口灯、网口灯、链路通断),再确认参数(波特率、校验、端口),最后确认协议层(功能码、地址范围、单元 ID)。用抓包或串口监听工具观察原始帧,往往比反复改配置更快定位问题。

Modbus 主从架构与两种传输方式 主站 Master 发起请求 / 轮询 PLC、SCADA、网关 请求帧 响应帧 从站设备(地址唯一) 从站 01 变频器 从站 02 温控仪表 从站 03 电表 串行传输:RTU / ASCII 物理层:RS-232 / RS-485 帧结构:地址 + 功能码 + 数据 + 校验 RTU:CRC16,二进制,效率高 ASCII:LRC,可读性好,效率低 关键参数:波特率、数据位、停止位、校验位 测试工具:串口调试助手、Modbus Poll TCP/IP 传输:Modbus TCP 物理层:以太网(10/100/1000 Mbps) 帧结构:MBAP 头 + PDU MBAP:事务标识 + 协议标识 + 长度 + 单元 ID 默认端口:502 无 CRC,由 TCP/IP 保证可靠性 测试工具:Modbus Poll、Wireshark

掌握以上基础后,后续测试工作就有了清晰的坐标系:先判断传输方式,再确认主从角色与地址,最后核对功能码与数据区。Modbus 的简单性既是优点也是陷阱——它不规定设备内部寄存器含义,因此必须结合设备手册进行点表映射,才能准确判断“读到的值是否正确”。