Bläddra i källkod

1、修改8寸屏刷新慢的bug

liyuezong 1 år sedan
förälder
incheckning
b74d2176e3
2 ändrade filer med 147 tillägg och 72 borttagningar
  1. 146 72
      Qt/SmartPDU_QT/serialinfo.cpp
  2. 1 0
      Qt/SmartPDU_QT/serialinfo.h

+ 146 - 72
Qt/SmartPDU_QT/serialinfo.cpp

@@ -20,6 +20,7 @@ void SerialInfo::on_closeWork()
 
 void SerialInfo::on_Check_PDUStatus()
 {
+    //initPDUStatus();
     //轮询PDU信息
     char OrderArray[8];
 
@@ -38,9 +39,10 @@ void SerialInfo::on_Check_PDUStatus()
     OrderArray[6] = crc & 0xFF; // Low byte
     OrderArray[7] = (crc >> 8) & 0xFF; // High byte
     SendString=on_SendInfo(OrderArray,8);
+    QThread::msleep(QUERYSTAMP);
     RecString=on_Rec_PDUStatus();
     on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_TYPE_CHN_INFO);
-    QThread::msleep(QUERYSTAMP);
+    //QThread::msleep(QUERYSTAMP);
 
 
     //查询L1信息
@@ -52,9 +54,10 @@ void SerialInfo::on_Check_PDUStatus()
     OrderArray[6] = crc & 0xFF; // Low byte
     OrderArray[7] = (crc >> 8) & 0xFF; // High byte
     SendString=on_SendInfo(OrderArray,8);
+    QThread::msleep(QUERYSTAMP);
     RecString=on_Rec_PDUStatus();
     on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_IN_L1_INFO);
-    QThread::msleep(QUERYSTAMP);
+    //QThread::msleep(QUERYSTAMP);
 
     //查询L2信息
     OrderArray[2] = (_SWITCH_T_AC_IN_L2_INFO >> 8) & 0xFF; // High byte
@@ -65,9 +68,10 @@ void SerialInfo::on_Check_PDUStatus()
     OrderArray[6] = crc & 0xFF; // Low byte
     OrderArray[7] = (crc >> 8) & 0xFF; // High byte
     SendString=on_SendInfo(OrderArray,8);
+    QThread::msleep(QUERYSTAMP);
     RecString=on_Rec_PDUStatus();
     on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_IN_L2_INFO);
-    QThread::msleep(QUERYSTAMP);
+    //QThread::msleep(QUERYSTAMP);
 
     //查询L3信息
     OrderArray[2] = (_SWITCH_T_AC_IN_L3_INFO >> 8) & 0xFF; // High byte
@@ -78,67 +82,28 @@ void SerialInfo::on_Check_PDUStatus()
     OrderArray[6] = crc & 0xFF; // Low byte
     OrderArray[7] = (crc >> 8) & 0xFF; // High byte
     SendString=on_SendInfo(OrderArray,8);
-    RecString=on_Rec_PDUStatus();
-    on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_IN_L3_INFO);
     QThread::msleep(QUERYSTAMP);
