#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include "libmodbus/modbus.h" #include "slave_define.h" #include "openjson.h" class CustomDisplayPanel; 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; QTimer *m_pTimer; 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; bool m_bInitializeModbus; protected: //异步处理数据 void startAsyncProcess(const QVector& array,int slave_id,int start_addr,int quantity,DeviceData* pData); private slots: void ReadSerialPortData(); void SettingSerialPort(); void onTimeout(); private: CustomDisplayPanel* m_pTemperaturePanel; //温湿度显示 CustomDisplayPanel* m_pBatteryPanel; //电池显示 CustomDisplayPanel* m_pPowerPanel; //电源显示 CustomDisplayPanel* m_pACPanel; //空调显示 CustomDisplayPanel* m_pHomePanel; //主柜子信息 CustomDisplayPanel* m_pAlarmPanel; //告警 CustomDisplayPanel* m_pInverterPanel; //逆变器 CustomDisplayPanel* m_pPVPanel; //太阳能 private: bool CreateJson(DeviceData* pData,OpenJson& json); 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