Sfoglia il codice sorgente

1、调整三相、单相功率因数计算方式;2、修复总体功率历史记录横坐标问题;

liyuezong 11 mesi fa
parent
commit
34b594400c
5 ha cambiato i file con 159 aggiunte e 51 eliminazioni
  1. 129 45
      pro/src/app.c
  2. 3 1
      pro/src/common.h
  3. 3 2
      pro/src/json_handle.c
  4. 3 3
      pro/src/sqlite_handle.c
  5. 21 0
      pro/src/switch_ctrl.c

+ 129 - 45
pro/src/app.c

@@ -213,21 +213,31 @@ static void* power_thread(void* arg)
                         {
                             if (s % 3 == p)
                             {
-                                nSZPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power;
-                                nYGPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power * _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor;
+                                nYGPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power;
+                                if(_globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor > 0 && _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor <= 1.0)
+                                    nSZPower += (_globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power / _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor);
+                                else
+                                    nSZPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power;
+                                
                             }
                         }
                         else if (_globalDeviceManager->pCtrlBoard[i].product_type == DOUBLE_AC_TYPE)
                         {
                             if (_globalDeviceManager->pCtrlBoard[i].nLeft_phType == p && s < 4)
                             {
-                                nSZPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power;
-                                nYGPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power * _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor;
+                                nYGPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power;
+                                if(_globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor > 0 && _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor <= 1.0)
+                                    nSZPower += (_globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power / _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor);
+                                else
+                                    nSZPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power;
                             }
                             if (_globalDeviceManager->pCtrlBoard[i].nRight_phType == p && (s >= 4 && s < 8))
                             {
-                                nSZPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power;
-                                nYGPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power * _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor;
+                                nYGPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power;
+                                if(_globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor > 0 && _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor <= 1.0)
+                                    nSZPower += (_globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power / _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor);
+                                else
+                                    nSZPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power;
                             }
                         }
                     }
@@ -333,9 +343,11 @@ static void* power_thread(void* arg)
                     _globalTotalPowerInfo._power_info.voltage =  _globalTotalPowerInfo._power_info.voltage > _globalPowerInfo._power_info.voltage ? _globalTotalPowerInfo._power_info.voltage : _globalPowerInfo._power_info.voltage;
                     _globalTotalPowerInfo._power_info.current += _globalPowerInfo._power_info.current ;
                     _globalTotalPowerInfo._power_info.power += _globalPowerInfo._power_info.power ;
+                    _globalTotalPowerInfo._power_info.n_power +=  _globalPowerInfo._power_info.n_power;
+                    _globalTotalPowerInfo._power_info.app_power += _globalPowerInfo._power_info.app_power;
                     _globalTotalPowerInfo._power_info.freq =  _globalTotalPowerInfo._power_info.freq > _globalPowerInfo._power_info.freq ? _globalTotalPowerInfo._power_info.freq : _globalPowerInfo._power_info.freq;
                     _globalTotalPowerInfo._power_info.consumption += _globalPowerInfo._power_info.consumption ;
-                    _globalTotalPowerInfo._power_info.factor = _globalTotalPowerInfo._power_info.factor > _globalPowerInfo._power_info.factor ? _globalTotalPowerInfo._power_info.factor : _globalPowerInfo._power_info.factor;
+                    //_globalTotalPowerInfo._power_info.factor = _globalTotalPowerInfo._power_info.factor > _globalPowerInfo._power_info.factor ? _globalTotalPowerInfo._power_info.factor : _globalPowerInfo._power_info.factor;
 
                     //补全信息
                     _globalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product.id;
@@ -420,6 +432,8 @@ static void* power_thread(void* arg)
                             _globalPowerInfo._power_info.voltage = _pTreeACPowerMangerTemp->_PowerInfo.voltage;
                             _globalPowerInfo._power_info.current += _pTreeACPowerMangerTemp->_PowerInfo.current;
                             _globalPowerInfo._power_info.power += _pTreeACPowerMangerTemp->_PowerInfo.power;
+                            _globalPowerInfo._power_info.n_power += _pTreeACPowerMangerTemp->_PowerInfo.n_power;
+                            _globalPowerInfo._power_info.app_power += _pTreeACPowerMangerTemp->_PowerInfo.app_power;
                             _globalPowerInfo._power_info.freq = _pTreeACPowerMangerTemp->_PowerInfo.freq;
                             _globalPowerInfo._power_info.consumption += _pTreeACPowerMangerTemp->_PowerInfo.consumption;
                             _globalPowerInfo._power_info.factor = _pTreeACPowerMangerTemp->_PowerInfo.factor;
