summaryrefslogtreecommitdiffstats
path: root/Project/Electromechanical.cpp
diff options
context:
space:
mode:
authorThales Lima Oliveira <thaleslima.ufu@gmail.com>2017-10-06 22:23:09 -0300
committerThales Lima Oliveira <thaleslima.ufu@gmail.com>2017-10-06 22:23:09 -0300
commitae9530685962e8d4d88c871ec7f5f896dd0b4a93 (patch)
tree21de2874efead27294cf39f603ff4dd858d94831 /Project/Electromechanical.cpp
parenta32372968abb2f4b3bf0472f59c18f5028d20206 (diff)
downloadPSP.git-ae9530685962e8d4d88c871ec7f5f896dd0b4a93.tar.gz
PSP.git-ae9530685962e8d4d88c871ec7f5f896dd0b4a93.tar.xz
PSP.git-ae9530685962e8d4d88c871ec7f5f896dd0b4a93.zip
Several new implementation, not working
Diffstat (limited to 'Project/Electromechanical.cpp')
-rw-r--r--Project/Electromechanical.cpp37
1 files changed, 30 insertions, 7 deletions
diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp
index 4b8a711..b925234 100644
--- a/Project/Electromechanical.cpp
+++ b/Project/Electromechanical.cpp
@@ -606,10 +606,16 @@ bool Electromechanical::InitializeDynamicElements()
// Initialize controllers
if(data.useAVR) {
if(data.avrSolver) delete data.avrSolver;
- data.avrSolver = new ControlElementSolver(data.avr, m_timeStep * m_ctrlTimeStepMultiplier, m_tolerance,
- false, std::abs(data.terminalVoltage), m_parent);
+ data.avrSolver =
+ new ControlElementSolver(data.avr, m_timeStep * m_ctrlTimeStepMultiplier, m_tolerance, m_parent);
+ data.avrSolver->SetTerminalVoltage(std::abs(data.terminalVoltage));
+ data.avrSolver->SetInitialTerminalVoltage(std::abs(data.terminalVoltage));
+ data.avrSolver->SetActivePower(dataPU.activePower);
+ data.avrSolver->SetReactivePower(dataPU.reactivePower);
+ data.avrSolver->InitializeValues(false);
if(!data.avrSolver->IsOK()) {
- m_errorMsg = _("Error on initializate the AVR of \"") + data.name + _("\".");
+ m_errorMsg = _("Error on initializate the AVR of \"") + data.name + wxT("\".\n") +
+ data.avrSolver->GetErrorMessage();
syncGenerator->SetElectricalData(data);
return false;
}
@@ -617,9 +623,16 @@ bool Electromechanical::InitializeDynamicElements()
if(data.useSpeedGovernor) {
if(data.speedGovSolver) delete data.speedGovSolver;
data.speedGovSolver = new ControlElementSolver(data.speedGov, m_timeStep * m_ctrlTimeStepMultiplier,
- m_tolerance, false, data.speed, m_parent);
+ m_tolerance, m_parent);
+ data.speedGovSolver->SetActivePower(dataPU.activePower);
+ data.speedGovSolver->SetReactivePower(dataPU.reactivePower);
+ data.speedGovSolver->SetVelocity(data.speed);
+ data.speedGovSolver->SetInitialVelocity(data.speed);
+ data.speedGovSolver->SetInitialMecPower(data.pm);
+ data.speedGovSolver->InitializeValues(false);
if(!data.speedGovSolver->IsOK()) {
- m_errorMsg = _("Error on initializate the speed governor of \"") + data.name + _("\".");
+ m_errorMsg = _("Error on initializate the speed governor of \"") + data.name + wxT("\".\n") +
+ data.speedGovSolver->GetErrorMessage();
syncGenerator->SetElectricalData(data);
return false;
}
@@ -901,12 +914,22 @@ bool Electromechanical::SolveSynchronousMachines()
SyncGenerator* syncGenerator = *it;
auto data = syncGenerator->GetElectricalData();
if(data.useAVR && data.avrSolver) {
- for(int i = 0; i < ctrlRatio; ++i) data.avrSolver->SolveNextStep(std::abs(data.terminalVoltage));
+ data.avrSolver->SetTerminalVoltage(std::abs(data.terminalVoltage));
+ data.avrSolver->SetActivePower(data.electricalPower.real());
+ data.avrSolver->SetReactivePower(data.electricalPower.imag());
+
+ for(int i = 0; i < ctrlRatio; ++i) data.avrSolver->SolveNextStep();
+
data.fieldVoltage = data.initialFieldVoltage + data.avrSolver->GetLastSolution();
}
if(data.useSpeedGovernor && data.speedGovSolver) {
- for(int i = 0; i < ctrlRatio; ++i) data.speedGovSolver->SolveNextStep(data.speed);
+ data.speedGovSolver->SetVelocity(data.speed);
+ data.speedGovSolver->SetActivePower(data.electricalPower.real());
+ data.speedGovSolver->SetReactivePower(data.electricalPower.imag());
+
+ for(int i = 0; i < ctrlRatio; ++i) data.speedGovSolver->SolveNextStep();
+
data.pm = data.speedGovSolver->GetLastSolution();
}
syncGenerator->SetElectricalData(data);