当前位置: 首页 > news >正文

【Modbus】Modbus协议基础知识详解

目录

引言

一、Modbus协议介绍

1.1 简介

1.2 特点

1.3 Modbus协议栈结构

1.4 与其他工业协议比较

二、Modbus数据模型与功能码

2.1 数据模型

2.2 常用功能码

2.3 异常码

三、Modbus通信帧结构

3.1 通信机制

3.2 Modbus RTU帧结构

3.2.1 RTU帧结构

3.2.2 RTU帧时序

3.2.3 RTU帧示例

3.3 Modbus TCP帧结构

3.2.1 TCP帧结构

3.2.2 TCP连接管理:

3.2.3 TCP帧示例

四、高级Modbus功能扩展

4.1 Modbus子协议

4.2 Modbus扩展

五、常见问题

5.1 性能优化

5.2 错误处理与恢复

5.3 安全实践

六、Modbus的应用场景

6.1 OPC UA与Modbus的融合

6.2 边缘计算中的Modbus

附录

Modbus功能码对照表

Modbus异常码对照表

参考


引言

        在工业4.0和物联网时代,各种新型通信协议层出不穷,但Modbus协议依然占据着工业自动化领域的核心地位。根据HMS Networks的2023年工业网络市场报告,Modbus在工业通信协议中仍保持着近20%的市场份额。这一诞生于1979年的协议为何具有如此强大的生命力?

一、Modbus协议介绍

1.1 简介

        Modbus 是一种开放、简单、广泛应用的工业通信协议,最初由 Modicon(现为施耐德电气)于 1979 年为可编程逻辑控制器(PLC)设计。如今,它已成为工业自动化领域最常用的通信标准之一,广泛应用于 PLC、传感器、仪表、HMI、DCS 等设备之间的数据交换。

1.2 特点

开放性免费、公开,无版权保护,厂商可自由实现。
简单性协议结构清晰,易于理解和实现。
主从架构采用“主-从”(Master-Slave)通信模式,主站发起请求,从站响应。
数据模型基于寄存器的读写操作,数据以离散量或模拟量形式组织。
跨平台可运行在串行链路(如 RS-232/RS-485)或以太网(TCP/IP)上。

1.3 Modbus协议栈结构

Modbus协议采用分层架构,但在不同物理介质上实现方式各异:

Modbus RTU/ASCII协议栈:

  • 应用层:Modbus PDU(协议数据单元)
  • 数据链路层:Modbus帧结构
  • 物理层:RS-485/RS-232

Modbus TCP/IP协议栈:

  • 应用层:Modbus PDU
  • 传输层:TCP
  • 网络层:IP
  • 数据链路层:以太网
  • 物理层:双绞线/光纤Modbus的未来发展

1.4 与其他工业协议比较

协议优势劣势适用场景
Modbus简单、通用、低成本速度慢、安全性弱中小型控制系统
PROFINET高速、实时性好复杂、成本高大型自动化系统
EtherCAT极高速度、低延迟专用硬件要求运动控制
OPC UA跨平台、信息模型丰富资源消耗大IT-OT融合

二、Modbus数据模型与功能码

2.1 数据模型

Modbus采用统一地址空间,但不同数据类型有独立的地址范围:

数据类型数据类型地址范围主站访问权限物理含义
线圈1 bit00001-09999读写数字量输出(DO)
离散输入1 bit10001-19999只读数字量输入(DI)
输入寄存器16 bits30001-39999只读模拟量输入(AI)
保持寄存器16 bits40001-49999读写模拟量输出(AO)

注意:实际设备中常采用基于0的地址编址,如保持寄存器40001对应地址0。

2.2 常用功能码

Modbus协议同时规定了很多种功能码,但常用的往往是用于对存储区读写的功能码,如下表:

功能码

功能说明

01H

读取输出线圈

02H

读取输入线圈

03H

读取保持寄存器

04H

读取输入寄存器

05H

写入单线圈

06H

写入单寄存器

0FH

写入多线圈

10H

写入多寄存器

2.3 异常码

当从设备检测到错误时,返回异常响应:

异常响应:[功能码 + 0x80][异常代码]

常见异常代码:

异常码异常说明
01非法功能码
02非法数据地址
03非法数据值
04从设备故障
05确认(需要长时间操作)
06从设备忙

三、Modbus通信帧结构

3.1 通信机制

Modbus采用严格的"一问一答"式主从通信模式,其通信流程如下:

主设备请求 → [网络传输] → 从设备接收 → 从设备处理 → 从设备响应 → [网络传输] → 主设备接收

超时管理机制:

  • 响应超时(Response Timeout):主设备等待从设备响应的最长时间
  • 帧间超时(Inter-frame Delay):RTU模式下字符间最大允许间隔
  • 轮询间隔(Polling Interval):主设备连续请求间的最小时间间隔

