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

【QT】ModbusTCP读写寄存器类封装

背景

在编写ModbusTCP时候,连接、寄存器读写属于通用的功能,为了便于后续直接复用,选择封装到一个类。本博文在封装展示该类过程中,会提及到编写该类过程中,出现的连接未成功的问题,以及该问题的解决方式。

问题

首先,需要明确设备连接状态有4类:

enum State {UnconnectedState,ConnectingState,ConnectedState,ClosingState};

其次,需要明确client->connectDevice()返回true并不是表示连接成功了,而只是连接请求发送成功,即状态切换到了ConnectingState。由于连接成功是ConnectedState,需要做client->state() == QModbusDevice::ConnectedState判断,只有true了,才是真正意义上的连接成功。

实现

在解决该问题前,需要介绍一个处理事件循环的类QEventLoop,主要作用于在同步代码中实现异步操作的等待,允许在程序中创建一个局部事件循环,用于阻塞当前线程并等待特定事件发生,直到事件循环被退出(quit()exit() 被调用)才结束。它的生命周期:事件循环在exec()调用后启动,在 quit() 后停止,通常配合信号槽机制使用

针对以上提及的问题,加入超时机制,等待连接完成:

bool modbusClient::connect(QString &msg)
{if (!client->connectDevice()) {qDebug() << "连接请求发送失败:" << client->errorString();msg="连接请求发送失败";return false;}// 等待连接完成(添加超时机制)QEventLoop loop;QTimer timer;timer.setSingleShot(true);//单次触发模式。定时器超时后会自动停止,不会重复触发timer.setInterval(2500);// 监听连接状态变化QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);QObject::connect(client, &QModbusClient::stateChanged, [&](QModbusDevice::State state) {// qDebug() << "连接状态变化:" << state;if (state == QModbusDevice::ConnectedState) {loop.quit();  // 连接成功,退出事件循环}});timer.start();loop.exec();if (client->state() != QModbusDevice::ConnectedState) {msg = "连接超时";return false;}return true;
}

解决了以上的问题后,就可以进行modbusClient类封装了,已上传资源,注意使用时候要pro中引入QT += serialbus。调用方式,可以采用值调用方式modbusClient md(it.key(),it.value());md.work1(msg);,也可以采用指针的调用方式modbusClient *md1 =new modbusClient(it.key(),it.value()); md1->work1(msg);

相关文章:

【QT】ModbusTCP读写寄存器类封装

背景 在编写ModbusTCP时候&#xff0c;连接、寄存器读写属于通用的功能&#xff0c;为了便于后续直接复用&#xff0c;选择封装到一个类。本博文在封装展示该类过程中&#xff0c;会提及到编写该类过程中&#xff0c;出现的连接未成功的问题&#xff0c;以及该问题的解决方式。…...

SQLMesh 内置宏详解:@PIVOT等常用宏的核心用法与示例

本文系统解析 SQLMesh 的四个核心内置宏&#xff0c;涵盖行列转换的 PIVOT、精准去重的 DEDUPLICATE、灵活生成日期范围的 DATE_SPINE&#xff0c;以及动态表路径解析的 RESOLVE_TEMPLATE。通过真实案例演示参数配置与 SQL 渲染逻辑&#xff0c;并对比宏调用与传统 SQL 的差异&…...

ajax post请求 解决自动再get请求一次

ajax post请求 解决自动再get请求一次 HTMLjavascriptFlask第一种方法&#xff1a;第二种方法&#xff1a; HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录</title></head> &l…...

当前主流的传输技术(如OTN、IP-RAN、FlexE等)

好的&#xff01;当前主流的传输技术&#xff08;如OTN、IP-RAN、FlexE等&#xff09;各有其独特的应用场景&#xff0c;下面我会逐一展开讲解&#xff0c;并结合实际案例说明它们如何在不同领域发挥作用。 一、OTN&#xff08;光传送网&#xff09; 1. 核心特点 大容量&…...

利用 SQL Server 作业实现异步任务处理,简化系统架构

在现代企业系统中&#xff0c;异步任务是不可或缺的组成部分&#xff0c;例如&#xff1a; 电商系统中的订单超时取消&#xff1b; 报表系统中的异步数据导出&#xff1b; CRM 系统中的客户积分计算。 传统的实现方式通常涉及引入消息队列&#xff08;如 RabbitMQ、Kafka&a…...

