QT modbus 通信教程,把modbus封装到线程单例中,在线程内完成数据收发,解析。把重要数据以信号方式通知到qml层展示,解决UI卡顿

qt 实现modbus, 整个操作全在线程内,运行效果如下

运行图片如下:

步骤如下:

一、先使用虚拟串口工具,配置一对虚拟串口

二、使用modbus Slave 虚拟出来一个modbus从机。并设置调试的寄存器个数,这里需要调试的寄存器个数为8个,连接串口2,配置波特率为9600,如下图

三、代码内配置modbus 主站 参数如下图, 同时设置 发送和读取modbus寄存器的定时器, 定时写入和读取数据

创建modbus线程代码如下:

线程管理代码头文件

cpp 复制代码
#ifndef SERIALPORTSERVICESINGLETON_H
#define SERIALPORTSERVICESINGLETON_H

#include <QObject>

#include <QMutex>
#include <QMutexLocker>
#include <QDebug>

#include "serialportservice.h"

class Q_DECL_EXPORT SerialPortServiceSingleton : public QObject
{
    Q_OBJECT
private:
    explicit SerialPortServiceSingleton(QObject *parent = nullptr);

public:
    Q_INVOKABLE void initSerialPortService();
    Q_INVOKABLE void destorySerialPortService();

public:
    static SerialPortServiceSingleton* getInstance();
    static void delInstance();
    ~SerialPortServiceSingleton();

signals:
    void notifySerialThreadStatus(int sta);

private slots:
    void threadFinished();
    void serialDestory();

private:
    static SerialPortServiceSingleton* mInstance;
    SerialPortService *serialPortService;
    QThread *serialThread;
};

#endif // SERIALPORTSERVICESINGLETON_H
相关推荐
离离茶3 小时前
【笔记1-11】Qt 关闭QToolbar的拓展菜单
开发语言·笔记·qt
一只小bit5 小时前
Qt 绘图核心教程:从基础绘制到图像操作全解析
前端·c++·qt·gui
四维碎片6 小时前
【Qt】代理(Delegate)的使用
开发语言·qt
从此不归路6 小时前
Qt5 进阶【9】模型-视图框架实战:从 TableView 到自定义模型的一整套落地方案
开发语言·c++·qt
wjhx7 小时前
在Qt Design Studio中进行页面切换
前端·javascript·qt
HL_风神8 小时前
QT事件循环机制源码学习
开发语言·qt·学习
牵牛老人8 小时前
【Qt上位机与下位机交互数据组装与解析:全类型数据转换实战指南】
开发语言·qt·交互
SZ放sai哑滋8 小时前
Qt Creator远程部署(适合开发阶段)
qt
轩情吖9 小时前
Qt多元素控件之QTreeWidget
开发语言·c++·qt·控件·qtreewidget·桌面级开发
轩情吖9 小时前
Qt多元素控件之QTableWidget
开发语言·c++·qt·表格·控件·qtablewidget