From 91b9c3f9909955443e74dedb248fc48fa984709b Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Sat, 9 Sep 2017 19:11:41 -0300 Subject: Data report fully implemented --- Project/Fault.cpp | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) (limited to 'Project/Fault.cpp') diff --git a/Project/Fault.cpp b/Project/Fault.cpp index d39e649..40b03d7 100644 --- a/Project/Fault.cpp +++ b/Project/Fault.cpp @@ -8,6 +8,7 @@ Fault::Fault(std::vector elementList) { GetElementsFromList(elementLis Fault::~Fault() {} bool Fault::RunFaultCalculation(double systemPowerBase) { + m_systemPowerBase = systemPowerBase; int numberOfBuses = static_cast(m_busList.size()); if(numberOfBuses == 0) { m_errorMsg = _("There is no buses in the system."); @@ -199,13 +200,14 @@ void Fault::UpdateElementsFault(double systemPowerBase) int n1 = static_cast(line->GetParentList()[0])->GetElectricalData().number; int n2 = static_cast(line->GetParentList()[1])->GetElectricalData().number; auto data = line->GetElectricalData(); + auto puData = line->GetPUElectricalData(m_systemPowerBase); std::complex vPos[2] = {m_posFaultVoltagePos[n1], m_posFaultVoltagePos[n2]}; std::complex vNeg[2] = {m_posFaultVoltageNeg[n1], m_posFaultVoltageNeg[n2]}; std::complex vZero[2] = {m_posFaultVoltageZero[n1], m_posFaultVoltageZero[n2]}; - std::complex zPos(data.resistance, data.indReactance); - std::complex bPos(0.0, data.capSusceptance / 2.0); - std::complex zZero(data.zeroResistance, data.zeroIndReactance); - std::complex bZero(0.0, data.zeroCapSusceptance / 2.0); + std::complex zPos(puData.resistance, puData.indReactance); + std::complex bPos(0.0, puData.capSusceptance / 2.0); + std::complex zZero(puData.zeroResistance, puData.zeroIndReactance); + std::complex bZero(0.0, puData.zeroCapSusceptance / 2.0); std::complex lineCurrentPos[2]; std::complex lineCurrentNeg[2]; @@ -235,12 +237,13 @@ void Fault::UpdateElementsFault(double systemPowerBase) int n1 = static_cast(transformer->GetParentList()[0])->GetElectricalData().number; int n2 = static_cast(transformer->GetParentList()[1])->GetElectricalData().number; auto data = transformer->GetElectricalData(); + auto puData = transformer->GetPUElectricalData(m_systemPowerBase); std::complex vPos[2] = {m_posFaultVoltagePos[n1], m_posFaultVoltagePos[n2]}; std::complex vNeg[2] = {m_posFaultVoltageNeg[n1], m_posFaultVoltageNeg[n2]}; std::complex vZero[2] = {m_posFaultVoltageZero[n1], m_posFaultVoltageZero[n2]}; - std::complex zPos(data.resistance, data.indReactance); - std::complex zZero(data.zeroResistance, data.zeroIndReactance); + std::complex zPos(puData.resistance, puData.indReactance); + std::complex zZero(puData.zeroResistance, puData.zeroIndReactance); std::complex transformerCurrentPos[2]; std::complex transformerCurrentNeg[2]; @@ -312,26 +315,31 @@ void Fault::UpdateElementsFault(double systemPowerBase) int n = bus->GetElectricalData().number; std::complex v = bus->GetElectricalData().voltage; // Pre-fault voltage. auto data = syncGenerator->GetElectricalData(); + auto puData = syncGenerator->GetPUElectricalData(m_systemPowerBase); std::complex vPos = m_posFaultVoltagePos[n]; std::complex vNeg = m_posFaultVoltageNeg[n]; std::complex vZero = m_posFaultVoltageZero[n]; - std::complex zPos(data.positiveResistance, data.positiveReactance); - std::complex zNeg(data.negativeResistance, data.negativeReactance); - std::complex zZero(data.zeroResistance + 3.0 * data.groundResistance, - data.negativeReactance + 3.0 * data.groundReactance); + std::complex zPos(puData.positiveResistance, puData.positiveReactance); + std::complex zNeg(puData.negativeResistance, puData.negativeReactance); + std::complex zZero(puData.zeroResistance + 3.0 * puData.groundResistance, + puData.zeroReactance + 3.0 * puData.groundReactance); - std::complex syncGeneratorCurrentPos = (v - vPos) / zPos; + // Internal voltage + std::complex i = std::complex(puData.activePower, -puData.reactivePower) / std::conj(v); + std::complex e = v + zPos * i; + + std::complex syncGeneratorCurrentPos = (e - vPos) / zPos; std::complex syncGeneratorCurrentNeg = (-vNeg) / zNeg; std::complex syncGeneratorCurrentZero(0.0, 0.0); if(data.groundNeutral) syncGeneratorCurrentZero = (-vZero) / zZero; - data.faultCurrent[0] = syncGeneratorCurrentPos + syncGeneratorCurrentNeg + syncGeneratorCurrentZero; + data.faultCurrent[0] = syncGeneratorCurrentZero + syncGeneratorCurrentPos + syncGeneratorCurrentNeg; data.faultCurrent[1] = - syncGeneratorCurrentPos + a2 * syncGeneratorCurrentNeg + a * syncGeneratorCurrentZero; + syncGeneratorCurrentZero + a2 * syncGeneratorCurrentPos + a * syncGeneratorCurrentNeg; data.faultCurrent[2] = - syncGeneratorCurrentPos + a * syncGeneratorCurrentNeg + a2 * syncGeneratorCurrentZero; + syncGeneratorCurrentZero + a * syncGeneratorCurrentPos + a2 * syncGeneratorCurrentNeg; syncGenerator->SetElectricalData(data); } @@ -344,15 +352,16 @@ void Fault::UpdateElementsFault(double systemPowerBase) int n = bus->GetElectricalData().number; std::complex v = bus->GetElectricalData().voltage; // Pre-fault voltage. auto data = syncMotor->GetElectricalData(); + auto puData = syncMotor->GetPUElectricalData(m_systemPowerBase); std::complex vPos = m_posFaultVoltagePos[n]; std::complex vNeg = m_posFaultVoltageNeg[n]; std::complex vZero = m_posFaultVoltageZero[n]; - std::complex zPos(data.positiveResistance, data.positiveReactance); - std::complex zNeg(data.negativeResistance, data.negativeReactance); - std::complex zZero(data.zeroResistance + 3.0 * data.groundResistance, - data.negativeReactance + 3.0 * data.groundReactance); + std::complex zPos(puData.positiveResistance, puData.positiveReactance); + std::complex zNeg(puData.negativeResistance, puData.negativeReactance); + std::complex zZero(puData.zeroResistance + 3.0 * puData.groundResistance, + puData.zeroReactance + 3.0 * puData.groundReactance); std::complex syncGeneratorCurrentPos = (v - vPos) / zPos; std::complex syncGeneratorCurrentNeg = (-vNeg) / zNeg; -- cgit