Explorar o código

1、修改8寸安卓屏部分信息读取

liyuezong hai 1 ano
pai
achega
a29410fb76
Modificáronse 2 ficheiros con 144 adicións e 11 borrados
  1. 6 1
      Qt/Android/SmartPDU_QT/PDUInfoDef.h
  2. 138 10
      Qt/Android/SmartPDU_QT/serialinfo.cpp

+ 6 - 1
Qt/Android/SmartPDU_QT/PDUInfoDef.h

@@ -15,6 +15,8 @@
 #define _SWITCH_T_AC_SENSOR_INFO           0x224B          //MODBUS传感器信息
 #define _SWITCH_T_AC_SENSOR_INFO1          0x225B          //干节点传感器信息
 
+#define _SWITCH_CH_DIV      150          //查询通道间隔
+
 #define QUERYSTAMP         50          //查询间隔
 
 
@@ -22,6 +24,7 @@
 //==========================PDU数据结构=======================
 struct PDUAllInfo
 {
+
     float AllVoltage_L1 =0;
     float AllCurrent_L1=0;
     float AllPower_L1=0;
@@ -39,9 +42,11 @@ struct PDUAllInfo
 
     float Sensor_Temperature=0;
     float Sensor_Humidity=0;
-    bool Sensor_WaterImmersion=true;
+    float Sensor_CO2=0;
     float Sensor_INTemperature=0;
     float Sensor_OUTTemperature=0;
+    bool Sensor_WaterImmersion=true;
+
 };
 struct PDUCHInfo
 {

+ 138 - 10
Qt/Android/SmartPDU_QT/serialinfo.cpp

@@ -82,12 +82,12 @@ void SerialInfo::on_Check_PDUStatus()
     on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_IN_L3_INFO);
     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]=0x01;
-    OrderArray[5]=0xA4;
+    OrderArray[4]=0x00;
+    OrderArray[5]=0x96;
     crc = crc16_ccitt(OrderArray, 6);
     OrderArray[6] = crc & 0xFF; // Low byte
     OrderArray[7] = (crc >> 8) & 0xFF; // High byte
@@ -95,7 +95,32 @@ void SerialInfo::on_Check_PDUStatus()
     RecString=on_Rec_PDUStatus();
     on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_CH_PHASE_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);
+
+    //查询相信息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_STATUS >> 8) & 0xFF; // High byte
@@ -109,7 +134,7 @@ void SerialInfo::on_Check_PDUStatus()
     RecString=on_Rec_PDUStatus();
     on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_CH_STATUS);
     QThread::msleep(QUERYSTAMP);
-    /*
+
     //查询modbus传感器
     OrderArray[2] = (_SWITCH_T_AC_SENSOR_INFO >> 8) & 0xFF; // High byte
     OrderArray[3] = _SWITCH_T_AC_SENSOR_INFO & 0xFF; // Low byte
@@ -135,7 +160,7 @@ void SerialInfo::on_Check_PDUStatus()
     RecString=on_Rec_PDUStatus();
     on_Parse_PDUStatus(SendString,RecString,_SWITCH_T_AC_SENSOR_INFO1);
     QThread::msleep(QUERYSTAMP);
-    */
+
 
 }
 void SerialInfo::on_Parse_PDUStatus(const QString &Sendstr,const QString &Recstr,uint16_t infoType)
