pdu_ctrl.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. #ifndef PDU_CTRL_H
  2. #define PDU_CTRL_H
  3. #include "global.h"
  4. #include "widget.h"
  5. #define hightSmartPDU
  6. //#define RS485Type
  7. //#define RS485IpType
  8. //#define PDU_sys
  9. #define pduRun
  10. #include "common.h"
  11. enum WidgetType
  12. {
  13. widgetType_Main=0, //轮询页面
  14. widgetType_Setting=1, //设置页面
  15. };
  16. enum WidgetMain_T_AC
  17. {
  18. WidgetMain_CH=0, //三项总
  19. WidgetMain_PHA=1, //A相
  20. WidgetMain_PHB=2, //B相
  21. WidgetMain_PHC=3, //C相
  22. };
  23. enum SettingMode
  24. {
  25. settingMode_Modbus=0,
  26. settingMode_LimitV=1,
  27. settingMode_LimitA=2,
  28. settingMode_IP=3,
  29. };
  30. enum BtnDownType
  31. {
  32. BtnDown_C=0,//点击
  33. BtnDown_D=1, //双击
  34. BtnDown_L=2, //长按
  35. BtnDown_Null=-1//清空
  36. };
  37. enum GPIOLED
  38. {
  39. GPIO_LED0=106,
  40. GPIO_LED1=105,
  41. #ifdef RS485Type
  42. GPIO_KEY1=160,
  43. GPIO_KEY2=161,
  44. GPIO_KEY3=162,
  45. GPIO_KEY4=103,
  46. #endif
  47. #ifdef hightSmartPDU
  48. GPIO_KEY1=102,
  49. GPIO_KEY2=101,
  50. GPIO_KEY3=104,
  51. GPIO_KEY4=103,
  52. GPIO_X=113,//方向传感器
  53. GPIO_Y=115//方向传感器
  54. #endif
  55. };
  56. /*
  57. QString g_product_type_str[] = {
  58. "SmartPDU(DC)",
  59. "SmartPDU(AC)",
  60. "SmartPDU(Tree_AC_Tree)",
  61. "SmartPDU(Tree_AC_One)",
  62. };*/
  63. struct CHOverMG
  64. {
  65. int nCHID;
  66. int nAddrID;
  67. int nAddrCHID;
  68. int nCHType;
  69. QString strName;
  70. GlobalOverManager OverData;
  71. };
  72. class pdu_Ctrl : public QObject
  73. {
  74. Q_OBJECT
  75. public:
  76. //单例初始化
  77. static pdu_Ctrl* instance() {
  78. QMutexLocker locker(&mutex);
  79. if (!m_instance) {
  80. static QMutex mutex;
  81. if (!m_instance) {
  82. m_instance = new pdu_Ctrl();
  83. }
  84. }
  85. return m_instance;
  86. }
  87. static void distory()
  88. {
  89. QMutexLocker locker(&mutex);
  90. if (m_instance) {
  91. delete m_instance;
  92. m_instance = nullptr;
  93. }
  94. }
  95. void InitData(Widget* pWidget,QGraphicsProxyWidget* pProxy ,QGraphicsView* pView,int nWidth, int nHeight);
  96. void ReadModbusInit();
  97. void SaveModbusInit();
  98. QSqlDatabase& getDB(){return m_db;}
  99. //
  100. int getPowerBoard(GlobalPowerCtrlBoard*& pPowerBoard){
  101. pPowerBoard= m_PowerBoard;
  102. return nPowerBoardSize;
  103. }
  104. void setPowerBoard(size_t nMaxData,GlobalPowerCtrlBoard* pPowerBoard)
  105. {
  106. m_PowerBoard=pPowerBoard;
  107. nPowerBoardSize=nMaxData;
  108. }
  109. void clearPowerBoard()
  110. {
  111. m_PowerBoard=nullptr;
  112. nPowerBoardSize=0;
  113. }
  114. //获取超限数据
  115. QMap<int,QMap<int,CHOverMG>>& getOverMG(){return m_chOverMG;}
  116. //更新或添加超限数据
  117. void AddOverMG(CHOverMG& pData);
  118. //获取报警信息
  119. PowerWarningInfo* getWarningData(int nAddrID,int nAddrCHID);
  120. private:
  121. //处理多个点
  122. void ButtonDown(int nButtonID, BtnDownType nDownType);
  123. //===================MAIN界面下按钮控制============================
  124. void Main_UPBtnSet(BtnDownType nbtnType);
  125. void Main_FunBtnSet(BtnDownType nbtnType);
  126. void Main_DownBtnSet(BtnDownType nbtnType);
  127. //===================SETTING界面下按钮控制=========================
  128. void Setting_UPBtnSet(BtnDownType nbtnType);
  129. void Setting_FunBtnSet(BtnDownType nbtnType);
  130. void Setting_DownBtnSet(BtnDownType nbtnType);
  131. //======切换视图=========
  132. void ChangeView(WidgetType widgetType,int nIndex);
  133. //======恢复出厂设置=========
  134. void ResetAll();
  135. void RestartSys();
  136. signals:
  137. public slots:
  138. void slot_setAngel(int nAngle);
  139. void slot_ClickBtn(int nButton);
  140. void slot_DClickBtn(int nButton);
  141. void slot_LClickBtn(int nButton);
  142. void slot_BtnClear(int nButton);
  143. private:
  144. //单例数据
  145. explicit pdu_Ctrl(QObject *parent = nullptr);
  146. ~pdu_Ctrl();
  147. static pdu_Ctrl* m_instance;
  148. static QMutex mutex;
  149. WidgetType nViewShowType;//
  150. int nSettingType;//设置页面
  151. //记录三个按钮的状态
  152. int nButtonStatus[3];//上中下
  153. //当前显示页面ID
  154. int nChidIndex;
  155. int nChidPHIndex;
  156. int m_nAngle;
  157. //其他界面指针
  158. QGraphicsProxyWidget* m_pAngleCtrl;
  159. QGraphicsView* m_pView;
  160. Widget* m_pWidget;
  161. int m_nWidth;
  162. int m_nHeight;
  163. //数据库类
  164. QSqlDatabase m_db;
  165. //共享数据类
  166. size_t nPowerBoardSize;
  167. GlobalPowerCtrlBoard* m_PowerBoard;
  168. //超限设置
  169. QMap<int,QMap<int,CHOverMG>> m_chOverMG;
  170. //modbus设置
  171. public:
  172. int m_nModbusSelect;
  173. int m_nModbusAddress;//从机地址
  174. int m_nModbusMSType;//主从
  175. int m_nSaveData;
  176. QString strSqliteAddress;
  177. int isT_ACType;
  178. int lastACIndex;
  179. };
  180. #endif // PDU_CTRL_H