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

Modbus协议功能码详解学习笔记

1️⃣ 核心思想:通信 = 数据交互 + 行为指令

在上一篇笔记里,我们知道了:

通信的本质是数据交互 —— 设备之间要交换数据。

但光有“数据”还不够,你得告诉对方你想做什么

比如:

  • 你是想“读取”数据?还是想“写入”数据?
  • 你想操作的是“开关”(线圈)还是“数字”(寄存器)?

所以,Modbus协议引入了 “行为” (Action)“功能码” (Function Code) 的概念。

一句话总结
功能码 = 你要执行的行为 + 你要操作的存储区
它就像是你给设备下达的一个“明确指令”。


2️⃣ Modbus的两大基本行为

所有Modbus操作,都离不开这两个最基本的动作:

🔹 读取 (Read)

  • 你向设备“提问”:“你现在状态怎么样?”
  • 比如:读取一个开关是否打开,读取当前温度是多少。
  • 结果:设备会返回给你数据。

🔹 写入 (Write)

  • 你向设备“下命令”:“请你改成这个状态!”
  • 比如:让一个灯亮起来,设置目标温度为30度。
  • 结果:设备会执行你的命令,并可能返回一个“收到”的确认。

💡 记忆口诀
“读”是问,“写”是指令;“读”得数据,“写”改状态。


3️⃣ Modbus的四大核心存储区回顾

在上一篇笔记中,我们已经熟悉了这4个存储区:

存储区名称 代号 特性 数据类型
输出线圈 0区 读写 布尔
输入线圈 1区 只读 布尔
输入寄存器 3区 只读
输出寄存器 4区 读写

🧩 为什么需要区分?
因为不同存储区的数据类型和权限不同,所以需要不同的“功能码”来告诉设备:“我要操作的是哪个区”。


4️⃣ 功能码 = 行为 + 存储区(重点!)

这才是本篇笔记的核心!图中清晰地展示了:

功能码的本质,就是“行为”的代号。

也就是说,每一个功能码都对应着一个特定的操作组合:

✅ 功能码 = [读/写] + [操作对象]

我们把图中的功能码整理成一张超清晰的表格:

功能描述 功能码 (十六进制) 对应存储区 行为说明
读取输出线圈 01 Hex 输出线圈 (0区) 读取可控制的开关状态
读取输入线圈 02 Hex 输入线圈 (1区) 读取只读的开关状态
读取输入寄存器 04 Hex 输入寄存器 (3区) 读取只读的数字量(如温度)
读取输出寄存器 03 Hex 输出寄存器 (4区) 读取可修改的数字量(如设定值)
写入单个线圈 05 Hex 输出线圈 (0区) 修改一个开关的状态(开/关)
写入多个线圈 0F Hex 输出线圈 (0区) 一次修改多个开关的状态
写入单个寄存器 06 Hex 输出寄存器 (4区) 修改一个数字值
写入多个寄存器 10 Hex 输出寄存器 (4区) 一次修改多个数字值

🚨 重要提醒

  • 读取功能码都是偶数开头01, 02, 03, 04
  • 写入功能码都是奇数开头05, 06, 0F, 10
  • 0F10 是“批量操作”,效率更高,适合一次改很多数据。

5️⃣ 功能码速查表 & 记忆技巧

为了帮你快速记住,这里提供一个终极速查表和记忆法:

📌 功能码速记口诀:【读】取:01 -> 输出线圈 (0区)02 -> 输入线圈 (1区)03 -> 输出寄存器(4区)← 注意:读输出寄存器是03!04 -> 输入寄存器(3区)【写】入:05 -> 单线圈 (0区)06 -> 单寄存器(4区)0F -> 多线圈 (0区) ← F=15,代表“多个”10 -> 多寄存器(4区) ← 10=16,代表“多个”💡 小技巧:
- “读”功能码:01, 02, 03, 04 → 数字顺序排列,很好记!
- “写”功能码:05, 06 是单个;0F, 10 是多个。
- 0F 和 10 的“F”和“10”在十六进制里都比较大,暗示“多”。

6️⃣ 异常码:当命令出错时

图中还提到了一个特殊的功能码:

异常码:0x83

