summaryrefslogtreecommitdiffstats
path: root/Project/Electromechanical.cpp
diff options
context:
space:
mode:
authorThales Lima Oliveira <thaleslima.ufu@gmail.com>2017-10-07 17:56:03 -0300
committerThales Lima Oliveira <thaleslima.ufu@gmail.com>2017-10-07 17:56:03 -0300
commit2552edfb5608ae15600aac38622354fe46701002 (patch)
treed7e8dfac1cb82081bc21577af8057abeec88f8d2 /Project/Electromechanical.cpp
parentae9530685962e8d4d88c871ec7f5f896dd0b4a93 (diff)
downloadPSP.git-2552edfb5608ae15600aac38622354fe46701002.tar.gz
PSP.git-2552edfb5608ae15600aac38622354fe46701002.tar.xz
PSP.git-2552edfb5608ae15600aac38622354fe46701002.zip
MIMO fully implemented
Electromechanical adjusted Some control editor bugfixes
Diffstat (limited to 'Project/Electromechanical.cpp')
-rw-r--r--Project/Electromechanical.cpp24
1 files changed, 5 insertions, 19 deletions
diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp
index b925234..909642b 100644
--- a/Project/Electromechanical.cpp
+++ b/Project/Electromechanical.cpp
@@ -513,11 +513,6 @@ bool Electromechanical::InitializeDynamicElements()
double epq = vq0 + ra * iq0 - xp * id0;
sd = 1.0 + satF * std::pow(epq, 6);
xds = (xd - xp) / sd + xp;
- /*CalculateSyncMachineSaturation(syncGenerator, id0, iq0, sq, sd, true, k);
- xqs = (xq - xp) / sq + xp;
- xds = (xd - xp) / sd + xp;
- eq0 = data.terminalVoltage + std::complex<double>(ra, xqs) * ia;
- delta = std::arg(eq0);*/
}
double ef0 = vq0 + ra * iq0 - xds * id0;
@@ -546,9 +541,6 @@ bool Electromechanical::InitializeDynamicElements()
switch(data.model) {
case Machines::SM_MODEL_1: {
- // double tranXd = data.transXd * k;
-
- // data.tranEq = data.initialFieldVoltage + (xd - tranXd) * id0;
data.tranEq = std::abs(eq0);
data.tranEd = 0.0;
@@ -612,6 +604,8 @@ bool Electromechanical::InitializeDynamicElements()
data.avrSolver->SetInitialTerminalVoltage(std::abs(data.terminalVoltage));
data.avrSolver->SetActivePower(dataPU.activePower);
data.avrSolver->SetReactivePower(dataPU.reactivePower);
+ data.avrSolver->SetVelocity(data.speed);
+ data.avrSolver->SetInitialVelocity(data.speed);
data.avrSolver->InitializeValues(false);
if(!data.avrSolver->IsOK()) {
m_errorMsg = _("Error on initializate the AVR of \"") + data.name + wxT("\".\n") +
@@ -699,7 +693,6 @@ bool Electromechanical::CalculateMachinesCurrents()
xdqs = 0.5 * (xds + xqs);
std::complex<double> y0 = std::complex<double>(ra, -xdq) / std::complex<double>(ra * ra + xd * xq, 0.0);
- // std::complex<double> iUnadjusted = y0 * e;
std::complex<double> iUnadjusted = y0 * v;
// [Ref] Arrillaga, J.; Arnold, C. P.. "Computer Modelling of Electrical Power Systems". Pg. 225-226
@@ -778,8 +771,6 @@ void Electromechanical::CalculateIntegrationConstants(SyncGenerator* syncGenerat
if(data.model == Machines::SM_MODEL_2 || data.model == Machines::SM_MODEL_3 || data.model == Machines::SM_MODEL_4 ||
data.model == Machines::SM_MODEL_5) {
data.icTranEq.m = m_timeStep / (2.0f * transTd0 + m_timeStep);
- // data.icTranEq.c = (1.0f - 2.0 * data.icTranEq.m) * data.tranEq +
- // data.icTranEq.m * (data.fieldVoltage + (syncXd - transXd) * id);
data.icTranEq.c = (1.0 - data.icTranEq.m * (1.0 + data.sd)) * data.tranEq +
data.icTranEq.m * (data.fieldVoltage + (syncXd - transXd) * id);
}
@@ -787,7 +778,6 @@ void Electromechanical::CalculateIntegrationConstants(SyncGenerator* syncGenerat
// Ed'
if(data.model == Machines::SM_MODEL_3 || data.model == Machines::SM_MODEL_4 || data.model == Machines::SM_MODEL_5) {
data.icTranEd.m = m_timeStep / (2.0f * transTq0 + m_timeStep);
- // data.icTranEd.c = (1.0f - 2.0f * data.icTranEd.m) * data.tranEd - data.icTranEd.m * (syncXq - transXq) * iq;
data.icTranEd.c =
(1.0 - data.icTranEd.m * (1.0 + data.sq)) * data.tranEd - data.icTranEd.m * (syncXq - transXq) * iq;
}
@@ -795,22 +785,17 @@ void Electromechanical::CalculateIntegrationConstants(SyncGenerator* syncGenerat
// Eq''
if(data.model == Machines::SM_MODEL_4 || data.model == Machines::SM_MODEL_5) {
data.icSubEq.m = m_timeStep / (2.0f * subTd0 + m_timeStep);
- // data.icSubEq.c =
- // (1.0f - 2.0f * data.icSubEq.m) * data.subEq + data.icSubEq.m * (data.tranEq + (transXd - subXd) * id);
data.icSubEq.c = (1.0 - data.icSubEq.m * (1.0 + data.sd)) * data.subEq +
data.icSubEq.m * (data.sd * data.tranEq + (transXd - subXd) * id);
}
// Ed''
if(data.model == Machines::SM_MODEL_4) {
data.icSubEd.m = m_timeStep / (2.0f * subTq0 + m_timeStep);
- // data.icSubEd.c = (1.0f - 2.0f * data.icSubEd.m) * data.subEd - data.icSubEd.m * (syncXq - subXq) * iq;
data.icSubEd.c =
(1.0f - data.icSubEd.m * (1.0 + data.sq)) * data.subEd - data.icSubEd.m * (syncXq - subXq) * iq;
}
if(data.model == Machines::SM_MODEL_5) {
data.icSubEd.m = m_timeStep / (2.0f * subTq0 + m_timeStep);
- // data.icSubEd.c =
- // (1.0f - 2.0f * data.icSubEd.m) * data.subEd + data.icSubEd.m * (data.tranEd - (transXq - subXq) * iq);
data.icSubEd.c = (1.0f - data.icSubEd.m * (1.0 + data.sq)) * data.subEd +
data.icSubEd.m * (data.sq * data.tranEd - (transXq - subXq) * iq);
}
@@ -917,10 +902,11 @@ bool Electromechanical::SolveSynchronousMachines()
data.avrSolver->SetTerminalVoltage(std::abs(data.terminalVoltage));
data.avrSolver->SetActivePower(data.electricalPower.real());
data.avrSolver->SetReactivePower(data.electricalPower.imag());
+ data.avrSolver->SetVelocity(data.speed);
for(int i = 0; i < ctrlRatio; ++i) data.avrSolver->SolveNextStep();
- data.fieldVoltage = data.initialFieldVoltage + data.avrSolver->GetLastSolution();
+ data.fieldVoltage = data.initialFieldVoltage + data.avrSolver->GetFieldVoltage();
}
if(data.useSpeedGovernor && data.speedGovSolver) {
@@ -930,7 +916,7 @@ bool Electromechanical::SolveSynchronousMachines()
for(int i = 0; i < ctrlRatio; ++i) data.speedGovSolver->SolveNextStep();
- data.pm = data.speedGovSolver->GetLastSolution();
+ data.pm = data.speedGovSolver->GetMechanicalPower();
}
syncGenerator->SetElectricalData(data);
}