Преглед изворни кода

MOD:更新版本修正只有开关时才转换颜色状态功能

chenyuanjie пре 1 година
родитељ
комит
0c735309ac

+ 1 - 1
Qt/Qt_Test_Pro_5inch/Qt_Test.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.5.2, 2025-03-23T00:37:09. -->
+<!-- Written by QtCreator 4.5.2, 2025-03-27T11:27:39. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>

+ 30 - 8
Qt/Qt_Test_Pro_5inch/ch_widget.cpp

@@ -1,12 +1,14 @@
 #include "ch_widget.h"
 #include "ui_ch_widget.h"
-
+#include <QDebug>
 #define RunStatus "#ch_Widget{border: 2px solid #00FF00;background-color: #FFFFFF;border-radius: 15px;}QLabel { color: #00FF00; }"
-#define StopStatus "#ch_Widget{border: 2px solid #0000FF;background-color: #FFFFFF;border-radius: 15px;}QLabel { color: #0000FF; }"
+#define StopStatus "#ch_Widget{border: 2px solid #000000;background-color: #FFFFFF;border-radius: 15px;}QLabel { color: #000000; }"
+#define WarningStatus "#ch_Widget{border: 2px solid #0000FF;background-color: #FFFFFF;border-radius: 15px;}QLabel { color: #0000FF; }"
 ch_Widget::ch_Widget(QWidget *parent) :
     QWidget(parent),
     ui(new Ui::ch_Widget),
-    m_pCHData(nullptr)
+    m_pCHData(nullptr),
+    m_pChWarning(nullptr)
 {
     ui->setupUi(this);
 }
@@ -16,12 +18,13 @@ ch_Widget::~ch_Widget()
     delete ui;
 }
 