【Java高阶面经】3.熔断机制深度优化:从抖动治理到微服务高可用架构实战

一、熔断抖动的本质剖析与核心成因 1.1 熔断机制的核心价值与抖动危害 熔断机制作为微服务弹性架构的核心组件,通过模拟电路断路器逻辑,在服务出现异常时自动阻断请求链,防止故障扩散引发雪崩。但频繁的“熔断-恢复-熔断”抖动会导致: 用户体验恶化:请求成功率波动大,响…...

如何删除 HP 笔记本电脑中的所有数据:3 种解决方案说明

当您准备删除 HP 笔记本电脑中的所有数据时&#xff0c;无论是为了保护您的隐私还是为设备重新启动做好准备&#xff0c;使用正确的方法非常重要。在本文中&#xff0c;您可以获得 3 个有效的解决方案&#xff0c;帮助您轻松删除计算机中的所有内容。之后&#xff0c;您可以安全…...

以太联 - Intellinet 闪耀台北 SecuTech 国际安全科技应用博览会

2025 年 5 月 7 日至 9 日&#xff0c;台北 SecuTech 国际安全科技应用博览会现场热闹非凡&#xff0c;以太联 - Intellinet 携旗下前沿产品与解决方案精彩亮相&#xff0c;成为展会上一道亮丽的风景线&#xff0c;吸引了众多业内人士的目光&#xff0c;收获了广泛关注与高度认…...

JavaScript性能优化实战(13):性能测试与持续优化

在前面的系列文章中,我们探讨了各种JavaScript性能优化的方法和实战案例。然而,优化工作不应仅是一次性的努力,而应当成为开发流程中的常态。本篇将聚焦于如何建立系统化的性能测试体系,并实现持续的性能优化机制,确保应用长期保持出色的性能表现。 前端性能测试体系构建…...

nbufxz动态规划1

草药题 dp[i][j]&#xff0c;考虑i个草药&#xff0c;j个时间&#xff0c;能获得的最大价值。这i个草药中&#xff0c;你不一定全部都采集了。你可能有的采了&#xff0c;有的没采。然后你最终得到了一个最优的结果。 状态转移方程无非就是&#xff1a; dp[i][j] max(dp[i …...

PostgreSQL 初体验

目录 一、PostgreSQL 1. 简介 2. 特点 &#xff08;1&#xff09; 开源免费&#xff08;Open Source&#xff09; &#xff08;2&#xff09;标准兼容&#xff08;SQL Compliance&#xff09; &#xff08;3&#xff09; 丰富的数据类型&#xff08;Data Types&#xff09…...

北斗导航 | 基于matlab的多波束技术的卫星通信系统性能仿真

基于多波束技术的低轨(LEO)卫星通信系统 **1. 仿真场景建模**1.1 LEO卫星轨道参数设置1.2 地面终端分布**2. 多波束天线模型**2.1 波束方向图生成2.2 频率复用方案**3. 链路预算与干扰分析**3.1 自由空间路径损耗3.2 信噪比(SNR)计算**4. 动态资源调度算法**4.1 基于流量需…...

数据结构与算法学习笔记(Acwing 提高课)----动态规划·状态机模型

数据结构与算法学习笔记----动态规划状态机模型 author: 明月清了个风 first publish time: 2025.5.20 ps⭐️背包终于结束了&#xff0c;状态机模型题目不多。状态机其实是一种另类的状态表示方法&#xff0c;将某一个点扩展为一个状态进行保存并在多个状态之间转移&#xf…...

Vue 3.0 中 Teleport 详解

Teleport 是 Vue 3.0 引入的一个非常有用的特性&#xff0c;它允许你将组件的一部分模板"传送"到 DOM 中的其他位置&#xff0c;而不改变组件的逻辑层次结构。 1. 基本概念 Teleport 的主要用途是将某些 DOM 元素渲染到 Vue 应用之外的 DOM 节点中&#xff0c;这在…...

Linux在防火墙中添加开放端口

例如&#xff1a;安装docker时启动报错&#xff1a; Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. 此时开放对应端口号就可以咯 在防…...

day24:零基础学嵌入式之系统编程

一、系统编程包含 文件的读写、和常用操作&#xff0c;操作系统已经进入多任务时代&#xff0c;在同一时刻同时运行多个程序。 二、标准io&#xff1b;stdio.h&#xff08;以计算机为中心&#xff09; 1.头文件路径&#xff1a;/usr/include/stdio.h so动态库&#xff1a;st…...