@@ -448,9 +462,11 @@ static void* power_thread(void* arg)
                                         pTreeAPowerInfo->_PowerInfo.voltage = Vavg[nTreeACType];
                                         pTreeAPowerInfo->_PowerInfo.current += _pTreeACPowerMangerTemp->_PowerInfo.current;
                                         pTreeAPowerInfo->_PowerInfo.power += _pTreeACPowerMangerTemp->_PowerInfo.power;
+                                        pTreeAPowerInfo->_PowerInfo.app_power += _pTreeACPowerMangerTemp->_PowerInfo.app_power;
+                                        pTreeAPowerInfo->_PowerInfo.n_power += _pTreeACPowerMangerTemp->_PowerInfo.n_power;
                                         pTreeAPowerInfo->_PowerInfo.freq = _pTreeACPowerMangerTemp->_PowerInfo.freq;
                                         // pTreeAPowerInfo->_PowerInfo.consumption += _pTreeACPowerMangerTemp->_PowerInfo.consumption;
-                                        pTreeAPowerInfo->_PowerInfo.factor = _pTreeACPowerMangerTemp->_PowerInfo.factor;
+                                        //pTreeAPowerInfo->_PowerInfo.factor = _pTreeACPowerMangerTemp->_PowerInfo.factor;
                                         VavgTimes[nTreeACType] += 1;
                                     }
                                     pTreeAPowerInfo->_PowerInfo.consumption += _pTreeACPowerMangerTemp->_PowerInfo.consumption;