@@ -179,7 +204,102 @@ void SerialInfo::on_Parse_PDUStatus(const QString &Sendstr,const QString &Recstr
     }
     else if(_SWITCH_T_AC_CH_PHASE_INFO==infoType)
     {
-
+        QVector<quint16> pRecVector=parseModbusResponse(Recstr,150);
+        if(pRecVector.size()<150) return;
+        for(int i=0;i<5;i++)
+        {
+             bool L1flag=pRecVector[i*30+9] & 0xFFFF; // Low byte
+             bool L2flag=pRecVector[i*30+19] & 0xFFFF; // Low byte
+             bool L3flag=pRecVector[i*30+29] & 0xFFFF; // Low byte
+
+             if(L1flag)
+             {
+                  m_PDUCHInfo[i].CHVoltage=((pRecVector[1] << 16) + pRecVector[0] )/1000.0f;
+                  m_PDUCHInfo[i].CHCurrent=((pRecVector[3] << 16) + pRecVector[2] )/1000.0f;
+                  m_PDUCHInfo[i].CHPower=((pRecVector[5] << 16) + pRecVector[4] )/1000.0f;
+                  m_PDUCHInfo[i].CHConsumption=((pRecVector[7] << 16) + pRecVector[6] )/1000.0f;
+             }
+             else if(L2flag)
+             {
+                  m_PDUCHInfo[i].CHVoltage=((pRecVector[11] << 16) + pRecVector[10] )/1000.0f;
+                  m_PDUCHInfo[i].CHCurrent=((pRecVector[13] << 16) + pRecVector[12] )/1000.0f;
+                  m_PDUCHInfo[i].CHPower=((pRecVector[15] << 16) + pRecVector[14] )/1000.0f;
+                  m_PDUCHInfo[i].CHConsumption=((pRecVector[17] << 16) + pRecVector[16] )/1000.0f;
+             }
+             else if(L3flag)
+             {
+                  m_PDUCHInfo[i].CHVoltage=((pRecVector[21] << 16) + pRecVector[20] )/1000.0f;
+                  m_PDUCHInfo[i].CHCurrent=((pRecVector[23] << 16) + pRecVector[22] )/1000.0f;
+                  m_PDUCHInfo[i].CHPower=((pRecVector[25] << 16) + pRecVector[24] )/1000.0f;
+                  m_PDUCHInfo[i].CHConsumption=((pRecVector[27] << 16) + pRecVector[26] )/1000.0f;
+             }
+        }
+    }
+    else if((_SWITCH_T_AC_CH_PHASE_INFO+_SWITCH_CH_DIV)==infoType)
+    {
+        QVector<quint16> pRecVector=parseModbusResponse(Recstr,150);
+        if(pRecVector.size()<150) return;
+        for(int i=0;i<5;i++)
+        {
+             bool L1flag=pRecVector[i*30+9] & 0xFFFF; // Low byte
+             bool L2flag=pRecVector[i*30+19] & 0xFFFF; // Low byte
+             bool L3flag=pRecVector[i*30+29] & 0xFFFF; // Low byte
+
+             if(L1flag)
+             {
+                  m_PDUCHInfo[i+5].CHVoltage=((pRecVector[1] << 16) + pRecVector[0] )/1000.0f;
+                  m_PDUCHInfo[i+5].CHCurrent=((pRecVector[3] << 16) + pRecVector[2] )/1000.0f;
+                  m_PDUCHInfo[i+5].CHPower=((pRecVector[5] << 16) + pRecVector[4] )/1000.0f;
+                  m_PDUCHInfo[i+5].CHConsumption=((pRecVector[7] << 16) + pRecVector[6] )/1000.0f;
+             }
+             else if(L2flag)
+             {
+                  m_PDUCHInfo[i+5].CHVoltage=((pRecVector[11] << 16) + pRecVector[10] )/1000.0f;
+                  m_PDUCHInfo[i+5].CHCurrent=((pRecVector[13] << 16) + pRecVector[12] )/1000.0f;
+                  m_PDUCHInfo[i+5].CHPower=((pRecVector[15] << 16) + pRecVector[14] )/1000.0f;
+                  m_PDUCHInfo[i+5].CHConsumption=((pRecVector[17] << 16) + pRecVector[16] )/1000.0f;
+             }
+             else if(L3flag)
+             {
+                  m_PDUCHInfo[i+5].CHVoltage=((pRecVector[21] << 16) + pRecVector[20] )/1000.0f;
+                  m_PDUCHInfo[i+5].CHCurrent=((pRecVector[23] << 16) + pRecVector[22] )/1000.0f;
+                  m_PDUCHInfo[i+5].CHPower=((pRecVector[25] << 16) + pRecVector[24] )/1000.0f;
+                  m_PDUCHInfo[i+5].CHConsumption=((pRecVector[27] << 16) + pRecVector[26] )/1000.0f;
+             }
+        }
+    }
+    else if((_SWITCH_T_AC_CH_PHASE_INFO+_SWITCH_CH_DIV*2)==infoType)
+    {
+        QVector<quint16> pRecVector=parseModbusResponse(Recstr,150);
+        if(pRecVector.size()<150) return;
+        for(int i=0;i<5;i++)
+        {
+             bool L1flag=pRecVector[i*30+9] & 0xFFFF; // Low byte
+             bool L2flag=pRecVector[i*30+19] & 0xFFFF; // Low byte
+             bool L3flag=pRecVector[i*30+29] & 0xFFFF; // Low byte
+
+             if(L1flag)
+             {
+                  m_PDUCHInfo[i+10].CHVoltage=((pRecVector[1] << 16) + pRecVector[0] )/1000.0f;
+                  m_PDUCHInfo[i+10].CHCurrent=((pRecVector[3] << 16) + pRecVector[2] )/1000.0f;
+                  m_PDUCHInfo[i+10].CHPower=((pRecVector[5] << 16) + pRecVector[4] )/1000.0f;
+                  m_PDUCHInfo[i+10].CHConsumption=((pRecVector[7] << 16) + pRecVector[6] )/1000.0f;
+             }
+             else if(L2flag)
+             {
+                  m_PDUCHInfo[i+10].CHVoltage=((pRecVector[11] << 16) + pRecVector[10] )/1000.0f;
+                  m_PDUCHInfo[i+10].CHCurrent=((pRecVector[13] << 16) + pRecVector[12] )/1000.0f;
+                  m_PDUCHInfo[i+10].CHPower=((pRecVector[15] << 16) + pRecVector[14] )/1000.0f;
+                  m_PDUCHInfo[i+10].CHConsumption=((pRecVector[17] << 16) + pRecVector[16] )/1000.0f;
+             }
+             else if(L3flag)
+             {
+                  m_PDUCHInfo[i+10].CHVoltage=((pRecVector[21] << 16) + pRecVector[20] )/1000.0f;
+                  m_PDUCHInfo[i+10].CHCurrent=((pRecVector[23] << 16) + pRecVector[22] )/1000.0f;
+                  m_PDUCHInfo[i+10].CHPower=((pRecVector[25] << 16) + pRecVector[24] )/1000.0f;
+                  m_PDUCHInfo[i+10].CHConsumption=((pRecVector[27] << 16) + pRecVector[26] )/1000.0f;
+             }
+        }
     }
     else if(_SWITCH_T_AC_CH_STATUS==infoType)
     {
@@ -192,11 +312,19 @@ 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;
+        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;
+        m_PDUAllInfo.Sensor_INTemperature = ((pRecVector[9] << 16)+ pRecVector[8])/1000.0f;
+        m_PDUAllInfo.Sensor_OUTTemperature = ((pRecVector[13] << 16)+ pRecVector[12])/1000.0f;
     }
     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(m_printflag) emit addPDUInfo(Sendstr, Recstr);