2.10 财务分析

10.1 财务报告构成及列报基本要求 10.1.1 财务报告 1.财务报告的构成 资产负债表、利润表、现金流量表、所有者权益变动表和附注小型企业可不编现金流量表。 2.财务报表及其作用 1.资产负债表的内容及其作用 内容 资产类、流动性大小顺序排序。流动资产、非流动资产负债和…...

docker容器知识

一、docker与docker compose区别&#xff1a; 1、docker是创建和管理单个容器的工具&#xff0c;适合简单的应用或服务&#xff1b; 2、docker compose是管理多容器应用的工具&#xff0c;适合复杂的、多服务的应用程序&#xff1b; 3、docker与docker compose对比&#xff…...

国标GB28181视频EasyGBS视频监控平台搭建城市交通道路可视化管理/道路视频巡检/应急监控指挥

一、方案背景​ 随着城市人口与车辆激增&#xff0c;交通管理面临严峻挑战&#xff1a;高峰期道路拥堵、事故处理滞后、违法取证低效&#xff0c;传统管理模式难以为继。智慧交通依托信息技术&#xff0c;成为破局关键&#xff0c;其中视频监控是实现精细化管理的核心。国标GB…...

【LeetCode 热题 100】有效的括号 / 最小栈 / 字符串解码 / 柱状图中最大的矩形

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;LeetCode 热题 100 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 栈有效的括号最小栈字符串解码每日温度柱状图中最大的矩形 堆数组中的第K个最大元素 栈 有效的括号 有效的括号 cl…...

Oracle中如何解决BUFFER BUSY WAITS

和BUFFER CACHE相关的常见等待事件还有BUFFER BUSY WAITS。顾名思义&#xff0c;BUFFER BUSY WAITS等待事件指的是多个会话不能共享缓冲区中的数据块而引发的等待事件。 发生BUFFER BUSY WAITS事件时&#xff0c;P1值代表数据文件号&#xff0c;P2值代表数据块号&#xff0c;P3…...

LeetCode 93.复原IP地址 LeetCode 78.子集 LeetCode 90.子集II

LeetCode 93.复原IP地址 其实思想跟回文字符串那道题是类似的&#xff0c;但难点在于这道题的终止条件和判断是否IP地址进行划分后是否合理&#xff1f; 思路&#xff1a; 通过一个int类型的全局变量来记载 " . " 的数目 / 记录你当前所获得的小数组的数目&#x…...

Java转Go日记(四十一):Gorm删除

1.1.1. 删除/软删除 警告删除记录时&#xff0c;需要确保其主要字段具有值&#xff0c;GORM将使用主键删除记录&#xff0c;如果主要字段为空&#xff0c;GORM将删除模型的所有记录 // 删除存在的记录db.Delete(&email)DELETE from emails where id10;// 为Delete语句添加…...

Java基于SpringBoot的公交智能化系统,附源码+文档说明

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

电子电器架构 --- 汽车高性能计算

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

Journal of Real-Time Image Processing 投稿过程

投稿要求双栏12页以内(包括参考文献)&#xff0c;这个排版要求感觉不是很严格&#xff0c;我当时就是用普通的双栏的格式去拍的版&#xff0c;然后就提交了&#xff0c;也没单独去下载模版。 投稿过程 12.12 Submission received 12.12 Submission is under technical check 1…...

利用basee64特性 -- BYUCTF 2025 JWTF

题目信息: Unfortunately one of our JWTs was compromised by attackers, so we created a JWT Revocation List to ensure they can’t use it anymore. 代码量很少 # 导入必要的模块 # 从 flask 模块导入 Flask, request, redirect, make_response, jsonify 类和函数 from f…...

湖北理元理律师事务所:科学债务规划如何平衡还款与生活

在债务压力普遍加剧的背景下&#xff0c;如何通过专业规划实现“还款不停生活”&#xff0c;成为许多债务人关注的核心问题。湖北理元理律师事务所基于多年实务经验&#xff0c;总结出一套兼顾法律合规性与人性化需求的债务管理方案&#xff0c;其核心逻辑在于通过法律工具优化…...

1.1HarmonyOS NEXT技术架构深度解析:微内核架构与系统分层