@@ -503,10 +519,14 @@ static void* power_thread(void* arg)
                         }
                         if (__globalDeviceManage.triphasic_mmap)
                         {
-                            __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_consumption = _globalTotalPowerInfo._power_info.consumption * 1000;
-                            __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_freq = _globalTotalPowerInfo._power_info.freq * 1000;
-                            __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_power = _globalTotalPowerInfo._power_info.power * 1000;
-                            __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_factor = _globalTotalPowerInfo._power_info.factor * 1000;
+                            __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_consumption = _globalPowerInfo._power_info.consumption * 1000;
+                            __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_freq        = _globalPowerInfo._power_info.freq * 1000;
+                            __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_power       = _globalPowerInfo._power_info.power * 1000;
+                            __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_factor      = _globalPowerInfo._power_info.factor * 1000;            
+                            // __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_consumption = _globalTotalPowerInfo._power_info.consumption * 1000;
+                            // __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_freq = _globalTotalPowerInfo._power_info.freq * 1000;
+                            // __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_power = _globalTotalPowerInfo._power_info.power * 1000;
+                            // __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_factor = _globalTotalPowerInfo._power_info.factor * 1000;
                         }
                         if (_globalDeviceManager->triphasic_mmap)
                         {
@@ -647,7 +667,7 @@ static void* power_thread(void* arg)
                     GlobalTreeACManager* _pTreeACPowerPhData = NULL ;  
                     
                     memset(&_globalPowerInfo._power_info, 0, sizeof(_globalPowerInfo._power_info));
-                    float nchYGpower = 0;
+
                     list_for_each_entry(_pTreeACPowerMangerTemp, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
                     {
                         if ((__globalDeviceManage._globalDevInfo.product.pwr_type==SmartPDU_Tree_AC_One||__globalDeviceManage._globalDevInfo.product.pwr_type==SmartPDU_Tree_AC_Two||__globalDeviceManage._globalDevInfo.product.pwr_type==SmartPDU_Tree_AC_Tree)&&_pTreeACPowerMangerTemp->product_ph_outputStatus==2)
@@ -663,12 +683,13 @@ static void* power_thread(void* arg)
                         _globalPowerInfo._power_info.voltage = _pTreeACPowerMangerTemp->_PowerInfo.voltage;
                         _globalPowerInfo._power_info.current += _pTreeACPowerMangerTemp->_PowerInfo.current;
                         _globalPowerInfo._power_info.power += _pTreeACPowerMangerTemp->_PowerInfo.power;
+                        _globalPowerInfo._power_info.n_power += _pTreeACPowerMangerTemp->_PowerInfo.n_power;
+                        _globalPowerInfo._power_info.app_power += _pTreeACPowerMangerTemp->_PowerInfo.app_power;
                         _globalPowerInfo._power_info.freq =_globalPowerInfo._power_info.freq> _pTreeACPowerMangerTemp->_PowerInfo.freq?_globalPowerInfo._power_info.freq:_pTreeACPowerMangerTemp->_PowerInfo.freq;
                         _globalPowerInfo._power_info.consumption += _pTreeACPowerMangerTemp->_PowerInfo.consumption;
                        // _globalPowerInfo._power_info.factor = _pTreeACPowerMangerTemp->_PowerInfo.factor > _globalPowerInfo._power_info.factor ? _pTreeACPowerMangerTemp->_PowerInfo.factor : _globalPowerInfo._power_info.factor;
-                       nchYGpower+=_pTreeACPowerMangerTemp->_PowerInfo.factor*_pTreeACPowerMangerTemp->_PowerInfo.power;
-                       
-
+               
+    
                         time_t now;
                         time(&now);
                         t = localtime(&now);
@@ -741,6 +762,11 @@ static void* power_thread(void* arg)
                             _globalPowerInfo._power_info.NF_status = _pTreeACPowerMangerTemp->_PowerInfo.NF_status;
                         }
                     }
+                    // 计算通道总功率因数
+                    if(_globalPowerMangerTemp->_PowerInfo.app_power > 0)
+                        _globalPowerMangerTemp->_PowerInfo.factor = _globalPowerMangerTemp->_PowerInfo.power / _globalPowerMangerTemp->_PowerInfo.app_power;
+                    else
+                        _globalPowerMangerTemp->_PowerInfo.factor = 0;
 
                     if (allphOpenNum == allphOutNum)
                     {
@@ -752,9 +778,9 @@ static void* power_thread(void* arg)
                     }
 
                     // 计算通道总功率因数
-                    if (_globalPowerInfo._power_info.power > 0)
+                    if (_globalPowerInfo._power_info.app_power > 0)
                     {
-                        _globalPowerInfo._power_info.factor = nchYGpower / _globalPowerInfo._power_info.power;
+                        _globalPowerInfo._power_info.factor = _globalPowerInfo._power_info.power / _globalPowerInfo._power_info.app_power;
                     }
                     else
                     {
@@ -872,11 +898,14 @@ static void* power_thread(void* arg)
 
                     // 计算总电源信息
                     _globalTotalPowerInfo._power_info.voltage = _globalPowerInfo._power_info.voltage*sqrt(3);
-                    _globalTotalPowerInfo._power_info.current += _globalPowerInfo._power_info.current ;
-                    _globalTotalPowerInfo._power_info.power += _globalPowerInfo._power_info.power ;
-                    _globalTotalPowerInfo._power_info.freq = _globalPowerInfo._power_info.freq> _globalTotalPowerInfo._power_info.freq?  _globalPowerInfo._power_info.freq:_globalTotalPowerInfo._power_info.freq;
-                    _globalTotalPowerInfo._power_info.consumption += _globalPowerInfo._power_info.consumption ;
-                    _globalTotalPowerInfo._power_info.factor = _globalPowerInfo._power_info.factor>_globalTotalPowerInfo._power_info.factor ? _globalPowerInfo._power_info.factor:_globalTotalPowerInfo._power_info.factor;
+                     _globalTotalPowerInfo._power_info.current += _globalPowerInfo._power_info.current ;
+                     _globalTotalPowerInfo._power_info.power += _globalPowerInfo._power_info.power ;
+                     _globalTotalPowerInfo._power_info.n_power += _globalPowerInfo._power_info.n_power ;
+                     _globalTotalPowerInfo._power_info.app_power += _globalPowerInfo._power_info.app_power ;
+
+                     _globalTotalPowerInfo._power_info.freq = _globalPowerInfo._power_info.freq> _globalTotalPowerInfo._power_info.freq?  _globalPowerInfo._power_info.freq:_globalTotalPowerInfo._power_info.freq;
+                     _globalTotalPowerInfo._power_info.consumption += _globalPowerInfo._power_info.consumption ;
+                    // _globalTotalPowerInfo._power_info.factor = _globalPowerInfo._power_info.factor>_globalTotalPowerInfo._power_info.factor ? _globalPowerInfo._power_info.factor:_globalTotalPowerInfo._power_info.factor;
                     _globalPowerInfo.product_status = _globalPowerInfo._power_info.status ;
                     _globalPowerMangerTemp->product_ch_status = _globalPowerInfo._power_info.status ;
                      _globalPowerMangerTemp->product_ch_NF_status = _globalPowerInfo._power_info.NF_status ;
@@ -884,10 +913,16 @@ static void* power_thread(void* arg)
                     // 级联通道总体信息
                      if (__globalDeviceManage.triphasic_mmap)
                      {
-                         __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_consumption = _globalTotalPowerInfo._power_info.consumption * 1000;
-                         __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_freq = _globalTotalPowerInfo._power_info.freq * 1000;
-                         __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_power = _globalTotalPowerInfo._power_info.power * 1000;
-                         __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_factor = _globalTotalPowerInfo._power_info.factor * 1000;
+                        __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_factor       = _globalPowerMangerTemp->_PowerInfo.factor * 1000;
+                        __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_consumption  = _globalPowerMangerTemp->_PowerInfo.consumption * 1000;
+                        __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_freq         = _globalPowerMangerTemp->_PowerInfo.freq * 1000;
+                        __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_power        = _globalPowerMangerTemp->_PowerInfo.power * 1000;
+
+                        //  __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_consumption = _globalTotalPowerInfo._power_info.consumption * 1000;
+                        //  __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_freq = _globalTotalPowerInfo._power_info.freq * 1000;
+                        //  __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_power = _globalTotalPowerInfo._power_info.power * 1000;
+                         
+                        // __globalDeviceManage.triphasic_mmap->chn_info[_chn].chn_factor = _globalTotalPowerInfo._power_info.factor * 1000;
                      }
                      if (_globalDeviceManager->triphasic_mmap)
                      {
@@ -1131,6 +1166,16 @@ static void* power_thread(void* arg)
         }
 
 
+
+  
+
+        if(_globalTotalPowerInfo._power_info.app_power  > 0)
+        {
+            _globalTotalPowerInfo._power_info.factor = _globalTotalPowerInfo._power_info.power / _globalTotalPowerInfo._power_info.app_power;
+        }else
+        {
+            _globalTotalPowerInfo._power_info.factor = 0;
+        }
         //all 
         if(__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_AC
          || __globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_DC)
@@ -1170,6 +1215,8 @@ static void* power_thread(void* arg)
                     if (_globalDeviceManager->pCtrlBoard[i].product_type == DOUBLE_AC_TYPE)
                     {
                         int nFromIndex = 0;
+                        float app_power  = 0;
+                        float n_power   = 0;
                         if (_globalDeviceManager->pCtrlBoard[i].nLeft_phType == nTreeACType)
                         {
                             nFromIndex=0;
@@ -1182,7 +1229,22 @@ static void* power_thread(void* arg)
                             _pTreeACPowerMangerTemp->_PowerInfo.power += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power;
                             _pTreeACPowerMangerTemp->_PowerInfo.freq = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].freq > _pTreeACPowerMangerTemp->_PowerInfo.freq ? _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].freq : _pTreeACPowerMangerTemp->_PowerInfo.freq;
                             _pTreeACPowerMangerTemp->_PowerInfo.consumption += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].consumption;
-                            nTotalYGPower += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].factor * _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power;
+                            if(_globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].factor > 0 && _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].factor <=1)
+                            { 
+                                app_power = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power / _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].factor;
+                                n_power = app_power - _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power;
+                            } else
+                            {
+                                app_power = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power;
+                                n_power = app_power - _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power;
+                            }
+                            
+                            _pTreeACPowerMangerTemp->_PowerInfo.app_power += app_power;
+                            _pTreeACPowerMangerTemp->_PowerInfo.n_power += n_power;
+
+                           
+                           
+                            // nTotalYGPower += (_globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power/_globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].factor);
                         }
                         if (_globalDeviceManager->pCtrlBoard[i].nRight_phType == nTreeACType)
                         {
@@ -1196,7 +1258,15 @@ static void* power_thread(void* arg)
                             _pTreeACPowerMangerTemp->_PowerInfo.power += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power;
                             _pTreeACPowerMangerTemp->_PowerInfo.freq = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].freq > _pTreeACPowerMangerTemp->_PowerInfo.freq ? _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].freq : _pTreeACPowerMangerTemp->_PowerInfo.freq;
                             _pTreeACPowerMangerTemp->_PowerInfo.consumption += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].consumption;
