summaryrefslogtreecommitdiffstats
path: root/Project/Text.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Project/Text.cpp')
-rw-r--r--Project/Text.cpp441
1 files changed, 437 insertions, 4 deletions
diff --git a/Project/Text.cpp b/Project/Text.cpp
index eb94de0..f9ddb71 100644
--- a/Project/Text.cpp
+++ b/Project/Text.cpp
@@ -174,6 +174,8 @@ void Text::UpdateText(double systemPowerBase)
case UNIT_kV: {
SetText(wxString::FromDouble(voltage * baseVoltage / 1e3, m_decimalPlaces) + " kV");
} break;
+ default:
+ break;
}
} break;
case DATA_ANGLE: {
@@ -183,8 +185,10 @@ void Text::UpdateText(double systemPowerBase)
SetText(wxString::FromDouble(angle, m_decimalPlaces) + " rad");
} break;
case UNIT_DEGREE: {
- SetText(wxString::FromDouble(wxRadToDeg(angle), m_decimalPlaces) + "°");
+ SetText(wxString::FromDouble(wxRadToDeg(angle), m_decimalPlaces) + (wxString)L'\u00B0');
} break;
+ default:
+ break;
}
} break;
case DATA_SC_CURRENT: {
@@ -198,19 +202,448 @@ void Text::UpdateText(double systemPowerBase)
str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
SetText(str);
} break;
+ case UNIT_A: {
+ wxString str = "Ia = " +
+ wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) + " A";
+ str += "\nIb = " +
+ wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
+ str += "\nIc = " +
+ wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
+ SetText(str);
+ } break;
+ case UNIT_kA: {
+ wxString str = "Ia = " +
+ wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
+ str += "\nIb = " +
+ wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
+ str += "\nIc = " +
+ wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
+ SetText(str);
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case DATA_SC_VOLTAGE: {
+ double faultVoltage[3] = { std::abs(data.faultVoltage[0]), std::abs(data.faultVoltage[1]),
+ std::abs(data.faultVoltage[2]) };
+ switch(m_unit) {
+ case UNIT_PU: {
+ wxString str =
+ "Va = " + wxString::FromDouble(faultVoltage[0], m_decimalPlaces) + " p.u.";
+ str += "\nVb = " + wxString::FromDouble(faultVoltage[1], m_decimalPlaces) + " p.u.";
+ str += "\nVc = " + wxString::FromDouble(faultVoltage[2], m_decimalPlaces) + " p.u.";
+ SetText(str);
+ } break;
+ case UNIT_V: {
+ wxString str = "Va = " +
+ wxString::FromDouble(faultVoltage[0] * baseVoltage, m_decimalPlaces) + " V";
+ str += "\nVb = " +
+ wxString::FromDouble(faultVoltage[1] * baseVoltage, m_decimalPlaces) + " V";
+ str += "\nVc = " +
+ wxString::FromDouble(faultVoltage[2] * baseVoltage, m_decimalPlaces) + " V";
+ SetText(str);
+ } break;
+ case UNIT_kV: {
+ wxString str = "Va = " +
+ wxString::FromDouble(faultVoltage[0] * baseVoltage / 1e3, m_decimalPlaces) + " kV";
+ str += "\nVb = " +
+ wxString::FromDouble(faultVoltage[1] * baseVoltage / 1e3, m_decimalPlaces) + " kV";
+ str += "\nVc = " +
+ wxString::FromDouble(faultVoltage[2] * baseVoltage / 1e3, m_decimalPlaces) + " kV";
+ SetText(str);
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case DATA_SC_POWER: {
+ switch(m_unit) {
+ case UNIT_PU: {
+ SetText(wxString::FromDouble(data.scPower, m_decimalPlaces) + " p.u.");
+ } break;
+ case UNIT_VA: {
+ SetText(wxString::FromDouble(data.scPower * systemPowerBase, m_decimalPlaces) + " VA");
+ } break;
+ case UNIT_kVA: {
+ SetText(wxString::FromDouble(data.scPower * systemPowerBase / 1e3, m_decimalPlaces) +
+ " kVA");
+ } break;
+ case UNIT_MVA: {
+ SetText(wxString::FromDouble(data.scPower * systemPowerBase / 1e6, m_decimalPlaces) +
+ " MVA");
+ } break;
+ default:
+ break;
}
- }
+ } break;
+ default:
+ break;
}
}
} break;
case TYPE_SYNC_GENERATOR: {
-
+ SyncGenerator* syncGenerator = (SyncGenerator*)m_element;
+ if(syncGenerator) {
+ SyncGeneratorElectricalData data = syncGenerator->GetPUElectricalData(systemPowerBase);
+ double baseVoltage = data.nominalVoltage;
+ if(data.nominalVoltageUnit == UNIT_kV) baseVoltage *= 1e3;
+ double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
+ switch(m_dataType) {
+ case DATA_NAME: {
+ SetText(data.name);
+ } break;
+ case DATA_ACTIVE_POWER: {
+ switch(m_unit) {
+ case UNIT_PU: {
+ SetText(wxString::FromDouble(data.activePower, m_decimalPlaces) + " p.u.");
+ } break;
+ case UNIT_W: {
+ SetText(
+ wxString::FromDouble(data.activePower * systemPowerBase, m_decimalPlaces) + " W");
+ } break;
+ case UNIT_kW: {
+ SetText(
+ wxString::FromDouble(data.activePower * systemPowerBase / 1e3, m_decimalPlaces) +
+ " kW");
+ } break;
+ case UNIT_MW: {
+ SetText(
+ wxString::FromDouble(data.activePower * systemPowerBase / 1e6, m_decimalPlaces) +
+ " MW");
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case DATA_REACTIVE_POWER: {
+ switch(m_unit) {
+ case UNIT_PU: {
+ SetText(wxString::FromDouble(data.reactivePower, m_decimalPlaces) + " p.u.");
+ } break;
+ case UNIT_VAr: {
+ SetText(wxString::FromDouble(data.reactivePower * systemPowerBase, m_decimalPlaces) +
+ " VAr");
+ } break;
+ case UNIT_kVAr: {
+ SetText(
+ wxString::FromDouble(data.reactivePower * systemPowerBase / 1e3, m_decimalPlaces) +
+ " kVAr");
+ } break;
+ case UNIT_MVAr: {
+ SetText(
+ wxString::FromDouble(data.reactivePower * systemPowerBase / 1e6, m_decimalPlaces) +
+ " MVAr");
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case DATA_SC_CURRENT: {
+ double faultCurrent[3] = { std::abs(data.faultCurrent[0]), std::abs(data.faultCurrent[1]),
+ std::abs(data.faultCurrent[2]) };
+ switch(m_unit) {
+ case UNIT_PU: {
+ wxString str =
+ "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
+ str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
+ str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
+ SetText(str);
+ } break;
+ case UNIT_A: {
+ wxString str = "Ia = " +
+ wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) + " A";
+ str += "\nIb = " +
+ wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
+ str += "\nIc = " +
+ wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
+ SetText(str);
+ } break;
+ case UNIT_kA: {
+ wxString str = "Ia = " +
+ wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
+ str += "\nIb = " +
+ wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
+ str += "\nIc = " +
+ wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
+ SetText(str);
+ } break;
+ default:
+ break;
+ }
+ } break;
+ default:
+ break;
+ }
+ }
} break;
case TYPE_LINE: {
-
+ Line* line = (Line*)m_element;
+ if(line) {
+ LineElectricalData data = line->GetElectricalData();
+ double baseVoltage = data.nominalVoltage;
+ if(data.nominalVoltageUnit == UNIT_kV) baseVoltage *= 1e3;
+ double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
+ switch(m_dataType) {
+ case DATA_NAME: {
+ SetText(data.name);
+ } break;
+ case DATA_PF_ACTIVE: {
+ double activePF = std::real(data.powerFlow[m_direction]);
+ switch(m_unit) {
+ case UNIT_PU: {
+ SetText(wxString::FromDouble(activePF, m_decimalPlaces) + " p.u.");
+ } break;
+ case UNIT_W: {
+ SetText(wxString::FromDouble(activePF * systemPowerBase, m_decimalPlaces) + " W");
+ } break;
+ case UNIT_kW: {
+ SetText(
+ wxString::FromDouble(activePF * systemPowerBase / 1e3, m_decimalPlaces) + " kW");
+ } break;
+ case UNIT_MW: {
+ SetText(
+ wxString::FromDouble(activePF * systemPowerBase / 1e6, m_decimalPlaces) + " MW");
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case DATA_PF_REACTIVE: {
+ double reactivePF = std::imag(data.powerFlow[m_direction]);
+ switch(m_unit) {
+ case UNIT_PU: {
+ SetText(wxString::FromDouble(reactivePF, m_decimalPlaces) + " p.u.");
+ } break;
+ case UNIT_VAr: {
+ SetText(wxString::FromDouble(reactivePF * systemPowerBase, m_decimalPlaces) + " VAr");
+ } break;
+ case UNIT_kVAr: {
+ SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e3, m_decimalPlaces) +
+ " kVAr");
+ } break;
+ case UNIT_MVAr: {
+ SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e6, m_decimalPlaces) +
+ " MVAr");
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case DATA_PF_LOSSES: {
+ double losses = std::abs(std::real(data.powerFlow[0]) + std::real(data.powerFlow[1]));
+ switch(m_unit) {
+ case UNIT_PU: {
+ SetText(wxString::FromDouble(losses, m_decimalPlaces) + " p.u.");
+ } break;
+ case UNIT_W: {
+ SetText(wxString::FromDouble(losses * systemPowerBase, m_decimalPlaces) + " W");
+ } break;
+ case UNIT_kW: {
+ SetText(wxString::FromDouble(losses * systemPowerBase / 1e3, m_decimalPlaces) + " kW");
+ } break;
+ case UNIT_MW: {
+ SetText(wxString::FromDouble(losses * systemPowerBase / 1e6, m_decimalPlaces) + " MW");
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case DATA_PF_CURRENT: {
+ double current = std::abs(data.current[m_direction]);
+ switch(m_unit) {
+ case UNIT_PU: {
+ SetText(wxString::FromDouble(current, m_decimalPlaces) + " p.u.");
+ } break;
+ case UNIT_A: {
+ SetText(wxString::FromDouble(current * baseCurrent, m_decimalPlaces) + " A");
+ } break;
+ case UNIT_kA: {
+ SetText(wxString::FromDouble(current * baseCurrent / 1e3, m_decimalPlaces) + " kA");
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case DATA_SC_CURRENT: {
+ double faultCurrent[3] = { std::abs(data.faultCurrent[m_direction][0]),
+ std::abs(data.faultCurrent[m_direction][1]), std::abs(data.faultCurrent[m_direction][2]) };
+ switch(m_unit) {
+ case UNIT_PU: {
+ wxString str =
+ "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
+ str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
+ str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
+ SetText(str);
+ } break;
+ case UNIT_A: {
+ wxString str = "Ia = " +
+ wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) + " A";
+ str += "\nIb = " +
+ wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
+ str += "\nIc = " +
+ wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
+ SetText(str);
+ } break;
+ case UNIT_kA: {
+ wxString str = "Ia = " +
+ wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
+ str += "\nIb = " +
+ wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
+ str += "\nIc = " +
+ wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
+ SetText(str);
+ } break;
+ default:
+ break;
+ }
+ } break;
+ default:
+ break;
+ }
+ }
} break;
case TYPE_TRANSFORMER: {
+ Transformer* transformer = (Transformer*)m_element;
+ if(transformer) {
+ TransformerElectricalData data = transformer->GetElectricalData();
+ double baseVoltage[2] = { data.primaryNominalVoltage, data.secondaryNominalVoltage };
+
+ if(data.primaryNominalVoltageUnit == UNIT_kV) baseVoltage[0] *= 1e3;
+ if(data.secondaryNominalVoltageUnit == UNIT_kV) baseVoltage[1] *= 1e3;
+ double baseCurrent[2] = { systemPowerBase / (std::sqrt(3.0) * baseVoltage[0]),
+ systemPowerBase / (std::sqrt(3.0) * baseVoltage[1]) };
+ switch(m_dataType) {
+ case DATA_NAME: {
+ SetText(data.name);
+ } break;
+ case DATA_PF_ACTIVE: {
+ double activePF = std::real(data.powerFlow[m_direction]);
+ switch(m_unit) {
+ case UNIT_PU: {
+ SetText(wxString::FromDouble(activePF, m_decimalPlaces) + " p.u.");
+ } break;
+ case UNIT_W: {
+ SetText(wxString::FromDouble(activePF * systemPowerBase, m_decimalPlaces) + " W");
+ } break;
+ case UNIT_kW: {
+ SetText(
+ wxString::FromDouble(activePF * systemPowerBase / 1e3, m_decimalPlaces) + " kW");
+ } break;
+ case UNIT_MW: {
+ SetText(
+ wxString::FromDouble(activePF * systemPowerBase / 1e6, m_decimalPlaces) + " MW");
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case DATA_PF_REACTIVE: {
+ double reactivePF = std::imag(data.powerFlow[m_direction]);
+ switch(m_unit) {
+ case UNIT_PU: {
+ SetText(wxString::FromDouble(reactivePF, m_decimalPlaces) + " p.u.");
+ } break;
+ case UNIT_VAr: {
+ SetText(wxString::FromDouble(reactivePF * systemPowerBase, m_decimalPlaces) + " VAr");
+ } break;
+ case UNIT_kVAr: {
+ SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e3, m_decimalPlaces) +
+ " kVAr");
+ } break;
+ case UNIT_MVAr: {
+ SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e6, m_decimalPlaces) +
+ " MVAr");
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case DATA_PF_LOSSES: {
+ double losses = std::abs(std::real(data.powerFlow[0]) + std::real(data.powerFlow[1]));
+ switch(m_unit) {
+ case UNIT_PU: {
+ SetText(wxString::FromDouble(losses, m_decimalPlaces) + " p.u.");
+ } break;
+ case UNIT_W: {
+ SetText(wxString::FromDouble(losses * systemPowerBase, m_decimalPlaces) + " W");
+ } break;
+ case UNIT_kW: {
+ SetText(wxString::FromDouble(losses * systemPowerBase / 1e3, m_decimalPlaces) + " kW");
+ } break;
+ case UNIT_MW: {
+ SetText(wxString::FromDouble(losses * systemPowerBase / 1e6, m_decimalPlaces) + " MW");
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case DATA_PF_CURRENT: {
+ double current = std::abs(data.current[m_direction]);
+ switch(m_unit) {
+ case UNIT_PU: {
+ SetText(wxString::FromDouble(current, m_decimalPlaces) + " p.u.");
+ } break;
+ case UNIT_A: {
+ SetText(
+ wxString::FromDouble(current * baseCurrent[m_direction], m_decimalPlaces) + " A");
+ } break;
+ case UNIT_kA: {
+ SetText(
+ wxString::FromDouble(current * baseCurrent[m_direction] / 1e3, m_decimalPlaces) +
+ " kA");
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case DATA_SC_CURRENT: {
+ double faultCurrent[3] = { std::abs(data.faultCurrent[m_direction][0]),
+ std::abs(data.faultCurrent[m_direction][1]), std::abs(data.faultCurrent[m_direction][2]) };
+ switch(m_unit) {
+ case UNIT_PU: {
+ wxString str =
+ "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
+ str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
+ str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
+ SetText(str);
+ } break;
+ case UNIT_A: {
+ wxString str = "Ia = " +
+ wxString::FromDouble(faultCurrent[0] * baseCurrent[m_direction], m_decimalPlaces) +
+ " A";
+ str += "\nIb = " +
+ wxString::FromDouble(faultCurrent[1] * baseCurrent[m_direction], m_decimalPlaces) +
+ " A";
+ str += "\nIc = " +
+ wxString::FromDouble(faultCurrent[2] * baseCurrent[m_direction], m_decimalPlaces) +
+ " A";
+ SetText(str);
+ } break;
+ case UNIT_kA: {
+ wxString str = "Ia = " +
+ wxString::FromDouble(
+ faultCurrent[0] * baseCurrent[m_direction] / 1e3, m_decimalPlaces) +
+ " kA";
+ str += "\nIb = " +
+ wxString::FromDouble(
+ faultCurrent[1] * baseCurrent[m_direction] / 1e3, m_decimalPlaces) +
+ " kA";
+ str += "\nIc = " +
+ wxString::FromDouble(
+ faultCurrent[2] * baseCurrent[m_direction] / 1e3, m_decimalPlaces) +
+ " kA";
+ SetText(str);
+ } break;
+ default:
+ break;
+ }
+ } break;
+ default:
+ break;
+ }
+ }
} break;
case TYPE_LOAD: {