3.2 Modbus RTU帧结构

3.2.1 RTU帧结构

[地址][功能码][数据][CRC16校验]
字段长度说明
从设备地址 1 字节0x00 ~ 0xFF,其中 0x00 是广播地址,0x01 ~ 0xFF 是设备地址。
功能码1 字节指定操作类型,如读寄存器、写寄存器等。
数据域 N 字节包含请求或响应的具体数据,长度可变。
CRC16校验2 字节低字节在前,高字节在后,用于错误检测。

3.2.2 RTU帧时序

  • 3.5字符时间静默:帧开始和结束的标志
  • 1.5字符时间间隔:帧内字符间最大间隔

3.2.3 RTU帧示例

 示例 1:主站读取从站保持寄存器(功能码 0x03)

主站读取从站地址为 0x01 的设备,从寄存器地址 40001 开始,读取 2 个寄存器。

  • 寄存器地址 40001 对应的内部地址是 0x0000(因为 40001 是起始地址,偏移为 0)
  • 要读取 2 个寄存器

请求帧(主站 → 从站)

01 03 00 00 00 02 C4 39
数据解释:
说明
01从设备地址
03功能码
00起始地址高字节
00起始地址低字节
00寄存器数量高字节
02寄存器数量低字节
C4 39CRC 校验

响应帧(从站 → 主站):假设读取到的值为 0x12340x5678

01 03 04 12 34 56 78 B9 38
数据解释:
说明
01从设备地址
03功能码
04字节数
12数据 1 高字节
34数据 1 低字节
56数据 2 高字节
78数据 2 低字节
B9 38CRC 校验

示例 2:主站写单个保持寄存器(功能码 0x06)

场景:主站向从站地址 0x02 的设备,写入寄存器 40002(内部地址 0x0001),值为 0xABCD

请求帧

02 06 00 01 AB CD 79 76
说明
02从设备地址
06功能码
00地址高字节
01地址低字节
AB值高字节
CD值低字节
79 76CRC 校验

响应帧(写操作成功,回显原请求):

02 06 00 01 AB CD 79 76

写单个寄存器时,从站通常回显相同的帧作为确认。

3.3 Modbus TCP帧结构

3.2.1 TCP帧结构

ModbusTCP的数据帧可分为两部分: MBAP头结构 + PDU

MBAP头结构

MBAP为报文头,长度为7字节,组成如下:

名称字节长度释义
事务标识符2用于请求-响应匹配区别报文
协议标识符200 00表示Modbus协议
长度2表示后续的数据长度,单位为字节(包括单元标识符)
单元标识符1从站设备地址

PDU结构

名称字节长度释义
功能码 1 字节指定操作类型,如读寄存器、写寄存器等。
数据 N 字节包含请求或响应的具体数据,长度可变

3.2.2 TCP连接管理:

  • 默认端口:502
  • 保持连接:支持长连接和短连接两种模式
  • 最大PDU长度:通常为253字节(RS485限制)或更多

3.2.3 TCP帧示例

主站读取从站保持寄存器(功能码 0x03)(沿用上面 RTU 的读寄存器例子)

请求帧(TCP)

00 01 00 00 00 06 01 03 00 00 00 02
字段说明
事务 ID00 01任意,如 1
协议 ID00 00Modbus 协议
长度00 06后续 6 字节
从站地址01从站 1
功能码03读保持寄存器
起始地址00 000x0000
寄存器数量00 022 个

响应帧(TCP)

00 01 00 00 00 07 01 03 04 12 34 56 78
字段说明
事务 ID00 01与请求一致
协议 ID00 00
长度00 07后续 7 字节
从站地址01
功能码03
字节数04数据长度
数据12 34 56 78两个寄存器值

四、高级Modbus功能扩展

4.1 Modbus子协议

文件记录访问(功能码0x14)
允许访问设备中的文件记录,适用于复杂数据结构传输。

屏蔽写寄存器(功能码0x16)
实现对寄存器中特定位的原子读写操作,避免竞态条件。

读写多个寄存器(功能码0x17)
组合读写操作,减少通信回合次数。

4.2 Modbus扩展

Modbus Plus (MB+)

  • 令牌传递网络协议
  • 1Mbps传输速率
  • 支持对等通信

Modbus Secure

  • 添加TLS/SSL加密层
  • 防止窃听和篡改
  • 保持协议兼容性

Modbus over UDP

  • 适用于高速、低延迟网络
  • 支持广播和多播
  • 牺牲可靠性换取速度

五、常见问题

5.1 性能优化

批量读取优化

自适应轮询机制:根据数据变化频率动态调整轮询间隔,平衡实时性和带宽利用率。

