#ifndef PDU_CTRL_H #define PDU_CTRL_H #include "common.h" #include "global.h" #include "widget.h" #include "qt_pdu_msgq.h" #define hightSmartPDU //#define RS485Type //#define RS485IpType //#define PDU_sys #define pduRun enum WidgetType { widgetType_Main=0, //轮询页面 widgetType_Setting=1, //设置页面 }; enum WidgetMain_T_AC { WidgetMain_CH=0, //三项总 WidgetMain_PHA=1, //A相 WidgetMain_PHB=2, //B相 WidgetMain_PHC=3, //C相 }; enum SettingMode { settingMode_Modbus=0, settingMode_LimitV=1, settingMode_LimitA=2, settingMode_IP=3, }; enum BtnDownType { BtnDown_C=0,//点击 BtnDown_D=1, //双击 BtnDown_L=2, //长按 BtnDown_Null=-1//清空 }; enum GPIOLED { GPIO_LED0=106, GPIO_LED1=105, #ifdef RS485Type GPIO_KEY1=160, GPIO_KEY2=161, GPIO_KEY3=162, GPIO_KEY4=103, #endif #ifdef hightSmartPDU GPIO_KEY1=102, GPIO_KEY2=101, GPIO_KEY3=104, GPIO_KEY4=103, GPIO_X=113,//方向传感器 GPIO_Y=115//方向传感器 #endif }; /* QString g_product_type_str[] = { "SmartPDU(DC)", "SmartPDU(AC)", "SmartPDU(Tree_AC_Tree)", "SmartPDU(Tree_AC_One)", };*/ struct CHOverMG { int nCHID; int nAddrID; int nAddrCHID; int nCHType; QString strName; GlobalOverManager OverData; }; class qt_pdu_msgq; class pdu_Ctrl : public QObject { Q_OBJECT public: //单例初始化 static pdu_Ctrl* instance() { QMutexLocker locker(&mutex); if (!m_instance) { static QMutex mutex; if (!m_instance) { m_instance = new pdu_Ctrl(); } } return m_instance; } static void distory() { QMutexLocker locker(&mutex); if (m_instance) { delete m_instance; m_instance = nullptr; } } void InitData(Widget* pWidget,QGraphicsProxyWidget* pProxy ,QGraphicsView* pView,int nWidth, int nHeight); void ReadModbusInit(); void SaveModbusInit(); QSqlDatabase& getDB(){return m_db;} // int getPowerBoard(GlobalPowerCtrlBoard*& pPowerBoard){ pPowerBoard= m_PowerBoard; return nPowerBoardSize; } void setPowerBoard(size_t nMaxData,GlobalPowerCtrlBoard* pPowerBoard) { m_PowerBoard=pPowerBoard; nPowerBoardSize=nMaxData; } void clearPowerBoard() { m_PowerBoard=nullptr; nPowerBoardSize=0; } //获取超限数据 QMap>& getOverMG(){return m_chOverMG;} //更新或添加超限数据 void AddOverMG(CHOverMG& pData); //获取报警信息 PowerWarningInfo* getWarningData(int nAddrID,int nAddrCHID); //======设置所通道开关======= void setCHCtrl(int nCh,int nStatus);//-1则是全部控制 private: //处理多个点 void ButtonDown(int nButtonID, BtnDownType nDownType); //===================MAIN界面下按钮控制============================ void Main_UPBtnSet(BtnDownType nbtnType); void Main_FunBtnSet(BtnDownType nbtnType); void Main_DownBtnSet(BtnDownType nbtnType); //===================SETTING界面下按钮控制========================= void Setting_UPBtnSet(BtnDownType nbtnType); void Setting_FunBtnSet(BtnDownType nbtnType); void Setting_DownBtnSet(BtnDownType nbtnType); //======切换视图========= void ChangeView(WidgetType widgetType,int nIndex); //======恢复出厂设置========= void ResetAll(); void RestartSys(); signals: public slots: void slot_setAngel(int nAngle); void slot_ClickBtn(int nButton); void slot_DClickBtn(int nButton); void slot_LClickBtn(int nButton); void slot_BtnClear(int nButton); private: //单例数据 explicit pdu_Ctrl(QObject *parent = nullptr); ~pdu_Ctrl(); static pdu_Ctrl* m_instance; static QMutex mutex; WidgetType nViewShowType;// int nSettingType;//设置页面 //记录三个按钮的状态 int nButtonStatus[3];//上中下 //当前显示页面ID int nChidIndex; int nChidPHIndex; int m_nAngle; //其他界面指针 QGraphicsProxyWidget* m_pAngleCtrl; QGraphicsView* m_pView; Widget* m_pWidget; int m_nWidth; int m_nHeight; //数据库类 QSqlDatabase m_db; //共享数据类 size_t nPowerBoardSize; GlobalPowerCtrlBoard* m_PowerBoard; //超限设置 QMap> m_chOverMG; //modbus设置 public: int m_nModbusSelect; int m_nModbusAddress;//从机地址 int m_nModbusMSType;//主从 int m_nSaveData; QString strSqliteAddress; int isT_ACType; int lastACIndex; qt_pdu_msgq* pMsgq; }; #endif // PDU_CTRL_H