-                            nTotalYGPower += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].factor * _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power;
+                            if(_globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].factor > 0 && _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].factor <= 1)
+                                app_power = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power / _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].factor;
+                            else
+                                app_power = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power;
+                            n_power = app_power - _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power;
+                            _pTreeACPowerMangerTemp->_PowerInfo.app_power += app_power;
+                            _pTreeACPowerMangerTemp->_PowerInfo.n_power += n_power;
+
+                            //nTotalYGPower += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].factor * _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nFromIndex].power;
                         }
                     }
                     else
@@ -1207,7 +1277,24 @@ static void* power_thread(void* arg)
                             _pTreeACPowerMangerTemp->_PowerInfo.voltage = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].voltage;
                         }
                         _pTreeACPowerMangerTemp->_PowerInfo.current += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].current;
+                        float app_power  = 0;
+                        float n_power   = 0;
+                        if(_globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].factor >0 && _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].factor <= 1.0)
+                        {   
+                            app_power = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].power 
+                                                / _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].factor;
+                            n_power = app_power - _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].power;
+                        }
+                        else{
+                            app_power = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].power;
+                            n_power = 0;
+                        }
+                        
+
+
                         _pTreeACPowerMangerTemp->_PowerInfo.power += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].power;
+                        _pTreeACPowerMangerTemp->_PowerInfo.n_power +=  n_power;
+                        _pTreeACPowerMangerTemp->_PowerInfo.app_power += app_power;
                         // if (_globalTotalPowerInfo._power_info.freq != 0)
                         //  {
                         //   _pTreeACPowerMangerTemp->_PowerInfo.freq = _globalTotalPowerInfo._power_info.freq;
