Leave Your Message
新闻类别
专题新闻

一篇解读 Modbus 协议:工业通信的经典通用语言

2026-04-23

在工业自动化领域,为了使不同品牌的PLC、传感器、变频器和仪器等设备实现数据互操作性和协同运行,统一的“通信协议”至关重要——其中, Modbus协议 Modbus 是应用最广泛、最经典的解决方案。从传统工厂车间到现代工业物联网系统,Modbus 因其简洁性、开放性和稳定性,已成为工业设备的“通用语言”。

什么是 Modbus 协议?它的起源和核心目的是什么?

Modbus协议由美国公司Modicon(现已被施耐德电气收购)于1979年开发,用于其PLC产品之间的通信。它是一种工业应用层通信协议,其设计目标明确:解决不同制造商工业设备之间的互操作性问题,使设备无需定制驱动程序即可执行数据采集和命令传输。从网络层角度来看,Modbus属于OSI七层模型的应用层。它不指定底层物理传输介质,而是定义了数据交换帧的格式、功能命令和响应规则。因此,它可以灵活地兼容RS-232、RS-485和以太网等各种物理层,满足不同工业场景的通信需求。

Ⅱ、Modbus核心架构:主从通信模式

Modbus 采用主从架构,这是其核心通信逻辑,也是其简单易用的关键,更是理解帧格式的基础——所有帧设计都是围绕这种主从交互机制构建的。

■主站:整个通信网络的“指挥中心”,可以是PLC、工业PC、SCADA系统、物联网网关等,主动发起数据请求并发出控制命令。一个网络必须至少有一个主站(Modbus TCP支持多个主站),所有帧均由主站发起。

■从设备:网络中的“执行器”(例如传感器、变频器、仪器或执行器)被动地接收来自主站的命令,执行操作并返回响应帧。网络中可以连接多个从设备,每个从设备都有一个唯一的地址(1-247),以便主站进行精确识别;非目标从设备将直接忽略接收到的帧。

通信过程极其简单:主站发送请求帧 → 相应的从站接收并解码帧内容 → 从站执行指令并返回响应帧。这种方法彻底消除了多设备通信中的总线冲突,从而确保了最高的稳定性。

2.1 主站(主站)数量规则

Modbus RTU / ASCII(RS485 总线)

■一辆公交车上只能有一个主站。

■不允许多个主站同时发送命令,因为这可能会导致总线冲突和数据损坏。

■ 主站对所有从站进行轮询,而从站永远不会发起数据传输。

Modbus TCP(以太网)

■理论上支持多个主站(多个客户端同时连接到端口 502)。

■在实际应用中,为了避免寄存器争用和逻辑混乱,系统通常设计为只有一个主站进行控制。

■多主场景通常通过网关、SCADA 系统或专用服务器进行统一管理。

2.2 从属数量规则

从属设备的数量由其从属地址(从属 ID)决定:

■地址范围:1–247

■地址 0:所有从设备都已收到但未收到响应的广播地址

■地址 248–255:保留地址,通常不用于设备识别。因此:

■单个 Modbus RTU/ASCII 总线最多可支持 247 个从站

■在实际应用中,由于485通信能力、轮询频率和电缆长度等限制,从设备的最大数量通常限制在32个。

■从机地址不能重复,因为重复会导致通信异常和响应混乱。

2.3 实际工程中的典型数量配置

■小规模采集场景:1个主站+4-16个从站(仪器设备/传感器)

■中等规模现场应用:1 个主站 + 16-32 个从站(逆变器系统、PLC、电表)

■大规模多设备网络:采用多个485或串行端口服务器,并采用扩展总线配置,每个服务器包含1个主设备和多个从设备。

■ Modbus TCP 应用场景:1 个服务器 + 数十至数百个从设备

2.4 数量约束的基本局限性

■串行总线(RS485)是一种半双工共享总线,在任何给定时间只允许一个设备发送数据。

■随着从站数量的增加,主站的轮询机制会导致刷新率降低。

■固定的 1 字节地址字段将从设备的最大数量限制为 247 个。

Ⅲ、Modbus三种主要变体的帧格式差异分析

根据底层传输介质和编码方式的不同,Modbus 主要分为三种变体:RTU、ASCII 和 TCP。这些变体在应用层功能命令方面完全兼容,其核心区别在于帧格式、编码方式和奇偶校验逻辑——这使得工程应用可以灵活选择。下面,我们将详细介绍每种变体的帧格式,并辅以实际示例以便于直观理解。

3.1 Modbus RTU(最常用,主站密钥)

Modbus RTU是工业领域应用最广泛的串行通信协议。它采用二进制编码,具有数据传输紧凑、效率高、抗干扰能力强等优点,使其成为车间现场设备低成本、短距离联网的理想选择。

■Transmission medium: RS-485 (主流), RS-232;

■验证方法:16 位 CRC 验证(确保数据传输完整性);

■帧格式的核心特点:没有开始/结束字符;帧边界由帧间空闲时间(通常≥3.5个字符周期)决定。

Modbus RTU 帧格式(请求帧 + 响应帧):

1.jpg