这是什么意思呢?

  • 当你发送了一个功能码(比如 01),但设备执行失败了(比如地址错误、权限不足、设备忙等),它不会返回正常数据,而是返回一个异常响应
  • 这个异常响应的“功能码”会变成 原始功能码 + 0x80
  • 例如:你发 01,设备出错,它会回 81(01 + 80 = 81)。
  • 0x83 就是 “读取输出寄存器”(03)出错时的异常码

简单理解
异常码 = 0x80 + 原始功能码
看到 8X 开头的码,就知道设备“没干成”你交代的事,需要查原因。


7️⃣ 实战模拟:想象一下你在点餐

为了让你彻底理解,我们用“点餐”来比喻:

你的指令 对应功能码 解释
“服务员,给我看一下菜单上的第1道菜价格” 04 读取输入寄存器(只读数字)
“服务员,告诉我厨房里的灯现在开着吗?” 02 读取输入线圈(只读开关)
“服务员,帮我把餐桌上的灯打开!” 05 写入单个线圈(控制一个开关)
“服务员,把空调温度设为25度!” 06 写入单个寄存器(设置一个数字)
“服务员,把所有包厢的灯都关掉!” 0F 写入多个线圈(批量控制开关)
“服务员,把所有房间的温度都设为22度!” 10 写入多个寄存器(批量设置数字)

🍽️ 看,是不是很简单? 你只需要知道“我想干什么”+“我对谁干”,就能选对功能码!


🎯 下一步学习建议

  1. 动手实践:使用Modbus调试工具(如Modbus Poll, QModBus),选择不同的功能码去读写虚拟设备的数据,观察返回结果。
  2. 理解数据帧结构:功能码只是Modbus数据包的一部分,后续可以学习完整的“请求帧”和“响应帧”格式。
  3. 查手册:任何Modbus设备都会在手册中列出支持哪些功能码,以及每个地址对应什么功能,一定要学会看手册!
http://www.zskr.cn/news/38890.html

相关文章:

  • 议论文素材分类整理
  • 使用WSL挂载U盘及SD卡外设的方案
  • day06-自动出题工作流
  • 推送docker镜像到github
  • godot 描边插件
  • 对递归两层含义的理解
  • @pytest.fixture和setup/teardown
  • €$P2025
  • CSP2025 补题
  • 指数函数和对数函数
  • Java数组——三种初始化及内存分析,数组的基本特点,下标越界与小结
  • QPS、TPS、PV、UV、并发量
  • 补码加减法
  • 今天总结
  • 11月3号
  • 2025年平板清洗机标杆厂家最新推荐:恒泰清洗,超声波清洗机/清洗烘干机/全自动清洗机/周转箱清洗机/工业清洗机/树立高效洁净新标准
  • 视频工具FFmpeg
  • Odoo中的消费税处理方案
  • 2025河北小型新中式全屋定制,意式全屋定制,意式极简全屋定制,全屋定制厂家精选:尚品金马装饰,本土实力品牌值得关注
  • 2025年闪蒸干燥机厂家推荐:常州高性价比闪蒸干燥机企业盘点
  • 2025实用铁氟龙高温线,硅胶高温线,高压高温线,高温线厂家推荐:申远高温线,聚焦细分领域的靠谱选择
  • uni-app x开发商城系统,资讯列表结构,数据渲染,news-item组件封装
  • PostgreSQL数据库:新手开启从0到1的学习之路
  • nfs 自动挂载的一些问题
  • 2025年浙江轻奶茶加盟渠道权威推荐榜单:奶茶加盟/茶饮加盟/奶茶店加盟渠道精选
  • 2025年河南心理健康咨询机构权威推荐:河南婚姻心理咨询/河南家庭心理咨询/河南心理咨询机构服务中心精选
  • 面试:安全框架与安全管理-网络-防火墙与IPS - 徐正柱
  • 2025 年 11 月 DALI 调光系统厂家推荐排行榜,调光网关/调光开关/调光电源/调光驱动/调光传感器/调光模块/调光控制系统公司推荐
  • 2025年北京合同纠纷律师事务所权威推荐榜:专业律师团队与高效解决方案口碑之选
  • SQL - JOIN 中关联条件和过滤条件的执行顺序