Qt C++实战:Modbus RTU协议详解及主站实现
文章目录一 Modbus RTU 协议1.1 Modbus 协议分类及通信过程1.2 Modbus-RTU 协议数据帧格式二 Modbus RTU 主站上位机2.1 界面设计2.2 编码实现2.2.1 串口操作2.2.2 从站操作2.2.3 信息显示2.3 测试其他Modbus总线协议属于应用层协议,是一种常见的工业系统通讯协议,被广泛应用于工业领域。本篇将对Modbus RTU协议进行详细介绍,并实现一个基于Qt的Modbus RTU主站上位机。一 Modbus RTU 协议1.1 Modbus 协议分类及通信过程Modbus协议分为三类,包括:Modbus-RTU,Modbus-ASCII和Modbus-TCP。Modbus是主从方式通信,通信由主机发起,一问一答式,从机无法主动向主机发送数据。《GB/T 19582.2》中规定:RTU 模式中每个字节为11位,格式为:8bit数据位(先发地位)、1bit起始位、1bit奇偶校验、1bit停止位。默认使用偶校验,也可以使用其他模式(奇校验、无校验)。使用无校验时要求2个停止位,以此来满足11bit的数据。发送字符或字节的顺序为从左到右,如下图所示:通过配置,设备可以接受奇校验,偶校验或无校验,如果无校验,那么传送一个附加的停止位来填充字符帧使其成为完整的11位异步字符,如下图所示:1.2 Modbus-RTU 协议数据帧格式Modbus-RTU帧最大长度为256字节,帧描述如下:地址码:1个字节的从机地址码。0:广播地址;1-247:从机地址;248-255:保留;功能码:常用的就是01、02、03、04、05、06、15和16,具体描述见下表;数据区:数据区包括起始地址、数量和数据,这三项均是大端模式;CRC校验:两个字节,小端模式,校验的数据范围为:地址码+功能码+数据区。功能码的具体描述见下表:功能码名称作用01读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)02读取输入状态取得一组开关输入的当前状态(ON/OFF)03读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值04读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值05强置单线圈强置一个逻辑线圈的通断状态06预置单寄存器把具体二进制装入一个保持寄存器07读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态08会送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴09编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑10控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否完成其操作任务,仅在含有功能码9的报文发送后,本功能码才能发送11读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时。12读取通信事件记录可使主机检索每台从机的Modbus事务处理通信事件记录。如果某项事务处理完成,记录会给出相关错误13编程(184/384 484 584)可使主机模拟编程器功能修改PC从机逻辑14探询(184/384 484 584)可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送15强置多线圈强置一串连续逻辑线圈的通断16预置多寄存器把具体的二进制值装入一串连续的保持寄存器17报告从机标识可使主机判断编址从机的类型及该从机运行指示灯的状态18(884 和 MICRO 84)可使主机模拟编程功能,修改PC状态逻辑19重置通信链路发生非可修改错误后,使从机复位QModbusDataUnit 是 Qt Modbus 模块中的一个核心类,用于表示Modbus协议中一次读写操作所涉及的数据单元。如下表所示:QModbusDataUnit::RegisterType 枚举值Modbus功能码寄存器类型(通俗名称)读写属性Coils01,05,15线圈,位数据(1bit)读写DiscreteInputs02离散输入,位数据(1bit)只读InputRegisters04输入寄存器,字数据(16bits)只读HodingRegister03,06,16保持寄存器,字数据(16bits)读写二 Modbus RTU 主站上位机2.1 界面设计基于 Qt 设计上位机界面,包括通信方式选择,串口配置,读写配置,设备参数设置,发送/接收数据展示,发送数据和接收数据。具体界面设置如下图所示:2.2 编码实现上位机软件主要功能包括串口操作、从站操作以及信息显示三个部分。2.2.1 串口操作首先将通信方式设置为Serial Port,然后配置串口参数,包括串口号、波特率、数据位、校验位、停止位、超时时间和重复次数。其中,串口号通过自动搜索获取当前可用的串口,实现方式如下:foreach(constQSerialPortInfoinfo,QSerialPortInfo::availablePorts()){ui-comboBoxPort-addItem(info.portName());}串口操作主要是打开串口和关闭串口,具体实现如下:voidMainWindow::on_pushButton_clicked(){if(m_stop){if(modbusDevice){modbusDevice-disconnectDevice();delete modbusDevice;modbusDevice=nullptr;}intindex=ui-cboxConnectType-currentIndex();if(0==index){modbusDevice=newQModbusRtuSerialMaster(this);//配置串口参数modbusDevice-setConnectionParameter(QModbusDevice::SerialPortNameParameter,ui-comboBoxPort-currentText(

相关新闻

Web Audio Samples:Chrome官方团队打造的Web音频开发终极指南

Web Audio Samples:Chrome官方团队打造的Web音频开发终极指南

Web Audio Samples:Chrome官方团队打造的Web音频开发终极指南 【免费下载链接】web-audio-samples Web Audio API samples by Chrome Web Audio Team 项目地址: https://gitcode.com/gh_mirrors/we/web-audio-samples 想要快速掌握Web Audio API开发吗&#…

2026/7/12 22:14:48阅读更多 →
SmartPack-Kernel-Manager快速设置模板:一键应用最优配置

SmartPack-Kernel-Manager快速设置模板:一键应用最优配置

SmartPack-Kernel-Manager快速设置模板:一键应用最优配置 【免费下载链接】SmartPack-Kernel-Manager Source code of SmartPack-Kernel Manager, the Ultimate Tool to Manage your Kernel 项目地址: https://gitcode.com/gh_mirrors/smar/SmartPack-Kernel-Mana…

2026/7/12 22:09:47阅读更多 →
futures-await未来展望:对Rust语言特性的影响与贡献

futures-await未来展望:对Rust语言特性的影响与贡献

futures-await未来展望:对Rust语言特性的影响与贡献 【免费下载链接】futures-await 项目地址: https://gitcode.com/gh_mirrors/fu/futures-await futures-await是Rust语言中一个重要的开源项目,它为Rust提供了异步/等待(async/awai…

2026/7/12 22:09:47阅读更多 →
Terraforming Rails死代码检测终极指南:Traceroute和FactoryTrace如何快速清理项目冗余

Terraforming Rails死代码检测终极指南:Traceroute和FactoryTrace如何快速清理项目冗余

Terraforming Rails死代码检测终极指南:Traceroute和FactoryTrace如何快速清理项目冗余 【免费下载链接】terraforming-rails Terraforming legacy Rails applications guides and tools 项目地址: https://gitcode.com/gh_mirrors/te/terraforming-rails 你…

2026/7/12 23:14:55阅读更多 →
Edalize高级技巧:自定义工具配置和参数传递的最佳实践

Edalize高级技巧:自定义工具配置和参数传递的最佳实践

Edalize高级技巧:自定义工具配置和参数传递的最佳实践 【免费下载链接】edalize An abstraction library for interfacing EDA tools 项目地址: https://gitcode.com/gh_mirrors/ed/edalize 想要在EDA工具集成中实现高效的工作流?掌握Edalize的自…

2026/7/12 23:14:55阅读更多 →
终极TypeScript函数组合库composable-functions:简化异步错误处理的完整指南

终极TypeScript函数组合库composable-functions:简化异步错误处理的完整指南

终极TypeScript函数组合库composable-functions:简化异步错误处理的完整指南 【免费下载链接】domain-functions Types and functions to make composition easy and safe 项目地址: https://gitcode.com/gh_mirrors/do/domain-functions composable-functio…

2026/7/12 23:14:55阅读更多 →
TRON Wallet CLI安全配置指南:多重签名与账户权限设置

TRON Wallet CLI安全配置指南:多重签名与账户权限设置

TRON Wallet CLI安全配置指南:多重签名与账户权限设置 【免费下载链接】wallet-cli Wallet CLI 项目地址: https://gitcode.com/gh_mirrors/wa/wallet-cli TRON Wallet CLI是TRON生态系统中功能强大的命令行钱包工具,提供了多重签名和账户权限管理…

2026/7/12 23:14:55阅读更多 →
深入解析Kimi-K2.5-W4A8架构:从MoE到W4A8量化的技术实现

深入解析Kimi-K2.5-W4A8架构:从MoE到W4A8量化的技术实现

深入解析Kimi-K2.5-W4A8架构:从MoE到W4A8量化的技术实现 【免费下载链接】Kimi-K2.5-W4A8 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Kimi-K2.5-W4A8 Kimi-K2.5-W4A8是一款融合了MoE(混合专家)架构与W4A8量化技术的先进AI模型…

2026/7/12 23:14:55阅读更多 →
多GPU并行推理配置:AMD MiniMax-M2.1-MXFP4 tensor-parallel-size优化

多GPU并行推理配置:AMD MiniMax-M2.1-MXFP4 tensor-parallel-size优化

多GPU并行推理配置:AMD MiniMax-M2.1-MXFP4 tensor-parallel-size优化 【免费下载链接】MiniMax-M2.1-MXFP4 项目地址: https://ai.gitcode.com/hf_mirrors/amd/MiniMax-M2.1-MXFP4 AMD MiniMax-M2.1-MXFP4是一款高性能的大语言模型,支持多GPU并…

2026/7/12 23:09:52阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/12 0:02:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/12 0:02:11阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/12 0:02:11阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/12 0:02:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/12 0:02:11阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/12 0:02:11阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/11 16:20:28阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/11 23:15:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/12 21:43:43阅读更多 →