-
-     for(int i=0;i<m_TotalCHTemp;i++)
-     {
-         //查询相信息
-         OrderArray[2] = ((_SWITCH_T_AC_CH_PHASE_INFO + 30*i)>> 8) & 0xFF; // High byte
-         OrderArray[3] = (_SWITCH_T_AC_CH_PHASE_INFO + 30*i) & 0xFF; // Low byte
-         OrderArray[4]=0x00;
-         OrderArray[5]=0x1E;
-         crc = crc16_ccitt(OrderArray, 6);
-         OrderArray[6] = crc & 0xFF; // Low byte
-         OrderArray[7] = (crc >> 8) & 0xFF; // High byte
-         SendString=on_SendInfo(OrderArray,8);
-         RecString=on_Rec_PDUStatus();
-         on_Parse_PDUStatus(SendString,RecString,(_SWITCH_T_AC_CH_PHASE_INFO + 30*i));
-         QThread::msleep(QUERYSTAMP);
-     }
-
-
-    /*
-    //查询相信息1
-    OrderArray[2] = (_SWITCH_T_AC_CH_PHASE_INFO >> 8) & 0xFF; // High byte
-    OrderArray[3] = _SWITCH_T_AC_CH_PHASE_INFO & 0xFF; // Low byte
-    OrderArray[4]=0x00;
-    OrderArray[5]=0x96;
-    crc = crc16_ccitt(OrderArray, 6);
-    OrderArray[6] = crc & 0xFF; // Low byte
-    OrderArray[7] = (crc >> 8) & 0xFF; // High byte
-    SendString=on_SendInfo(OrderArray,8);
     RecString=on_Rec_PDUStatus();
-    on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_CH_PHASE_INFO);
-    QThread::msleep(QUERYSTAMP);
+    on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_IN_L3_INFO);
+    //QThread::msleep(QUERYSTAMP);
 
-    //查询相信息2
-    OrderArray[2] = ((_SWITCH_T_AC_CH_PHASE_INFO + _SWITCH_CH_DIV)>> 8) & 0xFF; // High byte
-    OrderArray[3] = (_SWITCH_T_AC_CH_PHASE_INFO + _SWITCH_CH_DIV) & 0xFF; // Low byte
-    OrderArray[4]=0x00;
-    OrderArray[5]=0x96;
-    crc = crc16_ccitt(OrderArray, 6);
-    OrderArray[6] = crc & 0xFF; // Low byte
-    OrderArray[7] = (crc >> 8) & 0xFF; // High byte
-    SendString=on_SendInfo(OrderArray,8);
-    RecString=on_Rec_PDUStatus();
-    on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_CH_PHASE_INFO+_SWITCH_CH_DIV);
-    QThread::msleep(QUERYSTAMP);
+    //查询相信息
+    for(int i=0;i<m_TotalCHTemp;i++)
+    {
 
-    //查询相信息3
-    OrderArray[2] = ((_SWITCH_T_AC_CH_PHASE_INFO + _SWITCH_CH_DIV*2 )>> 8) & 0xFF; // High byte
-    OrderArray[3] = (_SWITCH_T_AC_CH_PHASE_INFO + _SWITCH_CH_DIV*2 ) & 0xFF; // Low byte
-    OrderArray[4]=0x00;
-    OrderArray[5]=0x96;
-    crc = crc16_ccitt(OrderArray, 6);
-    OrderArray[6] = crc & 0xFF; // Low byte
-    OrderArray[7] = (crc >> 8) & 0xFF; // High byte
-    SendString=on_SendInfo(OrderArray,8);
-    RecString=on_Rec_PDUStatus();
-    on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_CH_PHASE_INFO+_SWITCH_CH_DIV*2);
-    QThread::msleep(QUERYSTAMP);
-    */
+        OrderArray[2] = ((_SWITCH_T_AC_CH_PHASE_INFO + 30*i)>> 8) & 0xFF; // High byte
+        OrderArray[3] = (_SWITCH_T_AC_CH_PHASE_INFO + 30*i) & 0xFF; // Low byte
+        OrderArray[4]=0x00;
+        OrderArray[5]=0x1E;
+        crc = crc16_ccitt(OrderArray, 6);
+        OrderArray[6] = crc & 0xFF; // Low byte
+        OrderArray[7] = (crc >> 8) & 0xFF; // High byte
+        SendString=on_SendInfo(OrderArray,8);
+        QThread::msleep(QUERYSTAMP);
+        RecString=on_Rec_PDUStatus();
+        on_Parse_PDUStatus(SendString,RecString,(_SWITCH_T_AC_CH_PHASE_INFO + 30*i));
+        //QThread::msleep(QUERYSTAMP);
+    }
 
     //查询通道状态
     OrderArray[2] = (_SWITCH_T_AC_CH_STATUS >> 8) & 0xFF; // High byte
@@ -149,9 +114,10 @@ void SerialInfo::on_Check_PDUStatus()
     OrderArray[6] = crc & 0xFF; // Low byte
     OrderArray[7] = (crc >> 8) & 0xFF; // High byte
     SendString=on_SendInfo(OrderArray,8);
+    QThread::msleep(QUERYSTAMP);
     RecString=on_Rec_PDUStatus();
     on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_CH_STATUS);
