23#include "../controlElement/ControlElementContainer.h"
24#include "../controlElement/ControlElementSolver.h"
26#include "../../forms/SyncMachineForm.h"
28#include "../../editors/Workspace.h"
30#include "../../utils/PropertiesData.h"
32SyncGenerator::SyncGenerator() :
Machines() {
33 m_elementType = TYPE_SYNC_GENERATOR;
36SyncGenerator::SyncGenerator(wxString name) :
Machines()
38 m_elementType = TYPE_SYNC_GENERATOR;
40 m_electricalData.name = name;
43SyncGenerator::~SyncGenerator()
45 if (m_electricalData.avr)
delete m_electricalData.avr;
46 if (m_electricalData.speedGov)
delete m_electricalData.speedGov;
51void SyncGenerator::Init()
56 double pi = 3.14159265359;
58 for (
int i = 0; i <= numPtsSine; i++) {
59 double x = (2.0 * pi / double(numPtsSine)) *
double(i) - pi;
60 double y = std::sin(x);
61 m_sinePts.push_back(wxPoint2DDouble((x / pi) * mx, y * my));
76void SyncGenerator::DrawDCSymbol(wxGraphicsContext* gc)
const
79 std::vector<wxPoint2DDouble> sinePts;
80 for (
unsigned int i = 0; i < m_sinePts.size(); i++) { sinePts.push_back(m_sinePts[i] + m_position); }
81 gc->StrokeLines(sinePts.size(), &sinePts[0]);
84void SyncGenerator::DrawDCSymbol(wxDC& dc)
const
86 std::vector<wxPoint> sinePts;
87 wxPoint pos = wxPoint(wxRound(m_position.m_x), wxRound(m_position.m_y));
88 for (
unsigned int i = 0; i < m_sinePts.size(); i++) { sinePts.push_back(wxPoint(wxRound(m_sinePts[i].m_x), wxRound(m_sinePts[i].m_y)) + pos); }
89 dc.DrawLines(sinePts.size(), &sinePts[0]);
96 wxMenu* textMenu =
new wxMenu();
98 textMenu->Append(ID_TXT_NAME, _(
"Name"));
99 textMenu->Append(ID_TXT_ACTIVE_POWER, _(
"Active power"));
100 textMenu->Append(ID_TXT_REACTIVE_POWER, _(
"Reactive power"));
101 textMenu->Append(ID_TXT_FAULTCURRENT, _(
"Fault current"));
102 textMenu->SetClientData(menu.GetClientData());
103 menu.AppendSubMenu(textMenu, _(
"Add text"));
112 if (!ws)
return false;
114 SyncMachineForm generatorForm(parent,
this,
static_cast<int>(ws->GetProperties()->GetGeneralPropertiesData().plotLib));
115 generatorForm.SetTitle(_(
"Generator"));
116 generatorForm.CenterOnParent();
117 if (generatorForm.ShowModal() == wxID_OK) {
127 data.name = m_electricalData.name;
129 data.nominalPower = m_electricalData.nominalPower;
130 data.nominalPowerUnit = m_electricalData.nominalPowerUnit;
132 data.nominalVoltage = m_electricalData.nominalVoltage;
133 data.nominalVoltageUnit = m_electricalData.nominalVoltageUnit;
135 data.activePower = m_electricalData.activePower;
136 data.activePowerUnit = m_electricalData.activePowerUnit;
138 data.reactivePower = m_electricalData.reactivePower;
139 data.reactivePowerUnit = m_electricalData.reactivePowerUnit;
141 data.haveMaxReactive = m_electricalData.haveMaxReactive;
142 data.maxReactive = m_electricalData.maxReactive;
143 data.maxReactiveUnit = m_electricalData.maxReactiveUnit;
145 data.haveMinReactive = m_electricalData.haveMinReactive;
146 data.minReactive = m_electricalData.minReactive;
147 data.minReactiveUnit = m_electricalData.minReactiveUnit;
149 data.useMachineBase = m_electricalData.useMachineBase;
151 data.positiveResistance = m_electricalData.positiveResistance;
152 data.positiveReactance = m_electricalData.positiveReactance;
154 data.negativeResistance = m_electricalData.negativeResistance;
155 data.negativeReactance = m_electricalData.negativeReactance;
157 data.zeroResistance = m_electricalData.zeroResistance;
158 data.zeroReactance = m_electricalData.zeroReactance;
160 data.groundResistance = m_electricalData.groundResistance;
161 data.groundReactance = m_electricalData.groundReactance;
163 data.groundNeutral = m_electricalData.groundNeutral;
165 data.faultCurrent[0] = m_electricalData.faultCurrent[0];
166 data.faultCurrent[1] = m_electricalData.faultCurrent[1];
167 data.faultCurrent[2] = m_electricalData.faultCurrent[2];
170 double machineBasePower = 1.0;
171 if (data.useMachineBase) { machineBasePower = GetValueFromUnit(data.nominalPower, data.nominalPowerUnit); }
174 double activePower = GetValueFromUnit(data.activePower, data.activePowerUnit);
175 if (!m_online) activePower = 0.0;
177 if (data.useMachineBase) data.activePower = (activePower * machineBasePower) / systemPowerBase;
180 data.activePower = activePower / systemPowerBase;
185 double reactivePower = GetValueFromUnit(data.reactivePower, data.reactivePowerUnit);
186 if (!m_online) reactivePower = 0.0;
188 if (data.useMachineBase) data.reactivePower = (reactivePower * machineBasePower) / systemPowerBase;
191 data.reactivePower = reactivePower / systemPowerBase;
196 double maxReactive = GetValueFromUnit(data.maxReactive, data.maxReactiveUnit);
198 if (data.useMachineBase) data.maxReactive = (maxReactive * machineBasePower) / systemPowerBase;
201 data.maxReactive = maxReactive / systemPowerBase;
206 double minReactive = GetValueFromUnit(data.minReactive, data.minReactiveUnit);
208 if (data.useMachineBase) data.minReactive = (minReactive * machineBasePower) / systemPowerBase;
211 data.minReactive = minReactive / systemPowerBase;
215 double baseVoltage = GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
216 double systemBaseImpedance = (baseVoltage * baseVoltage) / systemPowerBase;
217 double machineBaseImpedance = (baseVoltage * baseVoltage) / machineBasePower;
220 if (data.useMachineBase) {
221 data.positiveResistance = (data.positiveResistance * machineBaseImpedance) / systemBaseImpedance;
222 data.positiveReactance = (data.positiveReactance * machineBaseImpedance) / systemBaseImpedance;
223 data.negativeResistance = (data.negativeResistance * machineBaseImpedance) / systemBaseImpedance;
224 data.negativeReactance = (data.negativeReactance * machineBaseImpedance) / systemBaseImpedance;
225 data.zeroResistance = (data.zeroResistance * machineBaseImpedance) / systemBaseImpedance;
226 data.zeroReactance = (data.zeroReactance * machineBaseImpedance) / systemBaseImpedance;
227 data.groundResistance = (data.groundResistance * machineBaseImpedance) / systemBaseImpedance;
228 data.groundReactance = (data.groundReactance * machineBaseImpedance) / systemBaseImpedance;
232 data.faultCurrent[0] = std::complex<double>(0, 0);
233 data.faultCurrent[1] = std::complex<double>(0, 0);
234 data.faultCurrent[2] = std::complex<double>(0, 0);
241 std::vector<ElectricalUnit> nominalVoltageUnit)
243 if (nominalVoltage.size() > 0) {
244 m_electricalData.nominalVoltage = nominalVoltage[0];
245 m_electricalData.nominalVoltageUnit = nominalVoltageUnit[0];
253 auto data = copy->GetElectricalData();
254 data.avrSolver.reset();
255 data.speedGovSolver.reset();
258 if (m_electricalData.avr)
260 std::vector<std::shared_ptr<ConnectionLine>> cLineList;
261 std::vector<std::shared_ptr<ControlElement>> elementList;
263 m_electricalData.avr->GetContainerCopy(elementList, cLineList);
266 avrCopy->FillContainer(elementList, cLineList);
275 if (m_electricalData.speedGov)
277 std::vector<std::shared_ptr<ConnectionLine>> cLineList;
278 std::vector<std::shared_ptr<ControlElement>> elementList;
280 m_electricalData.speedGov->GetContainerCopy(elementList, cLineList);
283 speedGovCopy->FillContainer(elementList, cLineList);
285 data.speedGov = speedGovCopy;
288 data.speedGov =
nullptr;
290 copy->SetElectricalData(data);
297 wxString tipText = m_electricalData.name;
299 double activePower = m_electricalData.activePower;
300 if (!m_online) activePower = 0.0;
301 tipText += _(
"\nP = ") + wxString::FromDouble(activePower, 5);
302 switch (m_electricalData.activePowerUnit) {
304 tipText += _(
" p.u.");
318 double reactivePower = m_electricalData.reactivePower;
319 if (!m_online) reactivePower = 0.0;
320 tipText += _(
"\nQ = ") + wxString::FromDouble(reactivePower, 5);
321 switch (m_electricalData.reactivePowerUnit) {
323 tipText += _(
" p.u.");
326 tipText += _(
" var");
329 tipText += _(
" kvar");
332 tipText += _(
" Mvar");
344 if (!m_electricalData.plotSyncMachine)
return false;
345 plotData.SetName(m_electricalData.name);
346 plotData.SetCurveType(ElementPlotData::CurveType::CT_SYNC_GENERATOR);
348 std::vector<double> absTerminalVoltage, activePower, reactivePower;
349 for (
unsigned int i = 0; i < m_electricalData.terminalVoltageVector.size(); ++i) {
350 activePower.push_back(std::real(m_electricalData.electricalPowerVector[i]));
351 reactivePower.push_back(std::imag(m_electricalData.electricalPowerVector[i]));
353 plotData.AddData(m_electricalData.terminalVoltageVector, _(
"Terminal voltage"));
354 plotData.AddData(activePower, _(
"Active power"));
355 plotData.AddData(reactivePower, _(
"Reactive power"));
356 plotData.AddData(m_electricalData.mechanicalPowerVector, _(
"Mechanical power"));
357 plotData.AddData(m_electricalData.freqVector, _(
"Frequency"));
358 plotData.AddData(m_electricalData.fieldVoltageVector, _(
"Field voltage"));
359 plotData.AddData(m_electricalData.deltaVector, _(
"Delta"));
365rapidxml::xml_node<>* SyncGenerator::SaveElement(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* elementListNode)
367 auto elementNode = XMLParser::AppendNode(doc, elementListNode,
"SyncGenerator");
368 XMLParser::SetNodeAttribute(doc, elementNode,
"ID", m_elementID);
370 SaveCADProperties(doc, elementNode);
371 auto electricalProp = XMLParser::AppendNode(doc, elementNode,
"ElectricalProperties");
372 auto isOnline = XMLParser::AppendNode(doc, electricalProp,
"IsOnline");
373 XMLParser::SetNodeValue(doc, isOnline, m_online);
374 auto name = XMLParser::AppendNode(doc, electricalProp,
"Name");
375 XMLParser::SetNodeValue(doc, name, m_electricalData.name);
376 auto nominalPower = XMLParser::AppendNode(doc, electricalProp,
"NominalPower");
377 XMLParser::SetNodeValue(doc, nominalPower, m_electricalData.nominalPower);
378 XMLParser::SetNodeAttribute(doc, nominalPower,
"UnitID",
static_cast<int>(m_electricalData.nominalPowerUnit));
379 auto nominalVoltage = XMLParser::AppendNode(doc, electricalProp,
"NominalVoltage");
380 XMLParser::SetNodeValue(doc, nominalVoltage, m_electricalData.nominalVoltage);
381 XMLParser::SetNodeAttribute(doc, nominalVoltage,
"UnitID",
static_cast<int>(m_electricalData.nominalVoltageUnit));
382 auto activePower = XMLParser::AppendNode(doc, electricalProp,
"ActivePower");
383 XMLParser::SetNodeValue(doc, activePower, m_electricalData.activePower);
384 XMLParser::SetNodeAttribute(doc, activePower,
"UnitID",
static_cast<int>(m_electricalData.activePowerUnit));
385 auto reactivePower = XMLParser::AppendNode(doc, electricalProp,
"ReactivePower");
386 XMLParser::SetNodeValue(doc, reactivePower, m_electricalData.reactivePower);
387 XMLParser::SetNodeAttribute(doc, reactivePower,
"UnitID",
static_cast<int>(m_electricalData.reactivePowerUnit));
388 auto haveMaxReactive = XMLParser::AppendNode(doc, electricalProp,
"HaveMaxReactive");
389 XMLParser::SetNodeValue(doc, haveMaxReactive, m_electricalData.haveMaxReactive);
390 auto maxReactive = XMLParser::AppendNode(doc, electricalProp,
"MaxReactive");
391 XMLParser::SetNodeValue(doc, maxReactive, m_electricalData.maxReactive);
392 XMLParser::SetNodeAttribute(doc, maxReactive,
"UnitID",
static_cast<int>(m_electricalData.maxReactiveUnit));
393 auto haveMinReactive = XMLParser::AppendNode(doc, electricalProp,
"HaveMinReactive");
394 XMLParser::SetNodeValue(doc, haveMinReactive, m_electricalData.haveMinReactive);
395 auto minReactive = XMLParser::AppendNode(doc, electricalProp,
"MinReactive");
396 XMLParser::SetNodeValue(doc, minReactive, m_electricalData.minReactive);
397 XMLParser::SetNodeAttribute(doc, minReactive,
"UnitID",
static_cast<int>(m_electricalData.minReactiveUnit));
398 auto useMachineBase = XMLParser::AppendNode(doc, electricalProp,
"UseMachineBase");
399 XMLParser::SetNodeValue(doc, useMachineBase, m_electricalData.useMachineBase);
401 auto fault = XMLParser::AppendNode(doc, electricalProp,
"Fault");
402 auto positiveResistance = XMLParser::AppendNode(doc, fault,
"PositiveResistance");
403 XMLParser::SetNodeValue(doc, positiveResistance, m_electricalData.positiveResistance);
404 auto positiveReactance = XMLParser::AppendNode(doc, fault,
"PositiveReactance");
405 XMLParser::SetNodeValue(doc, positiveReactance, m_electricalData.positiveReactance);
406 auto negativeResistance = XMLParser::AppendNode(doc, fault,
"NegativeResistance");
407 XMLParser::SetNodeValue(doc, negativeResistance, m_electricalData.negativeResistance);
408 auto negativeReactance = XMLParser::AppendNode(doc, fault,
"NegativeReactance");
409 XMLParser::SetNodeValue(doc, negativeReactance, m_electricalData.negativeReactance);
410 auto zeroResistance = XMLParser::AppendNode(doc, fault,
"ZeroResistance");
411 XMLParser::SetNodeValue(doc, zeroResistance, m_electricalData.zeroResistance);
412 auto zeroReactance = XMLParser::AppendNode(doc, fault,
"ZeroReactance");
413 XMLParser::SetNodeValue(doc, zeroReactance, m_electricalData.zeroReactance);
414 auto groundResistance = XMLParser::AppendNode(doc, fault,
"GroundResistance");
415 XMLParser::SetNodeValue(doc, groundResistance, m_electricalData.groundResistance);
416 auto groundReactance = XMLParser::AppendNode(doc, fault,
"GroundReactance");
417 XMLParser::SetNodeValue(doc, groundReactance, m_electricalData.groundReactance);
418 auto groundNeutral = XMLParser::AppendNode(doc, fault,
"GroundNeutral");
419 XMLParser::SetNodeValue(doc, groundNeutral, m_electricalData.groundNeutral);
421 auto stability = XMLParser::AppendNode(doc, electricalProp,
"Stability");
422 auto plotSyncMachine = XMLParser::AppendNode(doc, stability,
"PlotSyncMachine");
423 XMLParser::SetNodeValue(doc, plotSyncMachine, m_electricalData.plotSyncMachine);
424 auto inertia = XMLParser::AppendNode(doc, stability,
"Inertia");
425 XMLParser::SetNodeValue(doc, inertia, m_electricalData.inertia);
426 auto damping = XMLParser::AppendNode(doc, stability,
"Damping");
427 XMLParser::SetNodeValue(doc, damping, m_electricalData.damping);
428 auto useAVR = XMLParser::AppendNode(doc, stability,
"UseAVR");
429 XMLParser::SetNodeValue(doc, useAVR, m_electricalData.useAVR);
430 auto useSpeedGovernor = XMLParser::AppendNode(doc, stability,
"UseSpeedGovernor");
431 XMLParser::SetNodeValue(doc, useSpeedGovernor, m_electricalData.useSpeedGovernor);
432 auto armResistance = XMLParser::AppendNode(doc, stability,
"ArmResistance");
433 XMLParser::SetNodeValue(doc, armResistance, m_electricalData.armResistance);
434 auto potierReactance = XMLParser::AppendNode(doc, stability,
"PotierReactance");
435 XMLParser::SetNodeValue(doc, potierReactance, m_electricalData.potierReactance);
436 auto satFactor = XMLParser::AppendNode(doc, stability,
"SatFactor");
437 XMLParser::SetNodeValue(doc, satFactor, m_electricalData.satFactor);
438 auto syncXd = XMLParser::AppendNode(doc, stability,
"SyncXd");
439 XMLParser::SetNodeValue(doc, syncXd, m_electricalData.syncXd);
440 auto syncXq = XMLParser::AppendNode(doc, stability,
"SyncXq");
441 XMLParser::SetNodeValue(doc, syncXq, m_electricalData.syncXq);
442 auto transXd = XMLParser::AppendNode(doc, stability,
"TransXd");
443 XMLParser::SetNodeValue(doc, transXd, m_electricalData.transXd);
444 auto transXq = XMLParser::AppendNode(doc, stability,
"TransXq");
445 XMLParser::SetNodeValue(doc, transXq, m_electricalData.transXq);
446 auto transTd0 = XMLParser::AppendNode(doc, stability,
"TransTd0");
447 XMLParser::SetNodeValue(doc, transTd0, m_electricalData.transTd0);
448 auto transTq0 = XMLParser::AppendNode(doc, stability,
"TransTq0");
449 XMLParser::SetNodeValue(doc, transTq0, m_electricalData.transTq0);
450 auto subXd = XMLParser::AppendNode(doc, stability,
"SubXd");
451 XMLParser::SetNodeValue(doc, subXd, m_electricalData.subXd);
452 auto subXq = XMLParser::AppendNode(doc, stability,
"SubXq");
453 XMLParser::SetNodeValue(doc, subXq, m_electricalData.subXq);
454 auto subTd0 = XMLParser::AppendNode(doc, stability,
"SubTd0");
455 XMLParser::SetNodeValue(doc, subTd0, m_electricalData.subTd0);
456 auto subTq0 = XMLParser::AppendNode(doc, stability,
"SubTq0");
457 XMLParser::SetNodeValue(doc, subTq0, m_electricalData.subTq0);
459 SaveSwitchingData(doc, electricalProp);
463bool SyncGenerator::OpenElement(rapidxml::xml_node<>* elementNode, std::vector<Element*> parentList)
465 if (!OpenCADProperties(elementNode, parentList))
return false;
467 auto electricalProp = elementNode->first_node(
"ElectricalProperties");
468 if (!electricalProp)
return false;
470 SetOnline(XMLParser::GetNodeValueInt(electricalProp,
"IsOnline"));
471 m_electricalData.name = electricalProp->first_node(
"Name")->value();
472 m_electricalData.nominalPower = XMLParser::GetNodeValueDouble(electricalProp,
"NominalPower");
473 m_electricalData.nominalPowerUnit =
474 static_cast<ElectricalUnit>(XMLParser::GetAttributeValueInt(electricalProp,
"NominalPower",
"UnitID"));
475 m_electricalData.nominalVoltage = XMLParser::GetNodeValueDouble(electricalProp,
"NominalVoltage");
476 m_electricalData.nominalVoltageUnit =
477 static_cast<ElectricalUnit>(XMLParser::GetAttributeValueInt(electricalProp,
"NominalVoltage",
"UnitID"));
478 m_electricalData.activePower = XMLParser::GetNodeValueDouble(electricalProp,
"ActivePower");
479 m_electricalData.activePowerUnit =
480 static_cast<ElectricalUnit>(XMLParser::GetAttributeValueInt(electricalProp,
"ActivePower",
"UnitID"));
481 m_electricalData.reactivePower = XMLParser::GetNodeValueDouble(electricalProp,
"ReactivePower");
482 m_electricalData.reactivePowerUnit =
483 static_cast<ElectricalUnit>(XMLParser::GetAttributeValueInt(electricalProp,
"ReactivePower",
"UnitID"));
484 m_electricalData.haveMaxReactive = XMLParser::GetNodeValueInt(electricalProp,
"HaveMaxReactive");
485 m_electricalData.maxReactive = XMLParser::GetNodeValueDouble(electricalProp,
"MaxReactive");
486 m_electricalData.maxReactiveUnit =
487 static_cast<ElectricalUnit>(XMLParser::GetAttributeValueInt(electricalProp,
"MaxReactive",
"UnitID"));
488 m_electricalData.haveMinReactive = XMLParser::GetNodeValueInt(electricalProp,
"HaveMinReactive");
489 m_electricalData.minReactive = XMLParser::GetNodeValueDouble(electricalProp,
"MinReactive");
490 m_electricalData.minReactiveUnit =
491 static_cast<ElectricalUnit>(XMLParser::GetAttributeValueInt(electricalProp,
"MinReactive",
"UnitID"));
492 m_electricalData.useMachineBase = XMLParser::GetNodeValueInt(electricalProp,
"UseMachineBase");
494 auto fault = electricalProp->first_node(
"Fault");
495 if (!fault)
return false;
496 m_electricalData.positiveResistance = XMLParser::GetNodeValueDouble(fault,
"PositiveResistance");
497 m_electricalData.positiveReactance = XMLParser::GetNodeValueDouble(fault,
"PositiveReactance");
498 m_electricalData.negativeResistance = XMLParser::GetNodeValueDouble(fault,
"NegativeResistance");
499 m_electricalData.negativeReactance = XMLParser::GetNodeValueDouble(fault,
"NegativeReactance");
500 m_electricalData.zeroResistance = XMLParser::GetNodeValueDouble(fault,
"ZeroResistance");
501 m_electricalData.zeroReactance = XMLParser::GetNodeValueDouble(fault,
"ZeroReactance");
502 m_electricalData.groundResistance = XMLParser::GetNodeValueDouble(fault,
"GroundResistance");
503 m_electricalData.groundReactance = XMLParser::GetNodeValueDouble(fault,
"GroundReactance");
504 m_electricalData.groundNeutral = XMLParser::GetNodeValueInt(fault,
"GroundNeutral");
506 auto stability = electricalProp->first_node(
"Stability");
507 if (!stability)
return false;
508 m_electricalData.plotSyncMachine = XMLParser::GetNodeValueInt(stability,
"PlotSyncMachine");
509 m_electricalData.inertia = XMLParser::GetNodeValueDouble(stability,
"Inertia");
510 m_electricalData.damping = XMLParser::GetNodeValueDouble(stability,
"Damping");
511 m_electricalData.useAVR = XMLParser::GetNodeValueInt(stability,
"UseAVR");
512 m_electricalData.useSpeedGovernor = XMLParser::GetNodeValueInt(stability,
"UseSpeedGovernor");
513 m_electricalData.armResistance = XMLParser::GetNodeValueDouble(stability,
"ArmResistance");
514 m_electricalData.potierReactance = XMLParser::GetNodeValueDouble(stability,
"PotierReactance");
515 m_electricalData.satFactor = XMLParser::GetNodeValueDouble(stability,
"SatFactor");
516 m_electricalData.syncXd = XMLParser::GetNodeValueDouble(stability,
"SyncXd");
517 m_electricalData.syncXq = XMLParser::GetNodeValueDouble(stability,
"SyncXq");
518 m_electricalData.transXd = XMLParser::GetNodeValueDouble(stability,
"TransXd");
519 m_electricalData.transXq = XMLParser::GetNodeValueDouble(stability,
"TransXq");
520 m_electricalData.transTd0 = XMLParser::GetNodeValueDouble(stability,
"TransTd0");
521 m_electricalData.transTq0 = XMLParser::GetNodeValueDouble(stability,
"TransTq0");
522 m_electricalData.subXd = XMLParser::GetNodeValueDouble(stability,
"SubXd");
523 m_electricalData.subXq = XMLParser::GetNodeValueDouble(stability,
"SubXq");
524 m_electricalData.subTd0 = XMLParser::GetNodeValueDouble(stability,
"SubTd0");
525 m_electricalData.subTq0 = XMLParser::GetNodeValueDouble(stability,
"SubTq0");
527 if (!OpenSwitchingData(electricalProp))
return false;
534void SyncGenerator::SavePlotData()
536 m_electricalData.terminalVoltageVector.emplace_back(std::abs(m_electricalData.terminalVoltage));
537 m_electricalData.electricalPowerVector.emplace_back(m_electricalData.electricalPower);
538 m_electricalData.mechanicalPowerVector.emplace_back(m_electricalData.pm);
539 m_electricalData.freqVector.emplace_back(m_electricalData.speed / (2.0f * M_PI));
540 m_electricalData.fieldVoltageVector.emplace_back(m_electricalData.fieldVoltage);
541 m_electricalData.deltaVector.emplace_back(wxRadToDeg(m_electricalData.delta));
ElectricalUnit
Electrical units.
Class that can contain all control elements. Can identify (using RTTI) the elements from a generic li...
Base class of all elements of the program. This class is responsible for manage graphical and his dat...
virtual void GeneralMenuItens(wxMenu &menu)
Insert general itens to context menu.
bool SetOnline(bool online=true)
Set if the element is online or offline.
Abstract class for rotary machines power elements.
virtual void SetDynamicEvent(bool dynEvent=true)
Set if the power element have dynamic event.
Synchronous generator power element.
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
virtual bool GetPlotData(ElementPlotData &plotData, PlotStudy study=PlotStudy::STABILITY)
Fill the plot data.
virtual Element * GetCopy()
Get a the element copy.
virtual wxString GetTipText() const
Get the tip text.
virtual void SetNominalVoltage(std::vector< double > nominalVoltage, std::vector< ElectricalUnit > nominalVoltageUnit)
Set nominal voltage of the element.
virtual bool ShowForm(wxWindow *parent, Element *element, wxWindow *workspace=nullptr)
Show element data form.
This class manages the graphical and power elements. It is responsible for handling the user's intera...
std::vector< double > swTime