HarmonyOS NEXT技术架构深度解析&#xff1a;微内核架构与系统分层 摘要 作为面向万物互联时代的全场景操作系统&#xff0c;HarmonyOS NEXT通过革命性的星核架构&#xff08;Star Kernel&#xff09;重构了系统底层架构。本文将深入解析HarmonyOS NEXT的微内核设计原理、系统…...

考研系列-408真题计算机组成原理篇(2015-2019)

写在前面 此文章是本人在备考过程中408真题计算机组成原理部分(2015年-2019年)的易错题及相应的知识点整理,后期复习也常常用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~ # 2015年 1.IO端口 接口电路中可以被CPU直接访问的寄存器 IO控制方式-中断…...

HarmonyOS Next 关键资产的解释

关键资产的安全存储与管理&#xff1a;HarmonyOS Asset Store Kit 深度解析 一、关键资产的定义与重要性 关键资产&#xff08;Critical Asset&#xff09;是指应用运行过程中涉及的短敏感数据&#xff0c;包括但不限于用户密码、身份令牌&#xff08;Token&#xff09;、银行…...

Awesome ChatGPT Prompts:释放AI对话潜力的开源利器

项目概览 Awesome ChatGPT Prompts 是由土耳其开发者 Fatih Kadir Akın 发起的开源项目,托管于 GitHub,旨在通过精心设计的提示词模板(Prompts)优化用户与 ChatGPT 的交互体验。项目以 Markdown 和 CSV 格式管理模板,无需复杂编程语言,但需文本处理能力,目前已在 GitH…...

第6章 C控制语句:循环

目录 6.1 再探while 循环6.2 while语句6.3 比较大小&#xff1a;使用关系运算符和表达式6.4 不确定的循环与计数循环6.5 for循环6.6 更多赋值运算符&#xff1a;、-、*、/和%6.7 逗号运算符6.8 退出条件循环&#xff1a;do while6.9 选择哪种循环6.10 嵌套循环6.11 数组6.12 使…...

海盗王客户端更换横版任务面板的实现

海盗王的任务面板&#xff0c;采用的是竖长设计&#xff0c;上半部分显示任务列表&#xff0c;下半部分显示任务详情。 这样的设计会带来一个问题&#xff1a;就是任务多的时候&#xff0c;不能完整显示&#xff0c;只能显示前面几个&#xff0c;后面的会隐藏到滚动条里面&…...

【git】在Windows上搭建git服务器

1、简述 常用的搭建git服务器的工具有&#xff1a;Gogs、Gitblit、Gitea、GitLab 它们的区别如下&#xff1a; 功能GogsGitblitGiteaGitLab界面语言中文、英文等多语言英文为主中文、英文等多语言英文为主权限管理基础分支权限详细分支权限基础 详细分支权限非常完善代码审查…...

leetcode hot100刷题日记——6.和为 K 的子数组

解答&#xff1a;前缀和思想&#xff0c;见灵茶山艾府大大题解。 &#xff08;1&#xff09;前缀和思想&#xff1a; 前缀和数组prefix_sum的定义是prefix_sum[i] nums[0] nums[1] … nums[i]。如果存在两个前缀和prefix_sum[j]和prefix_sum[i]满足prefix_sum[i] - prefi…...

人工智能的“歧视”:“她数据”在算法运行中隐形

纵观人类的发展史&#xff0c;每一次科技进步都将对性别平等产生深刻影响。尤其是当下&#xff0c;人们对于借助人工智能技术快速发展来弥合性别不平等寄予厚望。 但很多人没想过&#xff0c;人工智能技术本身是客观中立、不存在“算法歧视”“性别偏见的吗&#xff1f; 弗吉…...

Java数组列表 - ArrayList

在Java中&#xff0c;ArrayList是一种非常实用的数据结构&#xff0c;它允许开发者动态地管理数组大小。通过ArrayList&#xff0c;可以轻松地添加、删除和修改元素&#xff0c;以及获取元素和列表的大小。例如&#xff0c;创建一个ArrayList来存储字符串&#xff0c;然后通过a…...

跨境外贸电商供应链一体化ERP管理系统

项目介绍: 跨境外贸电商供应链一体化ERP管理系统 高清视频演示: 跨境外贸电商供应链一体化ERP管理系统_哔哩哔哩_bilibili 系统说明: 外贸电商产品ERP系统包含多个角色&#xff08;客户、客服、工厂、供应商&#xff09;和多个功能模块&#xff0c;以下是系统功能的详细说明…...