-void ch_Widget::setDataCHP(int nIndex, PowerInfo *pdata)
+void ch_Widget::setDataCHP(int nIndex, PowerInfo *pdata,PowerWarningInfo* pWarn)
 {
-    if(pdata)
+    if(pdata&&pWarn)
     {
         m_nIndex=nIndex;
         m_pCHData=pdata;
+        m_pChWarning=pWarn;
         UpdateData();
     }
 
@@ -36,12 +39,31 @@ void ch_Widget::UpdateData()
        ui->label_I->setText(QString::number(m_pCHData->current, 'f', 2));
        ui->label_P->setText(QString::number(m_pCHData->power,'f', 2));
        ui->label_W->setText(QString::number(m_pCHData->consumption, 'f', 2));
-       if(m_pCHData->status!=nStatus)
+       //if(m_pCHData->status!=nStatus)
        {
            nStatus=m_pCHData->status;
           if(nStatus==1)
-          {
-                this->setStyleSheet(RunStatus);
+          {                  
+              if(m_pChWarning&&(m_pChWarning->w_voltage_up||m_pChWarning->w_voltage_down||m_pChWarning->w_current||m_pChWarning->w_power||m_pChWarning->w_consumption))
+              {
+                  this->setStyleSheet(WarningStatus);
+              }else
+              {
+                  this->setStyleSheet(RunStatus);
+              }
+              /*
+              if(m_pChWarning)
+              {
+                  if(m_pChWarning->w_voltage_up)  {qDebug()<<"HaveWarning "<< m_nIndex<<" V_up";}
+                  if(m_pChWarning->w_voltage_down){qDebug()<<"HaveWarning "<< m_nIndex<<" V_down";}
+                  if(m_pChWarning->w_current)     {qDebug()<<"HaveWarning "<< m_nIndex<<" I_up";}
+                  if(m_pChWarning->w_power)       {qDebug()<<"HaveWarning "<< m_nIndex<<" P_up";}
+                  if(m_pChWarning->w_consumption) {qDebug()<<"HaveWarning "<< m_nIndex<<" SUM_up";}
+              }else
+              {
+                  qDebug()<<"No Warning Load CH"<<m_nIndex;
+              }*/
+
           }else
           {
                 this->setStyleSheet(StopStatus);

+ 2 - 1
Qt/Qt_Test_Pro_5inch/ch_widget.h

@@ -15,7 +15,7 @@ public:
     explicit ch_Widget(QWidget *parent = nullptr);
     ~ch_Widget();
 
-    void setDataCHP(int nIndex,PowerInfo* pdata);
+    void setDataCHP(int nIndex,PowerInfo* pdata,PowerWarningInfo* pWarn);
 
     void UpdateData();
 
@@ -26,6 +26,7 @@ private:
 
     int m_nIndex;
     PowerInfo* m_pCHData;
+    PowerWarningInfo* m_pChWarning;
     int nStatus=0;
 };
 

+ 57 - 14
Qt/Qt_Test_Pro_5inch/ch_widget.ui

@@ -6,25 +6,40 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>400</width>
-    <height>117</height>
+    <width>377</width>
+    <height>131</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Form</string>
   </property>
   <property name="styleSheet">
-   <string notr="true">#ch_Widget{border: 2px solid #0000FF;background-color: #FFFFFF;border-radius: 15px;}QLabel { color: #0000FF; }</string>
+   <string notr="true"/>
   </property>
-  <layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1">
-   <item>
-    <widget class="QLabel" name="label_CH">
-     <property name="text">
-      <string>TextLabel</string>
+  <layout class="QGridLayout" name="gridLayout_2">
+   <property name="leftMargin">
+    <number>5</number>
+   </property>
+   <property name="topMargin">
+    <number>5</number>
+   </property>
+   <property name="rightMargin">
+    <number>5</number>
+   </property>
+   <property name="bottomMargin">
+    <number>5</number>
+   </property>
+   <property name="spacing">
+    <number>0</number>
+   </property>
+   <item row="0" column="1" colspan="2">
+    <widget class="Line" name="line_2">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
      </property>
     </widget>
    </item>
-   <item>
+   <item row="1" column="2">
     <layout class="QGridLayout" name="gridLayout">
      <property name="horizontalSpacing">
       <number>0</number>
@@ -32,14 +47,14 @@
      <item row="0" column="0">
       <widget class="QLabel" name="label_2">
        <property name="text">
-        <string>V:</string>
+        <string>电压:</string>
        </property>
       </widget>
      </item>
      <item row="1" column="0">
       <widget class="QLabel" name="label_6">
        <property name="text">
-        <string>P:</string>
+        <string>功率:</string>
        </property>
       </widget>
      </item>
@@ -60,7 +75,7 @@
      <item row="0" column="3">
       <widget class="QLabel" name="label_4">
        <property name="text">
-        <string>I:</string>
+        <string>电流:</string>
        </property>
       </widget>
      </item>
@@ -81,7 +96,7 @@
      <item row="1" column="3">
       <widget class="QLabel" name="label_9">
        <property name="text">
-        <string>Sum:</string>
+        <string>耗电量:</string>
        </property>
       </widget>
      </item>
@@ -109,12 +124,40 @@
      <item row="1" column="2">
       <widget class="QLabel" name="label_13">
        <property name="text">
-        <string>kW</string>
+        <string>W</string>
        </property>
       </widget>
      </item>
     </layout>
    </item>
+   <item row="1" column="1">
+    <widget class="QLabel" name="label_CH">
+     <property name="text">
+      <string>CH00</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" rowspan="2">
+    <widget class="Line" name="line_4">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" colspan="3">
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="3" rowspan="2">
+    <widget class="Line" name="line_3">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
  <resources/>

+ 7 - 0
Qt/Qt_Test_Pro_5inch/common.h

@@ -5,6 +5,13 @@
 #define AC_SINGLE_S_MAX_CHN_NUM 10  	//单个控制板最大数量
 #define AC_SINGLE_S_MAX_ADDRESS_NUM 16  //控制板最大数量
 
+enum {
+    ALARM_TYPE_POWER=0,
+    ALARM_TYPE_SENSOR,
+    ALARM_TYPE_NETWORK,
+    ALARM_TYPE_OPRATION,
+    ALARM_TYPE_RUNNING,
+};
 //地址部分
 typedef struct {
     int             id;

+ 1 - 1
Qt/Qt_Test_Pro_5inch/dataupdatethread.cpp

@@ -391,7 +391,7 @@ void DataUpdateThread::deleteShmPowerBoard()
     pdu_Ctrl::instance()->clearPowerBoard();
     if (pPowerBoard)
     {
-        munmap(pPowerBoard,sizeof(GlobalPowerCtrlBoard)*pPowerBoard->array_size+sizeof(pid_t)+sizeof(size_t));
+        munmap(pPowerBoard,sizeof(GlobalPowerCtrlBoard)*pPowerBoard->array_size+sizeof(pid_t)+sizeof(size_t)/*+sizeof(int)*2*/);
         close(shm_PowerBord);
         shm_unlink("/smartPDU_shm_5_inch_screen");
     }

+ 2 - 0
Qt/Qt_Test_Pro_5inch/dataupdatethread.h

@@ -34,6 +34,8 @@ struct smartPDU_shm_5_inch_data
     //电源数据
     pid_t nIPD;
     size_t array_size;
+//    int nLinkType;      //连接类型
+//    int nSignalLevel;   //信号强度
     GlobalPowerCtrlBoard m_pData[];
 };
 class DataUpdateThread : public QThread

+ 2 - 2
Qt/Qt_Test_Pro_5inch/homewidget.cpp

@@ -37,7 +37,7 @@ void HomeWidget::InitUI()
     rgbImage=QImage(strPath+"EqpmtLogo.png");
     bgrImage = rgbImage.rgbSwapped();
     ui->label_2->setPixmap(QPixmap::fromImage(bgrImage));
-
+    ui->pushButton_3->hide();
 
 }
 
@@ -58,7 +58,7 @@ void HomeWidget::UpdateCHData()
 
         ui->label_8->setText(strV+"V");
         ui->label_9->setText(strA+"A");
-        ui->label_10->setText(strW+"kW");
+        ui->label_10->setText(strW+"W");
         ui->label_7->setText("");
     }
 }