场地

字节计数

字段描述

示例(请求帧)

从地址

1 字节

从属设备的唯一标识符,范围从 1 到 247;0 是广播地址(所有从属设备都会收到,但不会做出响应)。

0x01(从站 1)

功能代码

1 字节

定义主站操作类型,例如读取寄存器和写入线圈(稍后详细解释)。

0x03(读取保持寄存器)

数据字段

N 字节(变量)

请求帧:寄存器地址、读/写次数;响应帧:返回数据、状态信息

0x00 0x00(起始寄存器地址 0),0x00 0x02(读取两个寄存器)

结直肠癌

2 字节

16 位循环冗余校验,覆盖从从机地址到数据字段的所有字节,低位在前,高位在后。

0x95 0xCB(对应于上述字段的 CRC 校验值)

完整示例分解:请求帧【0x01 0x03 0x00 0x00 0x00 0x02 0x95 0xCB】

分析:主站向地址为 1 的从站发送“读取保持寄存器”指令,从地址 0 开始读取两个寄存器,得到 CRC 校验和为 0x95CB。如果从站响应正常,则返回一个响应帧,其中包含其地址、功能码、数据长度、寄存器数据和 CRC 校验和。

3.2 Modbus ASCII Modbus ASCII 采用 ASCII 字符编码,消息以冒号 (:) 开头,以回车符 (CRLF,0x0D 0x0A) 结尾。它具有极佳的可读性,并且可以通过串口查看器直接查看,便于调试。然而,由于其数据冗余度高且传输效率低,因此在实际工业部署中很少使用。

验证方法:LRC 验证(垂直奇偶校验);

帧格式:

2.jpg

场地

字节计数

字段描述

示例(对应于RTU示例)

开始

1 字节

修复冒号(:,0x3A)

车站地址

 

2字节(ASCII码)

一个 1 字节的十六进制数,转换为 2 个 ASCII 字符

01(对应于 0x01)

功能代码

2字节(ASCII码)

一个 1 字节的十六进制数,转换为 2 个 ASCII 字符

03(对应于 0x03)

数据字段

2N 字节(ASCII 码)

将每个字节的数据转换为 2 个 ASCII 字符

00000002(对应于 0x00 0x00 0x00 0x02)

学习资源中心

2字节(ASCII码)

8 位 LRC 校验,涵盖从站点地址到数据字段的 ASCII 字符,转换为 2 个 ASCII 字符

38(对应于 LRC 校验和 0x38)

结尾

2字节

固定为回车符 (0x0D) + 换行符 (0x0A)

CR+LF

显然,ASCII 帧比 RTU 帧包含更多的冗余数据(对于相同的数据,ASCII 帧需要的字节数几乎是 RTU 帧的两倍),因此它们只适用于调试、故障排除和低速通信场景。

3.3 Modbus TCP(工业互联网的主流)

Modbus TCP 基于以太网 TCP/IP 协议,是工业互联网时代的首选协议。它具有传输速度快、传输距离不受限制、兼容局域网和互联网、默认使用 502 端口以及支持多主站通信等优点。

主要特性:无需CRC/LRC校验(因为它依赖于TCP层的可靠传输机制)。传统的RTU帧增加了一个“MBAP帧头”(Modbus应用协议帧头),用于在TCP通信中识别Modbus帧。

Modbus TCP 帧格式(MBAP 头部 + RTU 核心帧):

3.jpg

场地

字节计数

字段描述

例子

交易 ID

2 字节

用于标识通信事务,当主站发起通信时,该值递增;当从站响应时,该值保持不变。

0x00 0x01

协议 ID

2 字节

设置为 0x00 0x00,表示 Modbus TCP 协议

0x00 0x00

长度

2 字节

表示后续字节数(从机地址+功能码+数据字段),即“1+1+N”。

0x00 0x06(后续 6 个字节:1+1+4)

从地址

1 字节

与RTU一致,范围1-247

0x01

功能代码

1字节

与RTU一致,定义操作类型

0x03

数据字段

N 字节(变量)

与RTU一致,请求帧/响应帧的数据格式相同。

0x00 0x00 0x00 0x02

完整示例分解:TCP帧【0x00 0x01 0x00 0x00 0x00 0x06 0x01 0x03 0x00 0x00 0x00 0x02】

分析:事务 ID 为 0x0001,协议 ID 为 0x0000,后续数据长度为 6 字节。向地址 ​​1 的从设备发送“读取保持寄存器”指令,从地址 0 开始读取两个寄存器。从设备响应后,MBAP 头部中的事务 ID 和协议 ID 与请求匹配,长度字段根据返回的数据进行调整。

Ⅳ、Modbus核心消息:功能代码和数据字段的详细说明

在所有Modbus协议中,帧的核心都由“功能码+数据字段”构成:功能码指定操作类型,而数据字段提供操作细节。它们共同实现了主设备和从设备之间的精确通信。本节重点介绍高频实用功能码,并辅以数据字段格式,帮助您快速上手开发和调试。

4.1 常用功能代码(开发必备)

