#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include "libmodbus/modbus.h" #include "slave_define.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE typedef enum _tagModbusMode : int { modeRtu = 0, modeTcp = 1, } ModbusMode; //这是解码类,针对协议进行解码 class DecodeWorker : public QObject { Q_OBJECT public: DecodeWorker(QObject* parent = nullptr) : QObject(parent) {} void setParameters(const QVector& array, int slave_id, int start_addr, int quantity, DeviceData* pDevice) { this->array = array; this->slave_id = slave_id; this->start_addr = start_addr; this->quantity = quantity; this->pDevice = pDevice; } private: QVector array; int slave_id; int start_addr; int quantity; DeviceData* pDevice; signals: // 处理进度信号 void progress(int index); // 完成处理信号 void finished(); public slots: // 处理数组的槽函数 // 根据从机id、开始地址、寄存器数量三个变量进行辨别和解码处理 void processArray(const QVector& array,int slave_id,int start_addr,int quantity,DeviceData* pData); }; //处理主界面 class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); protected: void getConfiguration(QString iniFilePath); bool InitializeUI(); bool InitializeModbus(); bool InitializeRtu(); bool InitializeTcp(); bool readRegister(int addr,int nb,uint16_t* dest); private: Ui::MainWindow *ui; protected: modbus_t *m_pModbus; SlaveData m_SlaveData; protected: QString m_version; int m_modbus_type; QString m_modbus_ip; int m_modbus_port; QString m_modbus_com; int m_modbus_baund; int m_modbus_data; int m_modbus_parity; int m_modbus_stop; int m_modbus_slave_id; QSettings* m_pSettings; protected: QVector m_panel_labels; protected: //异步处理数据 void startAsyncProcess(const QVector& array,int slave_id,int start_addr,int quantity,DeviceData* pData); private slots: void ReadSerialPortData(); void SettingSerialPort(); signals: // 处理进度信号 void progress(int index); // 完成处理信号 void finished(); signals: void startProcessing(const QVector& array, int slave_id, int start_addr, int quantity, DeviceData* pData); }; #endif // MAINWINDOW_H