@@ -1215,17 +1302,17 @@ static void* power_thread(void* arg)
                         _pTreeACPowerMangerTemp->_PowerInfo.freq = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].freq > _pTreeACPowerMangerTemp->_PowerInfo.freq ? _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].freq : _pTreeACPowerMangerTemp->_PowerInfo.freq;
                         _pTreeACPowerMangerTemp->_PowerInfo.consumption += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].consumption;
                         //_pTreeACPowerMangerTemp->_PowerInfo.factor = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].factor;
-                        nTotalYGPower += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].factor * _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].power;
+                        //nTotalYGPower +=   _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].power/_globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].factor;
                     }
                 }
                 //计算每相总功率因数
-                if (_pTreeACPowerMangerTemp->_PowerInfo.power>0)
+                if (_pTreeACPowerMangerTemp->_PowerInfo.app_power>0)
                 {
-                        float nfactor=nTotalYGPower /   _pTreeACPowerMangerTemp->_PowerInfo.power;
+                        float nfactor=_pTreeACPowerMangerTemp->_PowerInfo.power/_pTreeACPowerMangerTemp->_PowerInfo.app_power;
                         if(nfactor>0&& nfactor<=1)  _pTreeACPowerMangerTemp->_PowerInfo.factor=nfactor;
-                        else _pTreeACPowerMangerTemp->_PowerInfo.factor=1;
+                        else _pTreeACPowerMangerTemp->_PowerInfo.factor=0;
                 }
-                else _pTreeACPowerMangerTemp->_PowerInfo.factor=1;
+                else _pTreeACPowerMangerTemp->_PowerInfo.factor=0;
 
                 if (_globalDeviceManager->triphasic_mmap)
                 {
@@ -1261,17 +1348,6 @@ static void* power_thread(void* arg)
                         log_d("ph_ch%d insert data error.\n", _pTreeACPowerMangerTemp->product_ch_id);
                     }
                 }