5.2 错误处理与恢复

通信故障处理策略:

  • 指数退避重试机制
  • 从设备状态缓存
  • graceful降级处理

数据一致性保障:

  • 原子操作使用(功能码0x16)
  • 事务日志记录
  • 写操作确认机制

5.3 安全实践

网络层防护:

  • 物理网络分割
  • 防火墙ACL规则
  • VPN隧道加密

协议层增强:

  • Modbus Secure/TLS
  • 客户端认证
  • 功能码白名单

六、Modbus的应用场景

6.1 OPC UA与Modbus的融合

现代工业系统中,Modbus常作为现场层协议,通过OPC UA网关向上集成:

现场设备 → Modbus RTU/TCP → OPC UA网关 → OPC UA服务器 → 云平台/SCADA

6.2 边缘计算中的Modbus

边缘设备充当Modbus主站,实现本地数据处理和决策:

  • 数据预处理和过滤
  • 本地闭环控制
  • 协议转换和标准化

附录

Modbus功能码对照表

功能码

(16进制)

功能说明

功能码

  (16进制)

功能说明
1读取输出线圈状态12主机模拟编程
2读取输入开关状态13重置通信链路
3读取保持寄存器14读取文件记录
4读取输入寄存器15写入文件记录
5写入单线圈16掩码写寄存器(AND/OR 位操作)
6写入单寄存器17读写多个寄存器
7读取异常状态18读FIFO队列(特殊设备)
8诊断,子功能码决定具体操作19 – 28保留(曾用于编程/文件操作)
09,0A保留(曾用于编程/控循功能)29,2A保留
0B获取事件计数 (仅串行)2B通过 MEI 读取厂商、型号、序列号等
0C获取事件日志(仅串行)2C – 40保留(部分用于 MEI)
0D,0E保留(曾用于编程/探寻)41 – 48原用户保留,现部分厂商使用(如读扩展寄存器)
0F写入多线圈49 – 63未分配(保留)
10写入多寄存器64 – 6E常见用户自定义区(必须查设备手册)
11报告从站标识(Slave ID)6F – 7F保留(128–255 用于异常码)

Modbus异常码对照表

异常码 (十六进制)异常码 (十进制)含义
0x011非法功能(不支持该功能码)
0x022非法数据地址(寄存器/线圈地址不存在)
0x033非法数据值(写入值超出范围)
0x044从站设备故障
0x055确认(仅用于编程命令)
0x066从站设备忙
0x088存储奇偶校验错误
0x0A10网关路径不可用
0x0B11网关目标设备未响应

参考

  • IEC 61158: Industrial communication networks - Fieldbus specifications
  • 《Modbus协议权威指南》,工业自动化出版社,2022
  • Modbus官方文档:https://modbus.org
  • 在线Modbus测试工具:Modbus Simulator
    http://www.dtcms.com/a/393131.html

    相关文章:

  • Springboot使用Integration实现MQTT发送和接收消息
  • 中国传统文化上衣下裳
  • zk管理kafkakafka-broker通信
  • 前端开发技术趋势Web Components
  • Python tarfile库详解
  • ​​[硬件电路-287]:高性能六通道数字隔离器CA-IS3763L 功能概述与管脚定义
  • 错题集系统接口文档
  • 【RAG-LLM】InfoGain-RAG基于文档信息增益的RAG
  • Browser-Use深度解析:重新定义AI与浏览器的智能协作
  • 【Mysql】事务隔离级别、索引原理、/redolog/undolog/binlog区别、主从复制原理
  • AWS 全景速查手册
  • 小米Openvela城市沙龙
  • Python数据分析:求矩阵的秩。啥是矩阵秩?听故事学线代并用Python实现,娘来太容易学会了!
  • UI Toolkit自定义元素
  • redis未授权访问-漏洞复现
  • PR调节器与PI调节器的区别
  • Unity核心概念⑫:碰撞检测
  • 【读论文】面向工业的ASR语音大模型
  • 重谈IO——五种IO模型及其分类
  • 数据库造神计划第十七天---索引(2)
  • 【开题答辩实录分享】以《车联网位置信息管理软件》为例进行答辩实录分享
  • (3)机器学习-模型介绍
  • 如何在 Ubuntu 20.04 LTS 上安装 MySQL 8
  • MuMu模拟器使用入门实践指南:从ADB连接到Frida动态分析
  • 条款5:优先选用auto, 而非显示类型声明
  • 强化学习原理(一)
  • 解读43页PPT经营分析与决策支持系统建设方案交流及解决经验
  • ubuntu24设置证书登录及问题排查
  • MySQL 备份与恢复完全指南:从理论到实战
  • 2011/12 JLPT听力原文 问题四