Sfoglia il codice sorgente

1、修改三相单个通道、每相总输入的有功、无功、功率因数计算bug;

liyuezong 1 anno fa
parent
commit
4ff4d3e890
1 ha cambiato i file con 65 aggiunte e 3 eliminazioni
  1. 65 3
      pro/src/app.c

+ 65 - 3
pro/src/app.c

@@ -136,6 +136,35 @@ static void* power_thread(void* arg)
                                                     _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo,
                                                     _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerWarninginfo);
                 }
+                //计算控制板每相输入总功率因数
+                for (size_t p= 0;p < 3; p++)
+                {
+                    float nYGPower=0;
+                    float nSZPower=0;
+                    for (size_t s = 0; s< AC_SINGLE_S_MAX_CHN_NUM; s++)
+                    {
+                        if (s%3==p)
+                        {
+                            nSZPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power;
+                            nYGPower += _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].power* _globalDeviceManager->pCtrlBoard[i]._PowerInfo[s].factor;
+                        }
+                    }
+                    if (nSZPower>0)
+                    {
+                        _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[p].factor = nYGPower/nSZPower;
+                    }
+                   else  _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[p].factor = 0;
+                    
+                    if (_globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[p].factor>1)
+                    {
+                        _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[p].factor=1;
+                    }
+                    else if (_globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[p].factor<0)
+                    {
+                       _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[p].factor=0;
+                    }
+                }
+                
                 ret = g_switch_set_t_ac_alarm_missing_ph(&_globalDeviceManager->_globalRelaySampManger,
                                                          _globalDeviceManager->pCtrlBoard[i].product_saddr,
                                                          _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger.product_MissingPH);
@@ -535,6 +564,7 @@ static void* power_thread(void* arg)
                     
                     memset(&_globalPowerInfo._power_info, 0, sizeof(_globalPowerInfo._power_info));
                     int k = 0;
+                    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&&_pTreeACPowerMangerTemp->product_ph_outputStatus==2)
@@ -552,7 +582,9 @@ static void* power_thread(void* arg)
                         _globalPowerInfo._power_info.power += _pTreeACPowerMangerTemp->_PowerInfo.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;
+                       // _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;
+                       
                         if (__globalDeviceManage.triphasic_mmap)
                         {
                             __globalDeviceManage.triphasic_mmap->pw_o_chn[_chn].chn[k].o_consumption = _pTreeACPowerMangerTemp->_PowerInfo.consumption * 1000;
@@ -632,13 +664,27 @@ static void* power_thread(void* arg)
                         }
 
                     }
+                    // 计算通道总功率因数
+                    if (_globalPowerInfo._power_info.power > 0)
+                    {
+                        _globalPowerInfo._power_info.factor = nchYGpower / _globalPowerInfo._power_info.power;
+                    }
+                    else
+                    {
+                        _globalPowerInfo._power_info.factor = 0;
+                    }
+                    if (_globalPowerInfo._power_info.factor > 1)
+                        _globalPowerInfo._power_info.factor = 1;
+                    else if (_globalPowerInfo._power_info.factor < 0)
+                        _globalPowerInfo._power_info.factor = 0;
 
+                    // 计算总电源信息
                     _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.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._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 ;
@@ -816,6 +862,10 @@ static void* power_thread(void* arg)
                         }
                         _powerDsManageTemp->ds_is_triggered = 1;
                         dev_update_power_ds(__globalDeviceManage.db, _globalPowerMangerTemp->product_id, _globalPowerMangerTemp->product_ch_id, _powerDsManageTemp);
+                       
+                        char strLog[200];
+                         sprintf(strLog, "CH%d ", _globalPowerMangerTemp->product_ch_id);
+                        dev_Alarm_Run_message(_globalDeviceManager,strLog,"scheduled task triggered!");
                     }
                 }                
             }
@@ -849,6 +899,8 @@ static void* power_thread(void* arg)
                 }
                 memset(&_globalDeviceManager->_globalPowerManger._PowerInfo, 0, sizeof(PowerInfo));      
                 memset(&_pTreeACPowerMangerTemp->_PowerInfo, 0, sizeof(_globalPowerInfo._power_info));
+
+                float nTotalYGPower=0;//相总的有功功率
                 for (size_t i = 0; i <= _globalDeviceManager->brdMax; i++)
                 {
                     if (_globalDeviceManager->pCtrlBoard[i].product_saddr == 0 || _globalDeviceManager->pCtrlBoard[i].product_type != TREE_AC_TYPE)
@@ -868,8 +920,18 @@ 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;
+                    //_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;
                 }
+                //计算每相总功率因数
+                if (_pTreeACPowerMangerTemp->_PowerInfo.power>0)
+                {
+                        float nfactor=nTotalYGPower /   _pTreeACPowerMangerTemp->_PowerInfo.power;
+                        if(nfactor>0&& nfactor<=1)  _pTreeACPowerMangerTemp->_PowerInfo.factor=nfactor;
+                        else _pTreeACPowerMangerTemp->_PowerInfo.factor=1;
+                }
+                else _pTreeACPowerMangerTemp->_PowerInfo.factor=1;
+
                 if (_globalDeviceManager->triphasic_mmap)
                 {
                     _globalDeviceManager->triphasic_mmap->i_total.pw_i_total[nTreeACType].i_total_consumption = _pTreeACPowerMangerTemp->_PowerInfo.consumption * 1000;