news 2026/7/8 2:15:11

Qt5.14多线程C++工业上位机自动称重编程工程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt5.14多线程C++工业上位机自动称重编程工程

本人开发多线程qt5_c++工业上位机自动称重! Qt5之工业应用! 一套完整工程,工业电子称使用,无线扫码枪的使用,串口的使用,使用qt5.14,用qtcreator加载工程后,编译,运行,可调试可扩展,目的是学习qt开发方式。 不懂的随时和卖主沟通。 工业编程, 工业编程! 参数如下: ----------------------------- 1)编程语言:\\t\\tC++ (11或以上); ----------------------------- 2)编程环境:\\t\\tQT5.14; ----------------------------- 3)编程工具1:\\t\\tqss ; ----------------------------- 4)编译器:\\t\\tmsvc ;(没有就完整安装2019,一定要选msvc,或 \\t\\t\\t安装 WIN10 SDK) ----------------------------- 5)数据库:\\t\\taccess, mysql, sqlserver ; ----------------------------- 6)如何加载pro文件\\t文件->打开文件或项目; \\t\\t\\t在Build&Run 下选择 Qt 5.14.2 msvc2017(或2015) \\t\\t\\t左侧边栏点击项目,右边概要下的Shadow build 不用勾选; ----------------------------- 7) SDK\\t\\t\\t需要安装win10SDK(编译或调试要用) ----------------------------- 8) 构建\\t\\t\\t记得先qtmake, 再点击重新构建 -----------------------------

工业上位机开发这活儿,总得有个趁手的工具箱。最近折腾的这套Qt5上位机自动称重系统,算是把工业场景里常见的坑都踩了一遍。项目里集成了电子秤数据采集、扫码枪通讯、多线程处理这些硬核功能,下面咱们边撸代码边唠嗑。

先看硬件交互这块硬骨头。电子秤通过串口传数据,得用QSerialPort配个心跳包:

// 串口初始化 QSerialPort* scalePort = new QSerialPort(this); scalePort->setPortName("COM3"); scalePort->setBaudRate(QSerialPort::Baud19200); if(!scalePort->open(QIODevice::ReadWrite)){ qCritical() << "电子秤连接失败,检查设备是否被占用"; } // 定时发送查询指令 QTimer* queryTimer = new QTimer(this); connect(queryTimer, &QTimer::timeout, [=](){ scalePort->write("W\r\n"); // 电子秤协议指令 }); queryTimer->start(500); // 每秒采集两次

这里有个骚操作——用QTimer实现准实时采集,比纯事件驱动更可靠。注意数据解析时要处理粘包,上次就遇到个电子秤返回数据带换行符的坑。

扫码枪部分更刺激,得同时支持USB虚拟串口和蓝牙两种模式。这里用工厂模式封装:

class ScannerFactory { public: static AbstractScanner* createScanner(ScannerType type) { switch(type) { case USB_SCANNER: return new UsbHidScanner(); case BLUETOOTH_SCANNER: return new BluetoothScanner(QLowEnergyController::randomAddress()); default: throw std::invalid_argument("不支持的扫码枪类型"); } } };

蓝牙低能耗(BLE)通讯这块,得注意Qt的QLowEnergyController在Windows下的玄学问题,有时候得手动重置蓝牙服务才能重连。

界面线程和硬件操作必须分开,上QThreadPool才稳当:

// 称重任务继承QRunnable class WeighingTask : public QRunnable { void run() override { QByteArray rawData = scalePort->readAll(); double weight = parseData(rawData); // 协议解析函数 QMetaObject::invokeMethod(qApp, [=](){ ui->weightLabel->setText(QString::number(weight, 'f', 1)+" kg"); }, Qt::QueuedConnection); } }; // 投递任务到线程池 QThreadPool::globalInstance()->start(new WeighingTask());

这里有个关键点:UI更新必须用invokeMethod回到主线程,否则直接操作控件分分钟崩溃给你看。