-    QThread::msleep(QUERYSTAMP);
+    //QThread::msleep(QUERYSTAMP);
 
 
     //查询modbus传感器
@@ -163,9 +129,10 @@ void SerialInfo::on_Check_PDUStatus()
     OrderArray[6] = crc & 0xFF; // Low byte
     OrderArray[7] = (crc >> 8) & 0xFF; // High byte
     SendString=on_SendInfo(OrderArray,8);
+    QThread::msleep(QUERYSTAMP);
     RecString=on_Rec_PDUStatus();
     on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_SENSOR_INFO);
-    QThread::msleep(QUERYSTAMP);
+    //QThread::msleep(QUERYSTAMP);
 
     //查询干节点传感器
     OrderArray[2] =(_SWITCH_T_AC_SENSOR_INFO1 >> 8) & 0xFF; // High byte
@@ -176,9 +143,10 @@ void SerialInfo::on_Check_PDUStatus()
     OrderArray[6] = crc & 0xFF; // Low byte
     OrderArray[7] = (crc >> 8) & 0xFF; // High byte
     SendString=on_SendInfo(OrderArray,8);
+    QThread::msleep(QUERYSTAMP);
     RecString=on_Rec_PDUStatus();
     on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_SENSOR_INFO1);
-    QThread::msleep(QUERYSTAMP);
+    //QThread::msleep(QUERYSTAMP);
 
 
 }
