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
相关推荐
东哥很忙XH2 小时前
python使用PyQt5开发桌面端串口通信
开发语言·驱动开发·python·qt
汪宁宇4 小时前
如何在QT5+MinGW环境中编译使用QGIS开发地图应用
c++·qt·qgis·mingw·地图库
刺客xs5 小时前
Qt-----QSS样式表
开发语言·javascript·qt
qq_401700415 小时前
QProgressBar+QSS 进度条
qt
小灰灰搞电子6 小时前
Qt PDF模块详解
数据库·qt·pdf
ibuki_fuko7 小时前
QT/C++ 程序启动时检查程序是否已经启动
开发语言·c++·qt
深蓝海拓7 小时前
PySide6从0开始学习的笔记(五) 信号与槽
笔记·qt·学习·pyqt
淼淼7637 小时前
Qt工具栏+图页,图元支持粘贴复制,撤销,剪切,移动,删除
开发语言·c++·windows·qt
Kelvin_Ngan7 小时前
Qt包含QtCharts/QValueAxis时编译报错
开发语言·qt