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
相关推荐
赵民勇12 小时前
Qt QML Component.onCompleted 和 Component.onDestruction 详解
qt
我不是8神12 小时前
Qt 知识点全面总结
开发语言·qt
Lhan.zzZ16 小时前
基于Qt的UDP广播发现与TCP连接系统的设计与实现
qt·tcp/ip·udp
leiming617 小时前
c++ QT 开发第二天,用ui按钮点亮实体led
开发语言·qt·ui
hqwest17 小时前
码上通QT实战04--主窗体布局
开发语言·css·qt·布局·widget·layout·label
leiming618 小时前
c++ qt开发第一天 hello world
开发语言·c++·qt
赵民勇19 小时前
QML Base Type 详解
qt
hqwest19 小时前
码上通QT实战07--主窗体消息栏设计
开发语言·qt·qt事件·主窗体·stackedwidget
hqwest19 小时前
码上通QT实战06--导航按钮事件
开发语言·qt·mousepressevent·qfont·qpainter·qlineargradient·setbrush
CC.GG20 小时前
【Qt】常用控件----容器类控件(QGroupBox、QTabWidget )以及布局管理器
开发语言·qt