diff options
Diffstat (limited to 'Project/Electromechanical.cpp')
-rw-r--r-- | Project/Electromechanical.cpp | 54 |
1 files changed, 31 insertions, 23 deletions
diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp index 4988382..4c8d3c1 100644 --- a/Project/Electromechanical.cpp +++ b/Project/Electromechanical.cpp @@ -27,7 +27,8 @@ bool Electromechanical::RunStabilityCalculation() Bus* bus = *it; auto data = bus->GetElectricalData(); m_vBus[data.number] = data.voltage; - str += wxString::Format("%f /_ %f\n", std::abs(m_vBus[data.number]), std::arg(m_vBus[data.number]) * 180.0f / M_PI); + str += wxString::Format("%f /_ %f\n", std::abs(m_vBus[data.number]), + std::arg(m_vBus[data.number]) * 180.0f / M_PI); } wxMessageBox(str); @@ -435,15 +436,15 @@ 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; + // 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); + // vq0 = std::abs(data.terminalVoltage) * cos(data.delta - teta0); + // vd0 = -std::abs(data.terminalVoltage) * sin(data.delta - teta0); double fi0 = std::arg(ia); double id0, iq0; - //ABCtoDQ0(ia, data.delta - fi0, 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); @@ -588,6 +589,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))); double dVR = std::real(e) - std::real(v); double dVI = std::imag(e) - std::imag(v); @@ -602,7 +604,9 @@ void Electromechanical::CalculateMachinesCurrents() std::complex<double> iMachine = iInj - 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); } @@ -681,13 +685,12 @@ bool Electromechanical::SolveSynchronousMachines() error = 0.0; // Calculate the injected currents. - //wxMessageBox(wxString::Format("%f %f", m_iBus[0].real(), m_iBus[0].imag())); + // wxMessageBox(wxString::Format("%f %f", m_iBus[0].real(), m_iBus[0].imag())); CalculateMachinesCurrents(); - //wxMessageBox(wxString::Format("%f %f", m_iBus[0].real(), m_iBus[0].imag())); - + // wxMessageBox(wxString::Format("%f %f", m_iBus[0].real(), m_iBus[0].imag())); + // Calculate the buses voltages. m_vBus = LUEvaluate(m_yBusU, m_yBusL, m_iBus); - // Solve machine equations. for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) { @@ -722,19 +725,8 @@ 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 = pe; // Don't extrapolating Pe. - - // Solve controllers. - if(data.useAVR && data.avrSolver) { - data.avrSolver->SolveNextStep(std::abs(data.terminalVoltage)); - data.fieldVoltage = data.initialFieldVoltage + data.avrSolver->GetLastSolution(); - } - - if(data.useSpeedGovernor && data.speedGovSolver) { - data.speedGovSolver->SolveNextStep(data.speed); - data.pm = data.speedGovSolver->GetLastSolution(); - } + //data.pe = (2 * pe - data.pe); // Extrapolating Pe. + data.pe = pe; // Don't extrapolating Pe // Electrical differential equations switch(GetMachineModel(syncGenerator)) { @@ -778,6 +770,22 @@ bool Electromechanical::SolveSynchronousMachines() } } + // Solve controllers. + for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) { + SyncGenerator* syncGenerator = *it; + auto data = syncGenerator->GetElectricalData(); + if(data.useAVR && data.avrSolver) { + data.avrSolver->SolveNextStep(std::abs(data.terminalVoltage)); + data.fieldVoltage = data.initialFieldVoltage + data.avrSolver->GetLastSolution(); + } + + if(data.useSpeedGovernor && data.speedGovSolver) { + data.speedGovSolver->SolveNextStep(data.speed); + data.pm = data.speedGovSolver->GetLastSolution(); + } + syncGenerator->SetElectricalData(data); + } + return true; } |