+ 1 - 1
Qt/Qt_Test_Pro_5inch/homewidget.ui

@@ -230,7 +230,7 @@
      <item>
       <widget class="QPushButton" name="pushButton_2">
        <property name="text">
-        <string>告警</string>
+        <string>阈值</string>
        </property>
        <property name="icon">
         <iconset>

+ 103 - 0
Qt/Qt_Test_Pro_5inch/mainwidget.cpp

@@ -2,6 +2,7 @@
 #include "ui_mainwidget.h"
 #include <QDateTime>
 #include "global.h"
+#include "pdu_ctrl.h"
 #define MaxStack 3
 
 const QString strName[]={
@@ -13,6 +14,7 @@ MainWidget::MainWidget(QWidget *parent) :
 {
     ui->setupUi(this);
     InitWidget();
+    nTimerIndex=4;
 }
 
 MainWidget::~MainWidget()
@@ -43,6 +45,9 @@ void MainWidget::InitWidget()
     bgrImage = rgbImage.rgbSwapped();
     ui->label_14->setPixmap(QPixmap::fromImage(bgrImage));
 
+    ui->label_12->hide();
+    ui->label_ErrorNum->hide();
+
     m_pTimer=new QTimer(this);
     connect(m_pTimer,SIGNAL(timeout()),this,SLOT(slot_TimerUpdate()));
     m_pTimer->start(1000);
@@ -63,6 +68,31 @@ void MainWidget::InitWidget()
 
 }
 
+int MainWidget::UpdateLogData(int Status,int Status2,int Status3)
+{
+    QSqlQuery query(pdu_Ctrl::instance()->getDB());
+    QDateTime pdateTime=QDateTime::currentDateTime();
+    QString strBegin = pdateTime.toString("yyyy-MM-dd ")+"00:00:00";
+    QString strEnd=pdateTime.toString("yyyy-MM-dd ")+"23:59:59";
+    QString strExec=QString("SELECT COUNT(*) FROM Table_AlarmManage WHERE (alarmDate BETWEEN '%1' AND '%2') and (alarmType=%3 ").arg(strBegin).arg(strEnd).arg(Status);
+
+    if(Status2>=0)
+    {
+        strExec.append(QString(" or alarmType=%1 ").arg(Status2));
+    }
+    if(Status3)
+    {
+        strExec.append(QString(" or alarmType=%1 ").arg(Status3));
+    }
+    strExec.append(");");
+    //qDebug()<<strExec;
+    if (query.exec(strExec) && query.next()) {
+        int totalRecords = query.value(0).toInt();
+        return totalRecords;
+    }
+    return 0;
+}
+
 void MainWidget::UpdateTemp(QString strT, QString strH)
 {
     ui->label_Temp->setText(strT);
@@ -70,6 +100,58 @@ void MainWidget::UpdateTemp(QString strT, QString strH)
 
     update();
 }
