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

Modbus TCP关键知识点回顾

目录

1️⃣ 本质定位(最关键)

2️⃣ 数据模型(必须会)

3️⃣ 报文结构(非常关键)

4️⃣ 常用功能码(重点记)

5️⃣ 地址理解(易踩坑)

6️⃣ TCP 特性(区别于 RTU)

7️⃣ 数据解析重点

8️⃣ 工程实践一句话

一、完整 Modbus TCP 报文(请求帧)

二、MBAP Header(7 字节)

三、PDU(协议数据单元)

四、从站响应报文(示例)

完整响应帧

五、响应拆解

MBAP

PDU

六、再给你一个【写寄存器】示例(功能码 06)

写 40001 = 123

七、一句话记忆法(工程级


1️⃣ 本质定位(最关键)

  • Modbus TCP = Modbus 协议 + TCP/IP

  • 跑在以太网(端口 502)

  • 主从模型:Client(主站) ⇄ Server(从站)


2️⃣ 数据模型(必须会)

Modbus 只有4 种数据区:

类型名称访问常见用途
0xCoil读/写开关量输出
1xDiscrete Input只读开关量输入
3xInput Register只读模拟量输入
4xHolding Register读/写参数、模拟量

👉寄存器本质是 16bit


3️⃣ 报文结构(非常关键)

Modbus TCP 报文 =MBAP 头 + PDU

MBAP(7 字节):

  • Transaction ID(事务号)

  • Protocol ID(固定 0)

  • Length

  • Unit ID(通常可忽略)

PDU:

  • 功能码

  • 数据


4️⃣ 常用功能码(重点记)

  • 01读线圈

  • 02读离散输入

  • 03读保持寄存器 ⭐

  • 04读输入寄存器

  • 05写单线圈

  • 06写单寄存器

  • 0F写多线圈

  • 10写多寄存器 ⭐

👉03 和 10 最常用


5️⃣ 地址理解(易踩坑)

  • 协议里地址从 0 开始

  • 文档里常写 40001、30001 —— 这是逻辑编号

  • 实际请求地址 = 文档地址 − 基地址

📌 例:

文档写 40001
实际地址 = 0


6️⃣ TCP 特性(区别于 RTU)

  • 无校验 CRC(TCP 已保证)

  • 可并发请求

  • 一问一答(不能乱序)

  • 延迟低,速度快


7️⃣ 数据解析重点

  • 大端字节序(Big Endian)

  • 32bit / float 通常用2 个寄存器

  • 不同厂商:

    • 字节顺序可能不同(ABCD / CDAB / BADC)


8️⃣ 工程实践一句话

90% 的问题出在:地址偏移 + 数据类型 + 字节序

好,直接给你真实可用的十六进制报文,逐字节拆给你看 👇
(读保持寄存器 40001 起,读 2 个寄存器)


一、完整 Modbus TCP 报文(请求帧)

00 01 00 00 00 06 01 03 00 00 00 02

下面逐字段解释(非常重要)👇


二、MBAP Header(7 字节)

00 01 | 00 00 | 00 06 | 01
字节含义说明
00 01Transaction ID事务号,客户端自己定义,用于区分请求
00 00Protocol ID固定为 0(Modbus TCP 标志)
00 06Length后面Unit ID + PDU的长度(=6)
01Unit ID从站 ID(TCP 下通常随便填)

三、PDU(协议数据单元)

03 | 00 00 | 00 02
字节含义
03功能码:读保持寄存器
00 00起始地址(40001 → 实际地址 0)
00 02读取寄存器数量 = 2

四、从站响应报文(示例)

假设返回两个寄存器值:

  • 第一个:0x0064(100)

  • 第二个:0x00C8(200)

完整响应帧

00 01 00 00 00 07 01 03 04 00 64 00 C8

五、响应拆解

MBAP

00 01 | 00 00 | 00 07 | 01
  • Length = 7(UnitID + 功能码 + 字节数 + 数据)

PDU

03 | 04 | 00 64 00 C8
字节含义
03功能码
04数据字节数(2 寄存器 × 2 字节)
00 64寄存器1 = 100
00 C8寄存器2 = 200

六、再给你一个【写寄存器】示例(功能码 06)

写 40001 = 123

00 02 00 00 00 06 01 06 00 00 00 7B
  • 06:写单寄存器

  • 00 00:地址

  • 00 7B:123


七、一句话记忆法(工程级)

Modbus TCP = 7 字节 MBAP + 功能码 + 数据,全是大端

http://www.cnnetsun.cn/news/91888.html

相关文章:

  • AM247L-0000伺服电机
  • DoraemonKit(DoKit)使用教程:从集成到实战
  • 构筑 AI 理论体系:深度学习 100 篇论文解读 第十九篇:序列建模的焦点——注意力机制 Attention Mechanism (2015)
  • 【小白笔记】移除元素与删除有序数组中的重复项与轮转数组(三步反转)
  • 什么是关键字驱动测试?
  • 前沿技术借鉴研讨-2025.12.16(超声心动图综述/妊娠期糖尿病/降低CTG解读主观性)
  • 别让发成绩,耗掉你课后的半小时
  • 企业级 Prompt 管理中心:实验分流 + 曝光埋点 + 可回溯,版本化/AB/DSL/可观测全齐
  • 执行 install.sh 报错 `env: ‘bash\r‘: No such file or directory` 怎么解决?
  • Part 10|我给这套系统划的第一个边界
  • agent-zh.md
  • 为什么过滤 rtmpt 而不是 rtmp?
  • Navicat x 达梦技术指引 | 启用和配置AI助手
  • Transformer的注意力权重的理解
  • 解构 Codigger:从内核到无限生态的“进化阶梯”
  • 基于Python的高考志愿报名推荐系统源码设计与文档
  • 飞桨PaddlePaddle入门与核心实践
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第四十讲)
  • 热销榜单:2025年高口碑数字人推荐,解决你的选择难题!
  • 应“双碳”考核!安科瑞通信机房能耗监测方案,让PUE管控精准落地
  • 1天净流入10亿!A500ETF南方凭什么成为布局中国核心资产的优选?
  • Android 基础入门教程之RelativeLayout(相对布局)
  • 基于微信小程序的跑腿系统的设计与实现毕业设计项目源码
  • 基于SpringBoot的社区老年人健康知识阅读分享管理系统毕业设计项目源码
  • MySQL迁移达梦数据库,Quartz报错“无效的表或视图名”
  • Dify入门:搭建一个文件翻译智能体
  • 基于SpringBoot的金丰旺零售商经营平台系统毕业设计项目源码
  • Git:分布式版本控制的哲学、理论与创新
  • 农业产量预测的终极方案:R语言中XGBoost+随机森林+ARIMA融合技巧
  • 为什么90%的团队都选错了Dify排序算法?真相在这里!