diff options
Diffstat (limited to 'Project')
-rw-r--r-- | Project/ElectricCalculation.cpp | 105 | ||||
-rw-r--r-- | Project/Project.mk | 2 | ||||
-rw-r--r-- | Project/Release/ElectricCalculation.cpp.o | bin | 67277 -> 67619 bytes | |||
-rw-r--r-- | Project/Release/PSP-UFU.exe | bin | 4077528 -> 4078040 bytes |
4 files changed, 65 insertions, 42 deletions
diff --git a/Project/ElectricCalculation.cpp b/Project/ElectricCalculation.cpp index 569a31e..3c4c1e5 100644 --- a/Project/ElectricCalculation.cpp +++ b/Project/ElectricCalculation.cpp @@ -352,52 +352,75 @@ void ElectricCalculation::UpdateElementsPowerFlow(std::vector<std::complex<doubl } // Set the sync motor reactive power - for(auto itmg = syncMotorsOnBus.begin(); itmg != syncMotorsOnBus.end(); itmg++) { - SyncMotor* syncMotor = *itmg; - if(syncMotor->IsOnline()) { - SyncMotorElectricalData childData = syncMotor->GetElectricalData(); - - if(busType[i] == BUS_PV || busType[i] == BUS_SLACK) { - // double reactivePower = (power[i].imag() + loadPower.imag()) * systemPowerBase / - // (double)(syncGeneratorsOnBus.size() + syncMotorsOnBus.size()); - - SyncMotorElectricalData childData_PU = syncMotor->GetPUElectricalData(systemPowerBase); - - double reactivePower = (power[i].imag() + loadPower.imag()) * systemPowerBase; - - // Bus reachd maximum reactive limit. - if(reactiveLimit[i].limitReached == RL_MAX_REACHED) - reactivePower *= (childData_PU.maxReactive / reactiveLimit[i].maxLimit); - // Bus reached minimum reactive limit. - else if(reactiveLimit[i].limitReached == RL_MIN_REACHED) - reactivePower *= (childData_PU.minReactive / reactiveLimit[i].minLimit); - // Bus didn't reach any limits - else { - reactivePower /= (double)(syncGeneratorsOnBus.size() + syncMotorsOnBus.size()); + double exceededReactive = 0.0; + int numMachines = syncGeneratorsOnBus.size() + syncMotorsOnBus.size(); + for(auto itsm = syncMotorsOnBus.begin(); itsm != syncMotorsOnBus.end(); itsm++) { + SyncMotor* syncMotor = *itsm; + SyncMotorElectricalData childData = syncMotor->GetElectricalData(); + + bool reachedMachineLimit = false; + + if(busType[i] == BUS_PV || busType[i] == BUS_SLACK) { + // double reactivePower = (power[i].imag() + loadPower.imag()) * systemPowerBase / + // (double)(syncGeneratorsOnBus.size() + syncMotorsOnBus.size()); + + SyncMotorElectricalData childData_PU = syncMotor->GetPUElectricalData(systemPowerBase); + + double reactivePower = power[i].imag() + loadPower.imag(); + + // Bus reachd maximum reactive limit. + if(reactiveLimit[i].limitReached == RL_MAX_REACHED) + reactivePower *= (childData_PU.maxReactive / reactiveLimit[i].maxLimit); + // Bus reached minimum reactive limit. + else if(reactiveLimit[i].limitReached == RL_MIN_REACHED) + reactivePower *= (childData_PU.minReactive / reactiveLimit[i].minLimit); + // Bus didn't reach any limits + else { + reactivePower /= (double)(numMachines); + if(childData_PU.haveMaxReactive && (reactivePower > childData_PU.maxReactive)) { + exceededReactive += reactivePower - childData_PU.maxReactive; + reactivePower = childData_PU.maxReactive; + reachedMachineLimit = true; + } else if(childData_PU.haveMinReactive && (reactivePower < childData_PU.minReactive)) { + exceededReactive += reactivePower - childData_PU.minReactive; + reactivePower = childData_PU.minReactive; + reachedMachineLimit = true; + } else if((!childData_PU.haveMaxReactive && reactiveLimit[i].limitReached == RL_MAX_REACHED) || + (!childData_PU.haveMinReactive && reactiveLimit[i].limitReached == RL_MIN_REACHED) || + (!childData_PU.haveMaxReactive && !childData_PU.haveMaxReactive)) { + reactivePower += exceededReactive; + exceededReactive = 0.0; } + } - switch(childData.reactivePowerUnit) { - case UNIT_PU: { - reactivePower /= systemPowerBase; - } break; - case UNIT_kVAr: { - reactivePower /= 1e3; - } break; - case UNIT_MVAr: { - reactivePower /= 1e6; - } break; - default: - break; - } - childData.reactivePower = reactivePower; + reactivePower *= systemPowerBase; + + switch(childData.reactivePowerUnit) { + case UNIT_PU: { + reactivePower /= systemPowerBase; + } break; + case UNIT_kVAr: { + reactivePower /= 1e3; + } break; + case UNIT_MVAr: { + reactivePower /= 1e6; + } break; + default: + break; } + childData.reactivePower = reactivePower; + } - if(childData.activePower > 0.0) - syncMotor->SetPowerFlowDirection(PF_TO_ELEMENT); - else - syncMotor->SetPowerFlowDirection(PF_TO_BUS); + if(childData.activePower > 0.0) + syncMotor->SetPowerFlowDirection(PF_TO_ELEMENT); + else + syncMotor->SetPowerFlowDirection(PF_TO_BUS); + + syncMotor->SetElectricalData(childData); - syncMotor->SetElectricalData(childData); + if(reachedMachineLimit) { + syncMotorsOnBus.erase(itsm); + itsm = syncMotorsOnBus.begin(); } } } diff --git a/Project/Project.mk b/Project/Project.mk index b867df6..02c8ea2 100644 --- a/Project/Project.mk +++ b/Project/Project.mk @@ -13,7 +13,7 @@ CurrentFileName := CurrentFilePath := CurrentFileFullPath := User :=Thales -Date :=09/11/2016 +Date :=10/11/2016 CodeLitePath :="C:/Program Files/CodeLite" LinkerName :=C:/TDM-GCC-64/bin/g++.exe SharedObjectLinkerName :=C:/TDM-GCC-64/bin/g++.exe -shared -fPIC diff --git a/Project/Release/ElectricCalculation.cpp.o b/Project/Release/ElectricCalculation.cpp.o Binary files differindex 031db17..bcf3329 100644 --- a/Project/Release/ElectricCalculation.cpp.o +++ b/Project/Release/ElectricCalculation.cpp.o diff --git a/Project/Release/PSP-UFU.exe b/Project/Release/PSP-UFU.exe Binary files differindex 2104334..74c25d7 100644 --- a/Project/Release/PSP-UFU.exe +++ b/Project/Release/PSP-UFU.exe |