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