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串口帧结构多采用 8N18 数据位、无校验、1 停止位。2. 应用层功能定义数据模型寄存器、功能码、报文格式。寄存器是 Modbus 应用层的数据载体代表设备数据的存储单元。工业设备如电表、逆变器的各类测点数据都会按照 Modbus 协议存储在对应的寄存器中主站通过读取、写入寄存器就能实现对从站设备的监测读和控制写无需关注设备内部的硬件差异。数据模型四类寄存器寄存器类型位数读写属性用途线圈1位读/写用于开关量输出如断路器分合闸、设备启停等遥控场景离散输入1位只读用于开关量输入如设备运行状态、故障报警等遥信场景输入寄存器16位只读用于模拟量输入如电压、电流、功率等遥测场景保持寄存器16位读/写用于参数设定、状态存储如功率定值、运行参数等遥调场景3. 报文格式Modbus 报文格式由协议内置定义不同传输模式的格式略有差异但核心结构一致均包含“寻址指令数据校验”四部分。1Modbus 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 2302数据字节数0023A相电压实际值CRC16校验2字节由返回报文前N字节计算得出示例中为XX XX示例对应前文请求返回报文为01 04 02 00 23 XX XXXX XX为CRC16校验码对应A相电压实际值为35V。2Modbus TCP 报文格式完整结构MBAP头7字节Modbus TCP专属 RTU PDU无CRC校验① 请求报文主站→从站字段名称字节数取值范围/说明MBAP头7字节包含4部分事务ID2字节、协议ID2字节0代表Modbus TCP、长度2字节、单元ID1字节等同于RTU从站地址RTU PDUN字节与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. 名词全称简写全称说明RTURemote Terminal UnitModbus 协议的远程终端单元二进制串口传输模式PDUProtocol Data Unit协议中的数据域MBAPModbus Application Protocol HeaderModbus 应用协议头