-                //更新总数据
-                // 如果存在电压则置位如果都没有电压则保持0
-                if (_pTreeACPowerMangerTemp->_PowerInfo.voltage != 0)
-                {
-                    _globalDeviceManager->_globalPowerManger._PowerInfo.voltage = _pTreeACPowerMangerTemp->_PowerInfo.voltage;
-                }
-                _globalDeviceManager->_globalPowerManger._PowerInfo.current += _pTreeACPowerMangerTemp->_PowerInfo.current;
-                _globalDeviceManager->_globalPowerManger._PowerInfo.power += _pTreeACPowerMangerTemp->_PowerInfo.power;
-                _globalDeviceManager->_globalPowerManger._PowerInfo.freq = _pTreeACPowerMangerTemp->_PowerInfo.freq > _globalDeviceManager->_globalPowerManger._PowerInfo.freq ? _pTreeACPowerMangerTemp->_PowerInfo.freq:_globalDeviceManager->_globalPowerManger._PowerInfo.freq;
-                _globalDeviceManager->_globalPowerManger._PowerInfo.consumption += _pTreeACPowerMangerTemp->_PowerInfo.consumption;
-                _globalDeviceManager->_globalPowerManger._PowerInfo.factor = _pTreeACPowerMangerTemp->_PowerInfo.factor;
                 memcpy(&__globalDeviceManage.pCtrlBoard[0]._globalPowerInManger._PowerInfo[nTreeACType],&_pTreeACPowerMangerTemp->_PowerInfo,sizeof(PowerInfo));
             }
 
@@ -1304,6 +1380,14 @@ static void* power_thread(void* arg)
                 {
                     continue;
                 }