+QString formatNumber(int num) {
+    // 边界条件处理
+    int adjustedNum = num;
+    if (num < 0) {
+        adjustedNum = 0;       // 负数强制为0 → 后续补零为"000"
+    } else if (num >= 1000) {
+        adjustedNum = 999;    // 超过1000强制为999
+    }
+
+    // 补零至3位
+    return QString("%1").arg(adjustedNum, 3, 10, QChar('0'));
+}
+void MainWidget::UpdateLogCount()
+{
+    //Warinning;
+    int nWarinningData=UpdateLogData(ALARM_TYPE_POWER,ALARM_TYPE_SENSOR,ALARM_TYPE_NETWORK);
+
+    //Log;
+    int nLogData=UpdateLogData(ALARM_TYPE_RUNNING,ALARM_TYPE_OPRATION);
+
+    QString strShow="000";
+    ui->label_WarningNum->setText(formatNumber(nWarinningData));
+    ui->label_CtrlNum->setText(formatNumber(nLogData));
+}
+
+void MainWidget::UpdateIP()
+{
+
+}
+
+QString MainWidget::getSysIP()
+{
+    QProcess process;
+    QString program = "ip"; // 或者 "ifconfig"
+    QStringList arguments;
+    if (program == "ip") {
+        arguments << "addr" << "show" << "eth0";
+    } else if (program == "ifconfig") {
+        arguments << "eth0";
+    }
+    process.start(program, arguments);
+    process.waitForFinished();
+
+    QString output = process.readAllStandardOutput();
+    QRegExp ipRegex("\\binet (\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})/\\d{1,2}\\b");
+
+    int pos = 0;
+    while ((pos = ipRegex.indexIn(output, pos)) != -1) {
+        return ipRegex.cap(1);
+    }
+    return ""; // 没有找到IP地址
+}
 
 void MainWidget::slot_TimerUpdate()
 {
@@ -81,6 +163,8 @@ void MainWidget::slot_TimerUpdate()
         ui->label_Date->setText(strDate);
         ui->label_Time->setText(strTime);
     }
+    QString strIP=getSysIP();
+    ui->label_IP->setText(strIP);
     slot_UpdateData();
 }
 
@@ -132,6 +216,24 @@ void MainWidget::slot_SwitchWnd(int nIndex)
 
 void MainWidget::slot_UpdateData()
 {
+    if(nTimerIndex>4)
+    {
+        nTimerIndex=0;
+        UpdateLogCount();
+
+        if(m_pThreshold&&ui->stackedWidget->currentWidget()==m_pThreshold)
+        {
+            m_pThreshold->ReadSqlData();
+        }else if(m_pLogWidget&&ui->stackedWidget->currentWidget()==m_pLogWidget)
+        {
+            m_pLogWidget->UpdateLog();
+        }
+    }else
+    {
+        nTimerIndex++;
+    }
+    //qDebug()<<"m_pHome="<<m_pHome<<"m_pCH="<<m_pCH<<"m_pThreshold="<<m_pThreshold;
+    //qDebug()<<"ui->stackedWidget->currentWidget()="<<ui->stackedWidget->currentWidget();
     if(m_pHome&&ui->stackedWidget->currentWidget()==m_pHome)
     {
         m_pHome->UpdateCHData();
@@ -145,4 +247,5 @@ void MainWidget::slot_UpdateData()
         m_pThreshold->UpdateTreshold();
     }
 
+
 }

+ 8 - 1
Qt/Qt_Test_Pro_5inch/mainwidget.h

@@ -21,9 +21,15 @@ public:
     //初始化窗口
     void InitWidget();
 
-    void UpdateLogData();
+    int UpdateLogData(int Status1,int Status2=-1,int Status3=-1);
 
     void UpdateTemp(QString  strT,QString  strH);
+
+    void UpdateLogCount();
+
+    void UpdateIP();
+
+    QString getSysIP();
 public slots:
     void slot_TimerUpdate();
     void slot_BtnHome();
@@ -43,6 +49,7 @@ private:
     RunChWiget* m_pCH;
     ThresholdListWidget*m_pThreshold;
     RunLogWidget* m_pLogWidget;
+    int nTimerIndex;
 };
 
 #endif // MAINWIDGET_H

+ 25 - 0
Qt/Qt_Test_Pro_5inch/mainwidget.ui

@@ -263,6 +263,31 @@
         </property>
        </spacer>
       </item>
+      <item>
+       <widget class="QLabel" name="label_IP">
+        <property name="font">
+         <font>
+          <pointsize>14</pointsize>
+         </font>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer_3">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
       <item>
        <widget class="QLabel" name="label_12">
         <property name="text">

+ 1 - 5
Qt/Qt_Test_Pro_5inch/pdu_ctrl.cpp

@@ -98,11 +98,7 @@ void pdu_Ctrl::InitData(Widget *pWidget, QGraphicsProxyWidget *pProxy, QGraphics
     m_pWidget = pWidget;
     m_nWidth= nWidth;
     m_nHeight = nHeight;
-    m_PowerBoard=new GlobalPowerCtrlBoard[3];
-    m_PowerBoard[0].product_number=2;
-    m_PowerBoard[1].product_number=2;
-    m_PowerBoard[2].product_number=2;
-    nPowerBoardSize=3;
+
 }
 
 void pdu_Ctrl::ReadModbusInit()

