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

Modbus协议地址不连续,你还在查询多次?效率太差了点~


正文


大家好,我是bug菌~

1

遇到的问题~

modbus协议大家应该一点也不陌生,在工业自动化中的各类设备中尤为常见,基本上是标配的存在,而且协议也比较简单且容易实现。

所以bug菌目前做的平台都会预留支持modbus协议相关的通信接口,作为modbus主机面对众多的协议地址各异的从机是一件头疼的事情。随着被采集的产品采样速度和实时性要求越来越高,提高通信波特率是首先被考虑的,可是随着波特率越来越高,为了保障稳定性对线路的长度等因素也要求越来越严格,必然也到了一定的瓶颈。

在不改变硬件的条件下,似乎也没啥好办法,不过我们是否可以转向通信协议的优化,至少让大部分供应商能够适配一个通用的协议来帮我提高效率?而且这样的协议既可以维持供应商产品对外的协议兼容性,又不会给供应商的硬件平台带来太多的困扰和挑战呢?

大家都知道在标准Modbus协议中,读取保持寄存器的功能码为0x03,该功能码要求所读取的寄存器地址必须是连续的,然而很多设备的地址都比较分散,采集一轮数据最长的需要7~8次的一问一答,通信延时、轮询周期延时、应答延时等等,导致每轮完整的数据采集都非常的慢。

刚开始我也想过,大不了一口气用03h把连续的一片寄存器都读上来,然后自己在从这块数据里面挑自己想要的,若需读取三个不连续寄存器地址0x10000x20000x3000,那内存太大了,通信时间也长,这口气还真是吞不下~

那如果能够让Modbus从机把我想要的离散数据提前打包一起发回给我这不就快了吗?

2

扩展modbus功能码

Modbus标准协议中定义的功能码的范围大概在0x01~0x7F范围的样子。其中,65~72100~110等区间在协议规范中被明确标记为“用户自定义功能码”,允许设备制造商实现标准协议未涵盖的特殊功能,如读写设备特定寄存器组、执行内部命令等。

那便可以在Modbus协议功能码集合中新增自定义功能码0x44,来定制与供应商的私有协议,用于实现“读取多个不连续寄存器”。该功能码可支持最大64个不连续寄存器的单次读取,且能够适用于RTU、ASCII及TCP等多种传输模式。

说干就干,请求帧的格式设计:

响应帧格式设计,正常响应帧结构如下:

如果当请求中出现非法地址或数量超限时,从设备返回异常响应,其帧格式如下:

3

主从设备处理流程

这张图就非常清晰的说明了主从设备利用扩展功能码获取不连续寄存器的通信交互过程,比如我们现在要访问主设备需读取从站地址0x01中三个不连续保持寄存器:0x10000x20000x3000;并且这三个地址分别存放着数据:0x12340x56780x9ABC

那么我们就可以发送请求帧:

01 44 03 10 00 20 00 30 00 CRC_H CRC_L
此时从设备会立马回复响应帧:
01 44 06 12 34 56 78 9A BC CRC_H CRC_L

这样一条命令就把所有想要的数据打包给我了,相比以前分包轮询不仅简化成了一次一次请求-响应交互,而且减少帧头、地址、校验等冗余信息的重复传输,更重要的是原来的modbus约定的协议也完全可以兼容。

最后

好了,今天就跟大家分享这么多了,如果你觉得有所收获,一定记得点个~

唯一、永久、免费分享嵌入式技术知识平台~

推荐专辑 点击蓝色字体即可跳转

MCU进阶专辑

嵌入式C语言进阶专辑

“bug说”专辑

专辑|Linux应用程序编程大全

专辑|学点网络知识

专辑|手撕C语言

专辑|手撕C++语言

专辑|经验分享

专辑|电能控制技术

专辑 | 从单片机到Linux

http://www.jsqmd.com/news/553038/

相关文章:

  • 2026年知名的川西旅行社/青海旅行社/私人定制旅行社/青甘大环线旅行社满意推荐 - 品牌宣传支持者
  • Pi0具身智能v1动态环境适应展示:光线变化下的稳定表现
  • Thumb-2指令集在Cortex-M3上的5个高效编程技巧(附真实项目代码)
  • [特殊字符] Nano-Banana效果对比:Turbo LoRA vs 原生SDXL拆解精度实测
  • SOONet模型Python源码解析:从零理解自然语言视频定位实现
  • 5分钟部署Qwen3.5-9B:跟着教程走,小白也能轻松搞定
  • 2026年热门的扬州无人机caac培训/扬州无人机执照源头厂家推荐几家 - 品牌宣传支持者
  • SAP资产折旧调错了怎么办?手把手教你用ABMA和AB08冲销与取消
  • mPLUG本地部署一文详解:从ModelScope模型下载到Streamlit服务上线
  • 2026年市面上专业的阀板企业推荐,冲压件/管梁/阀板/摘穗板/尿素泵支架/钣金件/拉伸件,阀板直销厂家口碑推荐 - 品牌推荐师
  • C++的std--ranges代码生成
  • 哔哩下载姬downkyi:零基础到专业级的B站视频高效管理指南
  • Zabbix告警AI分析实战:对比DeepSeek-R1与V3模型,哪个更适合你的运维场景?
  • RVC模型效果深度评测:针对不同性别、年龄、语言的声音转换鲁棒性
  • CHIPYARD开发环境一站式部署与实战编译
  • 保姆级避坑指南:用Gromacs 2023版跑通蛋白质结合自由能伞形采样(附完整配置文件)
  • Nomic-Embed-Text-V2-MoE性能调优:GPU显存与批处理大小优化
  • OpenClaw 的模型服务是否支持 Serverless 部署?冷启动时间如何优化?
  • 2026年口碑好的不锈铁铬板厂家推荐,联系方式别错过,不锈铁板材/430不锈钢板材,不锈铁铬板源头厂家找哪家 - 品牌推荐师
  • OpCore-Simplify:让黑苹果配置从专业难题变为点击操作,3步完成自动化EFI构建
  • Ollama+TranslateGemma-12B+Docker:企业级容器化部署全指南
  • FastAPI翻译质量:自动化检查的完整指南
  • 2026碳氢超声波清洗机优质品牌TOP5推荐:医用清洗机/医用清洗机/单槽超声波清洗机/多槽超声波清洗机/实验室清洗机/选择指南 - 优质品牌商家
  • ROS2 Humble下,gazebo_grasp_plugin的CMake安装路径坑我两天,这样改才生效
  • FlowState Lab结合YOLOv8实现智能视频分析:目标检测与场景理解实战
  • 2026年靠谱的仿石石英砖/陶瓷仿石砖/通体仿石砖口碑厂家汇总 - 品牌宣传支持者
  • Chandra OCR场景应用:批量处理发票合同,自动生成结构化数据
  • UNIT-00:Berserk Interface辅助数据库课程设计:从ER图到SQL
  • 探索d2s-editor:暗黑破坏神2存档编辑完全指南
  • 从游戏设计到算法实现:拆解睿抗CAIP编程赛‘游戏设计师’一题的BFS+离线查询思路