Modbus 如今仍是工业自动化最普及的通信协议,虽诞生已久、结构简单,但适配场景极广。本文用简短篇幅介绍它的特性。看完后,你就知道为什么有了 Modbus,之后又诞生了 IEC101(参考IEC101和串口通信)。
一、背景和现状
Modbus 在 1979 年发布,是工业领域首个开放的主从式通信协议。
当时不同厂商的 PLC、传感器各自为战,缺乏统一通信标准。Modbus 因“极简设计、开放免费”的特点,快速成为工业通信的通用协议,40 多年也未被淘汰。目前在电力行业也经常被用到,主要是站内设备间的通信。
二、特点
1. 技术特点
优势:简单、开放免费、兼容性强,适配 RS-485/232 串口与以太网。
局限:无内置加密与安全机制、主从轮询模式实时性有限、无原生时标与数据质量位,难以满足电力调度主站这类对安全性、时序精度、数据完整性有高要求的调度场景。
2. 主要传输模式
Modbus 有三种传输模式:
Modbus RTU:串口二进制编码,效率高、紧凑,是 RS-485 总线的主流模式;
Modbus ASCII:串口 ASCII 字符传输,可读性强但效率低,现已极少使用;
Modbus TCP:以太网 TCP/IP 承载,使用知名端口 502,速度快、支持远距离跨网通信,是现代工业网络的主流模式。
三者应用层逻辑完全一致,仅底层传输方式不同,可通过网关实现相互转换。
3. 主从架构
1 个主站(客户端)发起读写请求,多个从站(服务端)被动响应。
三、分层
Modbus 不同于 IEC101 的三层架构,采用简化的两层设计(应用层 + 物理层,含链路适配)。
1. 物理层:串口与以太网双模式
串口 RS-232:点对点、全双工、短距离(≤15m),用于主站与单台设备直连(如本地调试);
串口 RS-485:总线型、半双工、长距离(≤1200m),支持 1 主多从(单段最多 32 节点);
以太网:星形拓扑、全双工、距离不限,支持海量设备组网,对应 Modbus TCP 模式。
通信参数(串口模式必配,双方需完全一致):
波特率:常用 9600bps、19200bps;
串口帧结构:多采用 8N1(8 数据位、无校验、1 停止位)。
2. 应用层
功能:定义数据模型(寄存器)、功能码、报文格式。
寄存器是 Modbus 应用层的数据载体,代表设备数据的存储单元。工业设备(如电表、逆变器)的各类测点数据,都会按照 Modbus 协议,存储在对应的寄存器中;主站通过读取、写入寄存器,就能实现对从站设备的监测(读)和控制(写),无需关注设备内部的硬件差异。
数据模型(四类寄存器):
寄存器类型 | 位数 | 读写属性 | 用途 |
线圈 | 1位 | 读/写 | 用于开关量输出,如断路器分合闸、设备启停等遥控场景 |
离散输入 | 1位 | 只读 | 用于开关量输入,如设备运行状态、故障报警等遥信场景 |
输入寄存器 | 16位 | 只读 | 用于模拟量输入,如电压、电流、功率等遥测场景 |
保持寄存器 | 16位 | 读/写 | 用于参数设定、状态存储,如功率定值、运行参数等遥调场景 |
3. 报文格式
Modbus 报文格式由协议内置定义,不同传输模式的格式略有差异,但核心结构一致,均包含“寻址+指令+数据+校验”四部分。
(1)Modbus RTU 报文格式(RS-485/串口场景)
完整结构(请求/返回通用):从站地址(1字节)+ 功能码(1字节)+ 数据域(N字节)+ CRC16校验(2字节)
① 请求报文(主站→从站)
字段名称 | 字节数 | 说明 |
从站地址 | 1字节 | 1~247(唯一标识从站),0为广播地址(所有从站接收不响应) |
功能码 | 1字节 | 如03(读保持寄存器)、04(读输入寄存器,遥测专用)、05(写单个线圈,遥控专用) |
数据域 | N字节 | 包含寄存器起始地址(2字节)、读取/写入数量(2字节),以及具体数据 |
CRC16校验 | 2字节 | 校验码,由报文前N字节计算得出 |
示例:从站地址1,功能码04(读输入寄存器),读取1个遥测寄存器(如A相电压),请求报文为:01 04 00 00 00 01 71 0D
② 返回报文(从站→主站)
字段名称 | 字节数 | 说明(结合前文示例) |
从站地址 | 1字节 | 与请求报文一致,示例中为01 |
功能码 | 1字节 | 与请求一致(04);若出错,功能码最高位置1(如84) |
数据域 | N字节 | 示例中为02 00 23(02=数据字节数,0023=A相电压实际值) |
CRC16校验 | 2字节 | 由返回报文前N字节计算得出,示例中为XX XX |
示例(对应前文请求):返回报文为:01 04 02 00 23 XX XX(XX XX为CRC16校验码),对应A相电压实际值为35V。
(2)Modbus TCP 报文格式
完整结构:MBAP头(7字节,Modbus TCP专属)+ RTU PDU(无CRC校验)
① 请求报文(主站→从站)
字段名称 | 字节数 | 取值范围/说明 |
MBAP头 | 7字节 | 包含4部分:事务ID(2字节)、协议ID(2字节,0代表Modbus TCP)、长度(2字节)、单元ID(1字节,等同于RTU从站地址) |
RTU PDU | N字节 | 与RTU的“从站地址+功能码+数据域”完全一致 |
示例:TCP请求报文为:00 01 00 00 00 06 07 04 00 00 00 01,与RTU报文核心逻辑一致,仅多了MBAP头、去掉了CRC校验。
② 返回报文(从站→主站,对应上述请求)
字段名称 | 字节数 | 取值/说明(结合前文示例) |
MBAP头 | 7字节 | 事务ID与请求一致(00 01),协议ID 00 00,长度00 04,单元ID 07 |
功能码 | 1字节 | 与请求一致(04),出错则为84 |
数据域 | N字节 | 示例中为02 00 23(与RTU数据域一致) |
示例(对应前文请求):返回报文为:00 01 00 00 00 04 07 04 02 00 23,与RTU返回数据一致,仅多MBAP头、无CRC校验。
四、网络拓扑
串行 Modbus 为严格单主站;Modbus TCP 支持多客户端(多主站)并发访问同一从站,但仍为主从模型,从站不能主动上报。
1. 点对点拓扑(RS-232/RS-485)
结构:1 个主站 ↔ 1 个从站
特点:全双工、无通信冲突、可靠性高,适用于单设备本地通信。
2. 总线型拓扑(RS-485)
结构:1 个主站 + 多个从站挂接在同一 RS-485 总线上
特点:半双工、主站轮询、布线简单、成本低,是工业现场常用的拓扑。
规则:
仅 1 个主站,可多个从站(单段 ≤32 台,加中继器可扩展);
只有主站能发起读/写请求,从站只能被动响应,不能主动发送数据;
流程:主站发送带从站地址的请求 → 总线上所有设备接收 → 仅目标地址从站响应。
3. 星形拓扑(Modbus TCP)
结构:主站、所有从站均接入交换机,通过以太网组网
特点:全双工、无轮询瓶颈、可跨网段扩展,适用于海量设备组网。
五、答疑
1. Modbus 只能支持 247 个从站吗?
协议层面从站地址为 1~247(共 247 个),但物理层有上限:RS-485 单段最多 32 个节点,加中继器可扩展至接近 247 个;Modbus TCP 则无硬限制,仅受主站性能和网络带宽影响。
2. Modbus 支持单次读多个数据吗?
支持,且是最常用的用法。通过对应功能码(01、02 读多个开关量,03、04 读多个寄存器),PDU 最大长度253 字节,单次可读最多 2008 个开关量或 125 个寄存器,但只能是连续的寄存器。
3. 寄存器只有 16 位,如果数据是一个较大的数怎么办?
采用“多寄存器拼接”解决。16 位寄存器范围有限,对于电压、功率等较大数值或高精度数值,会用 2 个(32 位)甚至 4 个(64 位)16 位寄存器拼接,按约定顺序(大端/小端)组合成一个大数。Modbus 协议仅规定可多寄存器拼接,但未统一大端/小端顺序,不同厂商设备约定不同,必须以设备手册标注为准。
4. 2 字节校验位,是否表示有 6 万多分之一的概率校验失败?
不是。2 字节 CRC16 校验理论有 65536 种校验码,但实际数据位本身出错的概率就很低,校验同时出错且命中 1/65536 的概率就更低,实际错误被 CRC16 检测到的概率接近 100%,可靠性足够。
5. Modbus 不安全吗?
原生无内置安全机制,报文明文传输,无加密、无身份认证,适合内网使用;若需跨网或高安全场景,需通过防火墙、VPN 或协议加密网关补充安全防护。
6. Modbus 与 IEC101 有什么区别?
Modbus 是通用工业协议,适配所有工业设备,设计极简、成本低,无原生电力四遥时序和安全机制;IEC101 是电力专用远动规约,专为电力四遥、长距离高干扰场景设计,可靠性和专业性更强,二者场景互补,不能相互替代。
7. 名词全称
简写 | 全称 | 说明 |
RTU | Remote Terminal Unit | Modbus 协议的远程终端单元二进制串口传输模式 |
PDU | Protocol Data Unit | 协议中的数据域 |
MBAP | Modbus Application Protocol Header | Modbus 应用协议头 |