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
相关推荐
范特西.i5 天前
QT聊天项目(8)
开发语言·qt
枫叶丹45 天前
【Qt开发】Qt界面优化(七)-> Qt样式表(QSS) 样式属性
c语言·开发语言·c++·qt
十五年专注C++开发5 天前
Qt deleteLater作用及源码分析
开发语言·c++·qt·qobject
kangzerun5 天前
SQLiteManager:一个优雅的Qt SQLite数据库操作类
数据库·qt·sqlite
金刚狼885 天前
qt和qt creator的下载安装
开发语言·qt
追烽少年x5 天前
Qt中使用Zint库显示二维码
qt
谁刺我心5 天前
qt源码、qt在线安装器镜像下载
开发语言·qt
金刚狼885 天前
在qt creator中创建helloworld程序并构建
开发语言·qt
扶尔魔ocy6 天前
【转载】QT使用linuxdeployqt打包
开发语言·qt
YxVoyager6 天前
在VS2017中使用Qt的foreach宏,IntelliSense无法正确识别函数定义
c++·qt