@@ -189,7 +157,12 @@ void SerialInfo::on_Parse_PDUStatus(const QString &Sendstr,const QString &Recstr
     if(_SWITCH_T_AC_TYPE_CHN_INFO==infoType)
     {
        QVector<quint16> pRecVector=parseModbusResponse(Recstr,1);
-       if(pRecVector.size()<1) return;
+       if(pRecVector.size()<1)
+       {
+           //m_TotalCHTemp =0;
+          // m_PDUType =0;
+           return;
+       }
        m_TotalCHTemp = pRecVector[0] & 0xFF; // Low byte
        m_PDUType = (pRecVector[0] >> 8) & 0xFF; // High byte
 
@@ -197,7 +170,14 @@ void SerialInfo::on_Parse_PDUStatus(const QString &Sendstr,const QString &Recstr
     else if(_SWITCH_T_AC_IN_L1_INFO==infoType)
     {
         QVector<quint16> pRecVector=parseModbusResponse(Recstr,8);
-        if(pRecVector.size()<8) return;
+        if(pRecVector.size()<8)
+        {
+            //m_PDUAllInfo.AllVoltage_L1 = 0;
+            //m_PDUAllInfo.AllCurrent_L1 = 0;
+            //m_PDUAllInfo.AllPower_L1 = 0;
+            //m_PDUAllInfo.AllConsumption_L1 = 0;
+            return;
+        }
         m_PDUAllInfo.AllVoltage_L1 = ((pRecVector[1] << 16) + pRecVector[0] )/1000.0f; // Low byte
         m_PDUAllInfo.AllCurrent_L1 = ((pRecVector[3] << 16) + pRecVector[2] )/1000.0f; // Low byte
         m_PDUAllInfo.AllPower_L1 = ((pRecVector[5] << 16) + pRecVector[4] )/1000.0f; // Low byte
@@ -206,7 +186,14 @@ void SerialInfo::on_Parse_PDUStatus(const QString &Sendstr,const QString &Recstr
     else if(_SWITCH_T_AC_IN_L2_INFO==infoType)
     {
         QVector<quint16> pRecVector=parseModbusResponse(Recstr,8);
-        if(pRecVector.size()<8) return;
+        if(pRecVector.size()<8)
+        {
+            //m_PDUAllInfo.AllVoltage_L2 = 0;
+            //m_PDUAllInfo.AllCurrent_L2 = 0;
+            //m_PDUAllInfo.AllPower_L2 = 0;
+            //m_PDUAllInfo.AllConsumption_L2 = 0;
+            return;
+        }
         m_PDUAllInfo.AllVoltage_L2 = ((pRecVector[1] << 16) + pRecVector[0] )/1000.0f; // Low byte
         m_PDUAllInfo.AllCurrent_L2 = ((pRecVector[3] << 16) + pRecVector[2] )/1000.0f; // Low byte
         m_PDUAllInfo.AllPower_L2 = ((pRecVector[5] << 16) + pRecVector[4] )/1000.0f; // Low byte
@@ -215,7 +202,14 @@ void SerialInfo::on_Parse_PDUStatus(const QString &Sendstr,const QString &Recstr
     else if(_SWITCH_T_AC_IN_L3_INFO==infoType)
     {
         QVector<quint16> pRecVector=parseModbusResponse(Recstr,8);
-        if(pRecVector.size()<8) return;
+        if(pRecVector.size()<8)
+        {
+            //m_PDUAllInfo.AllVoltage_L3 = 0;
+            //m_PDUAllInfo.AllCurrent_L3 = 0;
+            //m_PDUAllInfo.AllPower_L3 = 0;
+            //m_PDUAllInfo.AllConsumption_L3 = 0;
+            return;
+        }
         m_PDUAllInfo.AllVoltage_L3 = ((pRecVector[1] << 16) + pRecVector[0] )/1000.0f; // Low byte
         m_PDUAllInfo.AllCurrent_L3 = ((pRecVector[3] << 16) + pRecVector[2] )/1000.0f; // Low byte
         m_PDUAllInfo.AllPower_L3 = ((pRecVector[5] << 16) + pRecVector[4] )/1000.0f; // Low byte
@@ -224,7 +218,14 @@ void SerialInfo::on_Parse_PDUStatus(const QString &Sendstr,const QString &Recstr
     else if(_SWITCH_T_AC_CH_STATUS==infoType)
     {
         QVector<quint16> pRecVector=parseModbusResponse(Recstr,14);
-        if(pRecVector.size()<14) return;
+        if(pRecVector.size()<14)
+        {
+            //for(int i=0;i<14;i++)
+            //{
+            //    m_PDUCHInfo[i].CHStatus= false; // Low byte
+            //}
+            return;
+        }
         for(int i=0;i<14;i++)
         {
             m_PDUCHInfo[i].CHStatus=pRecVector[i] & 0xFFFF; // Low byte
@@ -233,7 +234,15 @@ void SerialInfo::on_Parse_PDUStatus(const QString &Sendstr,const QString &Recstr
     else if(_SWITCH_T_AC_SENSOR_INFO==infoType)
     {
         QVector<quint16> pRecVector=parseModbusResponse(Recstr,16);
-        if(pRecVector.size()<16) return;
+        if(pRecVector.size()<16)
+        {
+            //m_PDUAllInfo.Sensor_Temperature = 0;
+            //m_PDUAllInfo.Sensor_Humidity = 0;
+            //m_PDUAllInfo.Sensor_CO2 = 0;
+            //m_PDUAllInfo.Sensor_INTemperature = 0;
+            //m_PDUAllInfo.Sensor_OUTTemperature = 0;
+            return;
+        }
         m_PDUAllInfo.Sensor_Temperature = ((pRecVector[1] << 16) + pRecVector[0] )/1000.0f;
         m_PDUAllInfo.Sensor_Humidity = ((pRecVector[3] << 16) + pRecVector[2] )/1000.0f;
         m_PDUAllInfo.Sensor_CO2 = ((pRecVector[5] << 16) + pRecVector[4] )/1000.0f;
@@ -243,8 +252,13 @@ void SerialInfo::on_Parse_PDUStatus(const QString &Sendstr,const QString &Recstr
     else if(_SWITCH_T_AC_SENSOR_INFO1==infoType)
     {
         QVector<quint16> pRecVector=parseModbusResponse(Recstr,4);
-        if(pRecVector.size()<4) return;
-        m_PDUAllInfo.Sensor_WaterImmersion = pRecVector[0] & 0xFFFF; // Low byte
+        if(pRecVector.size()<4)
+        {
+            //m_PDUAllInfo.Sensor_WaterImmersion=false;
+            return;
+        }
+        bool immFlag = pRecVector[0] & 0xFFFF; // Low byte
+        m_PDUAllInfo.Sensor_WaterImmersion =!immFlag;
     }
     else
     {
@@ -253,7 +267,14 @@ void SerialInfo::on_Parse_PDUStatus(const QString &Sendstr,const QString &Recstr
             if((_SWITCH_T_AC_CH_PHASE_INFO+30*i)==infoType)
             {
                 QVector<quint16> pRecVector=parseModbusResponse(Recstr,30);
-                if(pRecVector.size()<30) return;
+                if(pRecVector.size()<30)
+                {
+                    //m_PDUCHInfo[i].CHVoltage=0;
+                    //m_PDUCHInfo[i].CHCurrent=0;
+                    //m_PDUCHInfo[i].CHPower=0;
+                    //m_PDUCHInfo[i].CHConsumption=0;
+                    return;
+                }
 
                 // bool L1flag=pRecVector[8] & 0xFFFF; // Low byte
                 //bool L2flag=pRecVector[18] & 0xFFFF; // Low byte
@@ -337,6 +358,7 @@ QString SerialInfo::on_SendInfo(char* OrderArray,int sendsize)
 QString SerialInfo::on_Rec_PDUStatus()
 {
     if(!m_openflag) return "";
+    /*
     // 如接收成功,会返回接收的字符串,失败返回空字符串
     QString Allrecinfo="";
     for (int i=0;i<10;i++)
@@ -364,6 +386,33 @@ QString SerialInfo::on_Rec_PDUStatus()
         }
     }
     return Allrecinfo;
+    */
+    // 如接收成功,会返回接收的字符串,失败返回空字符串
+    QString Allrecinfo="";
+
+    QAndroidJniObject  recbacktring = QAndroidJniObject::callStaticObjectMethod(
+                "usb/USBListActivity",
+                "readData",
+                "()Ljava/lang/String;");
+
+    QString recinfo=recbacktring.toString();
+    // 发送字节计数并显示
+    if(recinfo!="")
+    {
+        QString hexString;
+        QByteArray byteArray = recinfo.toLatin1(); // 将 QString 转换为 QByteArray,使用 UTF-8 编码
+        for (char byte : byteArray) {
+            // 使用 printf 格式化输出或 qDebug() 输出每个字节的十六进制表示
+            hexString += QString("%1 ").arg(static_cast<unsigned char>(byte), 2, 16, QChar('0'));
+        }
+        Allrecinfo=hexString;
+    }
+    else
+    {
+
+    }
+
+    return Allrecinfo;
 }
 
 uint16_t SerialInfo::crc16_ccitt(char* data, size_t length) {
@@ -424,4 +473,29 @@ QVector<quint16> SerialInfo::parseModbusResponse(const QString &hexString, int r
 
     return registers;
 }
+void SerialInfo::initPDUStatus()
+{
+    /*
+    m_PDUAllInfo.AllVoltage_L1 =0;
+    m_PDUAllInfo.AllCurrent_L1=0;
+    m_PDUAllInfo.AllPower_L1=0;
+    m_PDUAllInfo.AllConsumption_L1=0;
+
+    m_PDUAllInfo.AllVoltage_L2=0;
+    m_PDUAllInfo.AllCurrent_L2=0;
+    m_PDUAllInfo.AllPower_L2=0;
+    m_PDUAllInfo.AllConsumption_L2=0;
+
+    m_PDUAllInfo.AllVoltage_L3=0;
+    m_PDUAllInfo.AllCurrent_L3=0;
+    m_PDUAllInfo.AllPower_L3=0;
+    m_PDUAllInfo.AllConsumption_L3=0;
+    */
 
+    m_PDUAllInfo.Sensor_Temperature=0;
+    m_PDUAllInfo.Sensor_Humidity=0;
+    m_PDUAllInfo.Sensor_CO2=0;
+    m_PDUAllInfo.Sensor_INTemperature=0;
+    m_PDUAllInfo.Sensor_OUTTemperature=0;
+    m_PDUAllInfo.Sensor_WaterImmersion=false;
+}

+ 1 - 0
Qt/SmartPDU_QT/serialinfo.h

@@ -46,6 +46,7 @@ public:
     QString on_Rec_PDUStatus();
     void on_Parse_PDUStatus(const QString &Sendstr,const QString &Recstr,uint16_t infoType);
     QVector<quint16> parseModbusResponse(const QString &hexString, int registerCount);
+    void initPDUStatus();
 
 signals:
     void addPDUInfo(const QString &sendstr, const QString &recstr);