功能码为 1 字节,范围从 0x01 到 0xFF。值 0x01–0x10 表示常见的标准功能码,而高于 0x80 的代码表示异常响应码(最高有效位为 1,表示从设备指令执行失败)。

功能代码

函数声明

适用数据类型

数据字段格式(请求框架)

0x01(读取线圈)

读取从动线圈的状态(数字输出)

开关值(0 = 打开,1 = 关闭)

起始线圈地址(2 字节)+ 读取次数(2 字节)

0x02(读取输入状态)

读取从站输入状态(数字输入)

开关值(只读)

初始输入地址(2 字节)+ 读取次数(2 字节)

0x03(读取保持寄存器)

读取从机保持寄存器数据(最常用)

模拟量、设备参数(可读写)

起始寄存器地址(2 字节)+ 读取计数(2 字节)

0x04(读取输入寄存器)

从从属输入寄存器读取数据

模拟值(只读,例如传感器读数)

起始寄存器地址(2 字节)+ 读取计数(2 字节)

0x05(写入一个单线圈)

控制单个线圈的开/关状态

切换输出

线圈地址(2 字节)+ 控制值(2 字节:0x0000 = 打开,0xFF00 = 关闭)

0x06(写入单个保持寄存器)

设置单个保持寄存器的值

设备参数(例如,逆变器频率、传感器阈值)

寄存器地址(2 字节)+ 设置值(2 字节)

0x10(写入多个保持寄存器)

批量设置保留寄存器的多个值

批量配置多个设备参数

起始地址(2 字节)+ 数量(2 字节)+ 数据长度(1 字节)+ 批处理数据(2 × 数量字节)

4.2 异常响应帧格式

当从站无法执行主站的指令时(例如,由于地址不正确、不支持的功能码或数据超出范围),它会返回一个异常响应帧,其特点是“功能码位置 1 最高”,并在数据字段中携带一个异常码。

异常响应帧结构(以 RTU 为例):站点地址(1 字节)+ 异常功能码(1 字节,原始功能码 + 0x80)+ 异常码(1 字节)+ CRC 校验码(2 字节)。

常见错误代码:0x01(功能不支持)、0x02(寄存器地址不存在)、0x03(数据长度错误)、0x04(从设备故障)。

   

Ⅴ、Modbus协议的优势及应用场景

为什么工业应用偏爱 Modbus?关键在于其“简单、通用、低成本”的特点,以及简洁的帧格式和极低的开发调试复杂度。

核心优势:

■简单易实现:框架结构简洁,嵌入式开发适配所需的代码量极少,无需复杂的协议栈开发;

■开源且免费:不收取专利费,中小制造商和项目可以免费使用,从而降低设备集成成本;

■ 出色的兼容性:市场上超过 90% 的工业设备原生支持 Modbus,可实现跨品牌无缝集成;

■广泛的适应性:串行版本(RTU/ASCII)适用于现场总线,而TCP版本专为以太网连接而设计,涵盖从设备层到管理层的所有场景;

■稳定可靠:主从模式可防止通信冲突,奇偶校验机制(CRC/LRC)可确保数据准确性,使其适用于复杂的工业电磁环境。

常见应用场景:

■工业自动化生产线:PLC通过Modbus RTU收集温度、湿度和压力传感器数据,控制变频器和继电器。

■智能楼宇自动化:楼宇系统通过 Modbus 监控空调、水泵和电表,实现能耗监控和设备控制。

■新能源领域:光伏逆变器和充电站通过 Modbus TCP 传输运行数据,以便进行远程监控。

■物联网数据采集:工业网关通过 Modbus 收集现场设备数据,对其进行转换,然后将其上传到云平台。

Ⅵ、Modbus协议的局限性和发展趋势

虽然 Modbus 具有显著优势,但也存在一些局限性,主要体现在安全性和实时性能方面:

■安全性不足:传统的 Modbus 缺乏加密机制,以明文形式传输数据,容易被篡改和窃取,因此不适合高安全性的场景;

■平均实时性能:串行版本(RTU/ASCII)采用主站轮询方法,导致多从配置中的响应延迟增加。

为了满足现代工业的需求,Modbus 不断升级:

■Modbus 安全协议:采用加密和认证机制,增强通信安全性,降低明文传输带来的风险;

■集成解决方案:Modbus + MQTT/OPC UA 可实现传统 Modbus 设备与工业互联网的无缝集成,从而实现基于云的管理;

■硬件优化:越来越多的MCU现在都内置了Modbus控制器,显著降低了开发复杂性并提高了通信效率。

尽管工业以太网协议(例如 Profinet、EtherNet/IP)层出不穷,但由于 Modbus 具有简单、通用和低成本等优点,它仍然是中小型工业项目和设备数据采集的首选协议,并因此赢得了工业通信领域“常青”解决方案的美誉。

Ⅶ、概括

对于工业自动化和物联网开发领域的专业人员来说,Modbus协议是一项必须掌握的基本技能,而其帧格式则是核心组成部分。通过理解RTU、ASCII和TCP这三种变体的帧结构,并掌握功能码和数据字段的含义,可以轻松应对设备调试、消息解析和开发适配等任务。