数据库操作这块,用QMutex锁住写操作防止多线程踩踏:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); db.setDatabaseName("DRIVER={SQL Server};SERVER=192.168.1.100;DATABASE=WeighDB;"); QMutex dbMutex; void saveRecord(const WeighRecord &record) { QMutexLocker locker(&dbMutex); QSqlQuery query; query.prepare("INSERT INTO records (barcode, weight, timestamp) VALUES (?, ?, ?)"); query.addBindValue(record.barcode); query.addBindValue(record.weight); query.addBindValue(QDateTime::currentDateTime()); if(!query.exec()){ qWarning() << "入库失败:" << query.lastError().text(); } }

注意Access数据库需要安装ODBC驱动,上次部署时忘了这个,现场调试差点被甲方打。

最后上点界面美化的私货,用qss搞个工业风:

/* style.qss */ QMainWindow { background: #2b2b2b; } QPushButton { background: #4CAF50; border-radius: 4px; padding: 8px; min-width: 80px; } QLabel#weightLabel { font: bold 28px 'Segoe UI'; color: #FF5722; qproperty-alignment: AlignCenter; }

编译时切记关掉Shadow build,这玩意在混合调试时容易出幺蛾子。遇到链接错误先看是不是漏装了Windows SDK,再查pro文件里有没有忘加串口模块:

QT += core gui sql serialport CONFIG += c++11

这套架子搭起来,后面加个Modbus/TCP或者OPC UA协议支持都不虚。工业软件嘛,核心就三字:稳、准、狠。数据采集要准,系统运行要稳,处理异常要狠——该丢包就丢包,别让整个系统卡死。有次现场遇到扫码枪频繁断连,直接写了个看门狗线程,超过3次失败就切备用设备,这才算镇住场子。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 17:01:15

高效合规的法律翻译方案|HY-MT1.5大模型全场景解析

高效合规的法律翻译方案&#xff5c;HY-MT1.5大模型全场景解析 在跨国法律事务日益频繁的背景下&#xff0c;高质量、高效率且符合行业规范的双语转换需求持续增长。传统人工翻译成本高昂、周期长&#xff0c;而通用机器翻译工具又难以应对法律语言的专业性与严谨性。腾讯开源…

作者头像 李华
网站建设 2026/7/1 6:58:07

自适应主动学习让罕见病标注成本砍半

&#x1f4dd; 博客主页&#xff1a;Jax的CSDN主页 自适应主动学习&#xff1a;罕见病AI标注成本的革命性突破目录自适应主动学习&#xff1a;罕见病AI标注成本的革命性突破 引言&#xff1a;罕见病诊断的“数据荒漠”困境 痛点深度剖析&#xff1a;为什么罕见病标注成本居高不…

作者头像 李华
网站建设 2026/7/3 5:41:06

周末项目:用AI分类器整理童年照片,成本不到3块钱

周末项目&#xff1a;用AI分类器整理童年照片&#xff0c;成本不到3块钱 1. 为什么你需要这个方案 作为一位宝妈&#xff0c;手机里存满了孩子的成长照片&#xff0c;从出生到第一次走路、第一次上学&#xff0c;这些珍贵的瞬间都值得好好保存。但问题来了&#xff1a; 照片…

作者头像 李华
网站建设 2026/7/4 7:53:36

HY-MT1.5大模型镜像优势解析|媲美商业API的开源之选

HY-MT1.5大模型镜像优势解析&#xff5c;媲美商业API的开源之选 在多语言交流日益频繁的今天&#xff0c;高质量、低延迟的机器翻译能力已成为智能应用的核心需求。腾讯混元团队推出的 HY-MT1.5 系列翻译大模型&#xff0c;凭借其卓越的跨语言理解能力和对混合语种场景的精准处…

作者头像 李华
网站建设 2026/7/2 0:06:50

AI分类器省钱攻略:按需付费比买显卡省90%,1小时1块起

AI分类器省钱攻略&#xff1a;按需付费比买显卡省90%&#xff0c;1小时1块起 1. 为什么你需要按需付费的AI分类器&#xff1f; 作为一名自由职业者&#xff0c;你可能经常需要处理各种文档分类工作&#xff1a;客户合同归档、发票整理、项目资料归类等。传统方式要么耗时耗力…

作者头像 李华