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
相关推荐
娇娇yyyyyy20 小时前
QT编程(13): Qt 事件机制eventfilter
开发语言·qt
带娃的IT创业者1 天前
工具状态失踪之谜:EventBus事件漏接与asyncio.Lock并发陷阱双线诊断
qt·websocket·并发控制·eventbus·事件驱动架构·pwa·asyncio.lock
不想看见4041 天前
C++/Qt 代码规范指南
开发语言·qt
li星野1 天前
QT模拟题:QT项目实践与架构设计(120分钟)
开发语言·qt
笑鸿的学习笔记1 天前
qt-C++语法笔记之Qt中的delete ui、ui的本质与Q_OBJECT
c++·笔记·qt
謓泽1 天前
【MODBUS】串口 RTU / Modbus TCP / 透明就绪
网络·串口·modbus
不想看见4041 天前
Qt 框架中的信号与槽机制【详解】
服务器·数据库·qt
行者..................1 天前
第2课:恢复出厂、掌握 Linux 基础命令并完成首次 GCC 编译
linux·qt·driver
Lhan.zzZ1 天前
深入浅出 Qt 信号槽连接方式:从 AutoConnection 到 BlockingQueuedConnectionQt
开发语言·c++·qt
Ronin3051 天前
【Qt窗口】Qt窗口
开发语言·qt·qt窗口