+ 7 - 2
Qt/Qt_Test_Pro_5inch/runchwiget.cpp

@@ -20,20 +20,24 @@ void RunChWiget::setRunCh()
 {
     GlobalPowerCtrlBoard* pAllChData=nullptr;
     int nSize=pdu_Ctrl::instance()->getPowerBoard(pAllChData);
+
     if(!pAllChData||nSize==SaveIndex)
     {
         return;
     }
+    qDebug()<<"CHUpdate:Size="<<nSize<<"SaveIndex="<<SaveIndex;
     ClearCH();
-    SaveIndex=pAllChData->product_number;
+    SaveIndex=nSize;
     int nChId=1;
     for (int nIndex=0;nIndex<nSize;nIndex++)
     {
+        qDebug()<<"AddBoard"<<nIndex<<"  Size="<<pAllChData[nIndex].product_number;
         for(int nSubIndex=0;nSubIndex<pAllChData[nIndex].product_number;nSubIndex++)
         {
             int nChIndex=nChId++;
             ch_Widget* pNewCH=new ch_Widget(this);
-            pNewCH->setDataCHP(nChIndex,&(pAllChData[nIndex]._PowerInfo[nSubIndex]));
+            pNewCH->setDataCHP(nChIndex,&(pAllChData[nIndex]._PowerInfo[nSubIndex]),&(pAllChData[nIndex]._PowerWarninginfo[nSubIndex]));
+            qDebug()<<"AddWidget="<<nChIndex;
             AddWidget(pNewCH);
             pNewCH->show();
         }
@@ -66,6 +70,7 @@ void RunChWiget::ClearCH()
        var=nullptr;
     }
     m_vecChWidget.clear();
+    qDebug()<<"ClearCH";
 }
 
 void RunChWiget::AddWidget(ch_Widget *pCHWidget)

+ 2 - 2
Qt/Qt_Test_Pro_5inch/runchwiget.ui

@@ -29,8 +29,8 @@
        </rect>
       </property>
       <layout class="QGridLayout" name="gridLayout">
-       <property name="horizontalSpacing">
-        <number>7</number>
+       <property name="spacing">
+        <number>0</number>
        </property>
       </layout>
      </widget>

+ 4 - 1
Qt/Qt_Test_Pro_5inch/runlogwidget.cpp

@@ -52,7 +52,10 @@ void RunLogWidget::AddRowData(int nIndex, int nType, QString nTime, QString strM
     ui->tableWidget->setItem(row, 1, item1);
     QTableWidgetItem *item2 = new QTableWidgetItem(QString::number(nType));
     ui->tableWidget->setItem(row, 2, item2);
-    QTableWidgetItem *item3 = new QTableWidgetItem(strMSG);
+    QString strData=strMSG;
+    strData.replace("$","");
+    strData.replace("|","");
+    QTableWidgetItem *item3 = new QTableWidgetItem(strData);
     ui->tableWidget->setItem(row, 3, item3);
 }
 

+ 13 - 1
Qt/Qt_Test_Pro_5inch/thresholdlistwidget.cpp

@@ -19,6 +19,7 @@ void ThresholdListWidget::UpdateTreshold()
 {
     //ReadSqlData();
     updateTablewidget();
+    qDebug()<<"UpdateTreshold" ;
 }
 
 void ThresholdListWidget::ReadSqlData()
@@ -63,8 +64,15 @@ void ThresholdListWidget::updateTablewidget()
     ClearList();
     // 初始化表格内容
     auto overMG=pdu_Ctrl::instance()->getOverMG();
+    if(overMG.isEmpty())
+    {
+         qDebug()<<"overMG is Empty" ;
+    }
     for(auto iters= overMG.begin(); iters!= overMG.end(); iters++) {
-        if(iters== overMG.begin()) continue;
+        if(iters== overMG.begin())
+        {
+            continue;
+        }
         for(auto iter=iters.value().begin();iter!=iters.value().end();iter++)
         {
             // 初始化阈值列(带两位小数格式)
@@ -72,7 +80,11 @@ void ThresholdListWidget::updateTablewidget()
             auto pWarningData=pdu_Ctrl::instance()->getWarningData(iter.value().nAddrID,iter.value().nAddrCHID);
             if (pWarningData)
             {
+
                checkThresholds(nRow+1,pWarningData);
+            }else
+            {
+                qDebug()<<"NO_ReadWarning " <<iter.value().nAddrID<<"_"<<iter.value().nAddrCHID;
             }
         }
     }