+                if(_pTreeACPowerMangerTemp->_PowerInfo.app_power > 0 )
+                    _pTreeACPowerMangerTemp->_PowerInfo.factor = _pTreeACPowerMangerTemp->_PowerInfo.power / _pTreeACPowerMangerTemp->_PowerInfo.app_power;
+                else
+                    _pTreeACPowerMangerTemp->_PowerInfo.factor = 0;
+                _globalTotalPowerInfo._power_info.app_power += _pTreeACPowerMangerTemp->_PowerInfo.app_power;
+                _globalTotalPowerInfo._power_info.n_power +=  _pTreeACPowerMangerTemp->_PowerInfo.n_power;
+                _globalTotalPowerInfo._power_info.power +=  _pTreeACPowerMangerTemp->_PowerInfo.power;
+                
                 if (_globalDeviceManager->triphasic_mmap)
                 {
                     _globalDeviceManager->triphasic_mmap->i_total.pw_i_total[nTreeACType].i_total_consumption = _pTreeACPowerMangerTemp->_PowerInfo.consumption * 1000;

+ 3 - 1
pro/src/common.h

@@ -663,7 +663,9 @@ typedef struct
 {
     float           voltage                                     ;//电压
     float           current                                     ;//电流
-    float           power                                       ;//功率
+    float           power                                       ;//有功功率
+    float           n_power                                     ;//无功功率
+    float           app_power                                   ;//视在功率
     float           freq                                        ;//频率
     float           consumption                                 ;//耗电量
     float           factor                                      ;//功率因素    

+ 3 - 2
pro/src/json_handle.c

@@ -2741,7 +2741,7 @@ char* over_power_trend_to_json(_OverAllPwrAckInfo* _over_all_pwr_back_info)
     cJSON* cjson_data_2 = cJSON_CreateObject();
     cJSON* cjson_data_3 = cJSON_CreateObject();
 
-    cJSON* date_time_xAxis_array = cJSON_CreateArray();
+
     cJSON* date_meritorious_ydata_array = NULL ;
     cJSON* date_reactive_ydata_array = NULL ;
     cJSON* date_apparent_ydata_array = NULL ;
@@ -2764,6 +2764,7 @@ char* over_power_trend_to_json(_OverAllPwrAckInfo* _over_all_pwr_back_info)
     cJSON_AddItemToObject(cjson_data_3,"ydata",date_apparent_ydata_array);
     cJSON_AddItemToArray(cjson_typedata,cjson_data_3);
 
+    cJSON* date_time_xAxis_array = cJSON_CreateArray();
     for(int i=0;i< TOTAL_COUNT;i++)
     {  
         cJSON_AddStringToObject(date_time_xAxis_array,"",_over_all_pwr_back_info->_Power_Trend_Info.xAxis[i]);
@@ -2771,7 +2772,7 @@ char* over_power_trend_to_json(_OverAllPwrAckInfo* _over_all_pwr_back_info)
     //添加表数据
    
 
-    cJSON_AddItemToObject(cjson_typedata,"xAxis",date_time_xAxis_array);
+    cJSON_AddItemToObject(cjson_data,"xAxis",date_time_xAxis_array);
 
     cJSON_AddItemToObject(cjson_data,"typeData",cjson_typedata);
     //添加汇总

+ 3 - 3
pro/src/sqlite_handle.c

@@ -403,7 +403,7 @@ int dev_insert_power_info(sqlite3 *db,GlobalPowerInfo* _globalPowerChnInfo,int*
     if(overwrite_flag) {
         sprintf(select_sql,"UPDATE %s SET product_Index=%d,product_id=%d,product_ch_id=%d,product_ch_status=%d,"
                                           "product_ch_voltage=%.2f,product_ch_current=%.2f,product_ch_power=%.2f,product_ch_power_freq=%.2f,"
-                                          "product_ch_consumption=%.2f,product_ch_power_factor=%.2f,product_samp_time='%s' "
+                                          "product_ch_consumption=%.2f,product_ch_power_factor=%.3f,product_samp_time='%s' "
                                           "WHERE product_Index=(SELECT MIN(product_Index) FROM %s);",
                             table,
                             *nIndex,
@@ -421,7 +421,7 @@ int dev_insert_power_info(sqlite3 *db,GlobalPowerInfo* _globalPowerChnInfo,int*
                             );
     }
     else {
-        sprintf(select_sql,"INSERT INTO %s VALUES ('%s',%d,%d,%d,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%d);",
+        sprintf(select_sql,"INSERT INTO %s VALUES ('%s',%d,%d,%d,%.2f,%.2f,%.2f,%.2f,%.2f,%.3f,%d);",
                             table,
                             pInfo->samp_time,
                             pInfo->product_id,
@@ -1262,7 +1262,7 @@ int dev_search_power_AC_trend_info(sqlite3 *db,int product_id,int product_ch_id,
          _globalPowerInfo->_power_trend_info.ydata[POWER_MERITORIOUS_TYPE][i] = PowerTemp;
          _globalPowerInfo->_power_trend_info.ydata[POWER_REACTIVE_TYPE][i] = PowerTemp / PowerFactor - PowerTemp;
          _globalPowerInfo->_power_trend_info.ydata[POWER_APPARENT_TYPE][i] = PowerTemp / PowerFactor;
-         strcpy(_globalPowerInfo ->_power_trend_info.xAxis[i],pResult[(nCount-i)*ncolumn+0]);
+         strcpy(_globalPowerInfo ->_power_trend_info.xAxis[i],pResult[(nCount-i)*ncolumn+10]);
 		#if DEBUG_TEST
         sprintf(data_time_str,"2023-01-23:%d",i+4);
         strcpy(&_globalPowerInfo ->_power_trend_info.xAxis[i][0],data_time_str);

+ 21 - 0
pro/src/switch_ctrl.c

@@ -175,6 +175,16 @@ int g_switch_get_ac_single_s_all_cur_info(void* manger,int saddr,int nNumb,Power
         
         val = (data_temp[9 + Index] << 16) | data_temp[8 + Index];
         _power[i].consumption = val / 1000.0f;
+
+        if(_power[i].factor > 0 && _power[i].factor <= 1)
+        {
+            _power[i].app_power = _power[i].power / _power[i].factor;
+            _power[i].n_power = _power[i].app_power - _power[i].power;
+        }else
+        {
+            _power[i].app_power = 0;
+            _power[i].n_power = 0;
+        }
     }
 
     offset = _SWITCH_AC_SINGLE_S_STS_INFO;
@@ -272,6 +282,8 @@ int g_switch_get_dc_out_info(void* manger,int saddr,unsigned char chn,PowerInfo*
     //解功率数据
     val = (data_temp[4]<<16)|data_temp[5];
     _power->power = val;
+    _power->n_power = 0;
+    _power->app_power = _power->power;
 
     //获取开关状态
     offset = _SWITCH_DC_STS_INFO;
@@ -1924,6 +1936,15 @@ int g_switch_get_t_ac_all_out_info(void* manger,int saddr,int nNumb,PowerInfo* _
         
         val = (data_temp[13 + Index] << 16) | data_temp[12 + Index];
         _power[i].consumption = val / 1000.0f;
+        if(_power[i].factor > 0 && _power[i].factor <=1)
+        {
+            _power[i].app_power = _power[i].power / _power[i].factor;
+            _power[i].n_power = _power[i].app_power - _power[i].power;
+        }else
+        {
+            _power[i].app_power = 0;
+            _power[i].n_power = 0;
+        }
     }
     //获取通道开关状态及零线状态 
     //_SWITCH_T_AC_OUT_ENABLE +18