数据库表连接结构详解

数据库表连接结构详解 介绍 本文基于提供的SQL表结构&#xff0c;解释了表之间的连接关系。这些表主要涉及AI系统配置&#xff0c;如客户端、顾问和智能体等。通过外键&#xff08;如client_id、agent_id&#xff09;&#xff0c;这些表形成关联网络。 表连接概述 以下是主…...

Vue3.0教程005:watch监视ref定义的【基本类型】数据和【对象类型】数据

文章目录 4、watch监视4.1 前言4.2 情况一4.3 情况二 4、watch监视 4.1 前言 作用&#xff1a;监视数据的变化&#xff08;和vue2中的watch作用一致&#xff09;特点&#xff1a;Vue3中的watch只能监视以下四种数据&#xff1a; ref定义的数据。reactive定义的数据。函数返回…...

【Java的批量操作】

系列文章目录 Java知识点 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、常见批量操作方法&#x1f449;1-1、JDBC 批量操作&#xff08;数据库&#xff09;&#x1f449;1-2、MyBatis 批量操作&#x1f449;1-3、Java 8 Stream 批量处理集合&#x1f449;1-4、多线…...

流复备机断档处理

文章目录 环境症状问题原因解决方案 环境 系统平台&#xff1a;UOS&#xff08;海光&#xff09;,UOS &#xff08;飞腾&#xff09;,UOS&#xff08;鲲鹏&#xff09;,UOS&#xff08;龙芯&#xff09;,UOS &#xff08;申威&#xff09;,银河麒麟svs&#xff08;X86_64&…...

PostgreSQL架构

目录 一、PostgreSQL核心特性与优势 1.PostgreSQL简介 2.PostgreSQL的核心特点 &#xff08;1&#xff09;开源与自由 &#xff08;2&#xff09;高度符合SQL标准 &#xff08;3&#xff09;丰富的数据类型 &#xff08;4&#xff09;事务与并发控制 &#xff08;5&…...

苍穹外卖系统结构与功能报告

一、系统简介 苍穹外卖系统是为餐饮企业定制的数字化解决方案&#xff0c;包含管理端后台和用户端小程序两部分。管理端面向餐饮企业员工&#xff0c;支持菜品、套餐、订单等核心业务的数字化管理&#xff1b;用户端面向消费者&#xff0c;提供在线点餐、支付、订单跟踪等功能…...

CAU数据库class3 关系型数据库基础

关系数据库模型的3个要素 数据结构 二维表 数据操作 特点 操作的对象为元组&#xff0c;操作的结果为元组高度非过程化&#xff0c;用户不关系是怎么实现的 完整性约束 数据完整性是指保证数据真确的特性 实体完整性参照完整性用户定义完整性 关系的形式定义 例子&…...

【Qt】在OrinNX上,使用命令安装qtmultimedia5-dev时报错

1、问题描述 在OrinNX+Ubuntu20.04上,使用命令安装qtmultimedia5-dev时报错 sudo apt install qtmultimedia5-devThe following packages have unmet dependencies: qtmultimedia5-dev : Depends: libpulse-dev but it is not going to be installed E: Unable to correct p…...

阿里云CDN刷新预热--刷新URL

文章目录 一、全英文URL刷新预热二、掺杂中文的URL刷新预热2.1 对带中文URL进行编码2.2 预热刷新 三、CDN刷新-核心作用与价值3.1 核心作用3.2 核心价值3.3 典型使用场景 *最后我想说&#xff1a;请你不要相信我说的每一句话&#xff0c;这只是我的个人经验* 一、全英文URL刷新…...

anaconda、miniconda、conda的关系及miniconda安装

anaconda、miniconda、conda的关系及miniconda安装 文章目录 前言正文定义关系Linux安装miniconda新建一个python3.8环境 参考 前言 本文用于记录关于Anaconda、conda和Miniconda的定义及其关系的总结123&#xff1a; 正文 定义 conda 一个跨平台的开源包管理和环境管理工具…...

SpringBoot实现本地对象存储【minio、阿里云、七牛云】

引入依赖 <!-- minio --> <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.12</version> </dependency><!-- 阿里云oss --> <dependency><groupId>com.aliyun.…...