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

Qt5.9.9 关于界面拖动导致QModbusRTU(QModbusTCP没有测试过)离线的问题

问题锁定

参考网友的思路:

Qt5.9 Modbus request timeout 0x5异常解决

  1. 网友认为是Qt的bug, 我也认同;
  2. 网友认为可以更新模块, 我也认同, 我也编译了Qt5.15.0的code并成功安装到Qt5.9.9中进行使用,界面拖动QModbusRTU离线问题解决!
    Note: 为什么使用Qt5.15.0, 因为其他更高的版本改动较大,已经更Qt5.9.9差异变大了,移植到Qt5.9.9恐怕会有问题

编译Qt5.15.0 QSerialbus模块步骤

1. 下载QtSerialBus 5.15.0 模块, 只下载模块就好

https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qt/5.15/5.15.0/submodules/
在这里插入图片描述

2. 解压,使用Qt Creator 打开里面的qtserialbus.pro, 点击编译, 编译之后报错如3

3. 错误罗列如下

  1. Qt::hex 全局替换成 hex
  2. Qt::endl 全局替换成endl
  3. Qt:: hex 全局替换成hex
  4. qmodbustcpclient_p.h
setupTcpSocket()&QAbstractSocket::errorOccurred 改为-static_cast<void(QAbstractSocket::*)(QAbstractSocket::SocketError)>(&QAbstractSocket::error)
  1. qmodbusserver.cpp
    增加头文件
#include <bitset>

QModbusServerPrivate::readBits 函数内

// Using byteCount * 8 so the remaining bits in the last byte are zeroQBitArray bytes(byteCount * 8);address = 0; // The data range now starts with zero.for ( ; address < count; ++address)bytes.setBit(address, unit.value(address));QByteArray payload = QByteArray::fromRawData(bytes.bits(), byteCount);payload.prepend(char(byteCount));return QModbusResponse(request.functionCode(), payload);

替换成

address = 0; // The data range now starts with zero.QVector<quint8> bytes;for (int i = 0; i < byteCount; ++i) {std::bitset<8> byte;// According to the spec: If the returned quantity is not a multiple of eight,// the remaining bits in the final data byte will be padded with zeros.for (int currentBit = 0; currentBit < 8; ++currentBit)byte[currentBit] = unit.value(address++); // The padding happens inside value().bytes.append(static_cast<quint8> (byte.to_ulong()));}return QModbusResponse(request.functionCode(), byteCount, bytes);
4. 最终编译, 编译通过, 在项目中添加install指令使模块安装到Qt5.9.9中

在这里插入图片描述
执行即可, 或创建新的编译, 最后再检查是否更新到Qt5.9.9的模块中了!

如下代表着有新的Qt5.15.0的QSerialbus库安装到Qt5.9.9中了
在这里插入图片描述

Note: 注意编译流程和安装流程是否有错, 要排错, 否则不一定完整安装!

http://www.lryc.cn/news/393117.html

相关文章:

  • API的定义理解
  • 启航IT之旅:高考假期预习指南
  • HarmonyOS开发:循环渲染ForEach
  • 构建工程化:多种不同的工程体系如何编写MakeFile
  • 聚焦从业人员疏散逃生避险意识能力提升,推动生产经营单位每年至少组织开展(疏散逃生演练,让全体从业人员熟知逃生通道、安全出口及应急处置要求,形成常态化机制。
  • 【手机取证】如何使用360加固助手给apk加固
  • Vue的介绍
  • MySql数据库常用指令合集
  • ArcGIS Pro SDK (七)编辑 13 注解
  • 模拟面试001-Java开发工程师+简历+问题+回答
  • 微信小程序 ——入门介绍及简单的小程序编写
  • ubuntu20.04安装lio-sam
  • Kafka系列之Kafka知识超强总结
  • 第32讲:K8S集群与Cephfs文件系统集成
  • 服务器数据恢复—DS5300存储raid5阵列数据恢复案例
  • 使用Ubuntu 22.04安装Frappe-Bench【二】
  • MySQL增删改查
  • Java跳出循环的四种方式
  • 直播预告|飞思实验室暑期公益培训7月10日正式开启,报名从速!
  • 3-2 梯度与反向传播
  • 【qt】如何获取本机的IP地址?
  • 芯片的PPA-笔记
  • 2024阿里巴巴全球数学竞赛决赛中的数列题解析(分析与方程方向第4题)
  • 学java的第3天 后端商城小程序工作
  • DevOps实战:使用GitLab+Jenkins+Kubernetes(k8s)建立CI_CD解决方案
  • Apache Seata配置管理原理解析
  • 深入理解C# log4Net日志框架:功能、使用方法与性能优势
  • BDD 100K dataset 的标签数据结构(json文件)
  • AcWing 1550:完全二叉搜索树
  • 使用kali Linux启动盘轻松破解Windows电脑密码