一篇解读 Modbus 协议:工业通信的经典通用语言
在工业自动化领域,为了使不同品牌的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 字节 | 从属设备的唯一标识符,范围从 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 验证(垂直奇偶校验);
帧格式:

| 场地 | 字节计数 | 字段描述 | 示例(对应于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 核心帧):

| 场地 | 字节计数 | 字段描述 | 例子 |
| 交易 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这三种变体的帧结构,并掌握功能码和数据字段的含义,可以轻松应对设备调试、消息解析和开发适配等任务。










