summaryrefslogtreecommitdiffstats
path: root/Project/Electromechanical.cpp
diff options
context:
space:
mode:
authorThales Lima Oliveira <thaleslima.ufu@gmail.com>2017-05-27 17:25:43 -0300
committerThales Lima Oliveira <thaleslima.ufu@gmail.com>2017-05-27 17:25:43 -0300
commitbee32c0b8432c0a849baa57a1897eab936894af9 (patch)
tree3d5af68159cf66da26e659bf07e25f20afeeb895 /Project/Electromechanical.cpp
parent5df0b53a01acfa3e41b0e106426fa874f6af81f7 (diff)
downloadPSP.git-bee32c0b8432c0a849baa57a1897eab936894af9.tar.gz
PSP.git-bee32c0b8432c0a849baa57a1897eab936894af9.tar.xz
PSP.git-bee32c0b8432c0a849baa57a1897eab936894af9.zip
More bugfixes
If xd' is different of xq' the calculations fail
Diffstat (limited to 'Project/Electromechanical.cpp')
-rw-r--r--Project/Electromechanical.cpp43
1 files changed, 23 insertions, 20 deletions
diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp
index 4c8d3c1..654f5d5 100644
--- a/Project/Electromechanical.cpp
+++ b/Project/Electromechanical.cpp
@@ -42,7 +42,7 @@ bool Electromechanical::RunStabilityCalculation()
wxMessageBox(str);
if(!InitializeDynamicElements()) return false;
-
+
// test
double simTime = 10.0;
double printTime = 0.01;
@@ -397,14 +397,12 @@ std::complex<double> Electromechanical::GetSyncMachineAdmittance(SyncGenerator*
case SM_MODEL_3: {
xd = data.transXd * k;
xq = data.transXq * k;
- break;
- }
+ } break;
case SM_MODEL_4:
case SM_MODEL_5: {
xd = data.subXd * k;
xq = data.subXq * k;
- break;
- }
+ } break;
}
double xdq = 0.5 * (xd + xq);
return (std::complex<double>(ra, -xdq) / std::complex<double>(ra * ra + xd * xq, 0.0));
@@ -436,17 +434,17 @@ bool Electromechanical::InitializeDynamicElements()
std::complex<double> eq0 = data.terminalVoltage + std::complex<double>(ra, xq) * ia;
data.delta = std::arg(eq0);
- // double teta0 = std::arg(data.terminalVoltage);
- // double vd0, vq0;
- // ABCtoDQ0(data.terminalVoltage, data.delta - teta0, vd0, vq0);
- // vq0 = std::abs(data.terminalVoltage) * cos(data.delta - teta0);
- // vd0 = -std::abs(data.terminalVoltage) * sin(data.delta - teta0);
+ double teta0 = std::arg(data.terminalVoltage);
+ double vd0, vq0;
+ ABCtoDQ0(data.terminalVoltage, data.delta - teta0, vd0, vq0);
+ vq0 = std::abs(data.terminalVoltage) * std::cos(data.delta - teta0);
+ vd0 = -std::abs(data.terminalVoltage) * std::sin(data.delta - teta0);
double fi0 = std::arg(ia);
double id0, iq0;
// ABCtoDQ0(ia, data.delta - fi0, id0, iq0);
- iq0 = std::abs(ia) * cos(data.delta - fi0);
- id0 = -std::abs(ia) * sin(data.delta - fi0);
+ iq0 = std::abs(ia) * std::cos(data.delta - fi0);
+ id0 = -std::abs(ia) * std::sin(data.delta - fi0);
data.initialFieldVoltage = std::abs(eq0) - (xd - xq) * id0;
data.fieldVoltage = data.initialFieldVoltage;
@@ -480,6 +478,13 @@ bool Electromechanical::InitializeDynamicElements()
data.tranEq = data.initialFieldVoltage + (xd - tranXd) * id0;
data.tranEd = -(xq - tranXq) * iq0;
+
+ // data.tranEq = vq0 + ra * iq0 - tranXd * id0;
+ // data.tranEd = vd0 + ra * id0 - tranXq * iq0;
+
+ // data.tranEq = data.initialFieldVoltage;
+ // data.tranEd =
+
data.subEd = 0.0;
data.subEq = 0.0;
} break;
@@ -504,9 +509,8 @@ bool Electromechanical::InitializeDynamicElements()
data.subEq = data.tranEq + (tranXd - subXd) * id0;
data.subEd = data.tranEd + (tranXq - subXq) * iq0;
} break;
- default: {
+ default:
break;
- }
}
// Initialize controllers
@@ -589,7 +593,7 @@ void Electromechanical::CalculateMachinesCurrents()
std::complex<double> y0 = std::complex<double>(ra, -xdq) / std::complex<double>(ra * ra + xd * xq, 0.0);
std::complex<double> iUnadj = y0 * e;
- wxMessageBox(wxString::Format("%f / %f\n", std::real(iUnadj), std::imag(iUnadj)));
+ // wxMessageBox(wxString::Format("%f / %f\n", data.tranEd, data.tranEq));
double dVR = std::real(e) - std::real(v);
double dVI = std::imag(e) - std::imag(v);
@@ -603,10 +607,9 @@ void Electromechanical::CalculateMachinesCurrents()
m_iBus[n] += iInj;
std::complex<double> iMachine = iInj - y0 * v;
+ //std::complex<double> iMachine = iUnadj - y0 * v;
- //wxMessageBox(wxString::Format("%f /_ %f\n", std::real(data.electricalPower), std::imag(data.electricalPower)));
data.electricalPower = v * std::conj(iMachine);
- //wxMessageBox(wxString::Format("%f /_ %f\n", std::real(data.electricalPower), std::imag(data.electricalPower)));
} else {
data.electricalPower = std::complex<double>(0.0, 0.0);
}
@@ -725,7 +728,7 @@ bool Electromechanical::SolveSynchronousMachines()
ABCtoDQ0(data.terminalVoltage, data.delta, vd, vq);
double pe = id * vd + iq * vq + (id * id + iq * iq) * data.armResistance * k;
- //data.pe = (2 * pe - data.pe); // Extrapolating Pe.
+ // data.pe = (2 * pe - data.pe); // Extrapolating Pe.
data.pe = pe; // Don't extrapolating Pe
// Electrical differential equations
@@ -836,11 +839,11 @@ void Electromechanical::SaveData()
auto data = syncGenerator->GetElectricalData();
if(data.plotSyncMachine) {
data.terminalVoltageVector.push_back(data.terminalVoltage);
- data.electricalPowerVector.push_back(data.pe);
+ data.electricalPowerVector.push_back(data.electricalPower);
data.mechanicalPowerVector.push_back(data.pm);
data.freqVector.push_back(data.speed / (2.0f * M_PI));
data.fieldVoltageVector.push_back(data.fieldVoltage);
- data.deltaVector.push_back(data.delta);
+ data.deltaVector.push_back(wxRadToDeg(data.delta));
syncGenerator->SetElectricalData(data);
}
}