summaryrefslogtreecommitdiffstats
path: root/Project/IndMotor.cpp
diff options
context:
space:
mode:
authorThales Lima Oliveira <thaleslima.ufu@gmail.com>2019-07-18 09:22:27 -0300
committerGitHub <noreply@github.com>2019-07-18 09:22:27 -0300
commit8357c081eb75147bb8f94d8b6e367d88ea3898ed (patch)
tree9d9726fdcefb917475d6b33344d2b832d4e78ef8 /Project/IndMotor.cpp
parent295b775ad53eb1e128b705e6028f9690dc6fa640 (diff)
parent7f46d390b8cc1d5f37560f52b222198dbc5e1225 (diff)
downloadPSP.git-8357c081eb75147bb8f94d8b6e367d88ea3898ed.tar.gz
PSP.git-8357c081eb75147bb8f94d8b6e367d88ea3898ed.tar.xz
PSP.git-8357c081eb75147bb8f94d8b6e367d88ea3898ed.zip
Merge pull request #50 from Thales1330/wip/induction-motor
Wip/induction motor
Diffstat (limited to 'Project/IndMotor.cpp')
-rw-r--r--Project/IndMotor.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/Project/IndMotor.cpp b/Project/IndMotor.cpp
index e8008dd..13e9b4d 100644
--- a/Project/IndMotor.cpp
+++ b/Project/IndMotor.cpp
@@ -151,17 +151,53 @@ rapidxml::xml_node<>* IndMotor::SaveElement(rapidxml::xml_document<>& doc, rapid
SaveCADProperties(doc, elementNode);
// Element properties
+ // General
auto electricalProp = XMLParser::AppendNode(doc, elementNode, "ElectricalProperties");
auto isOnline = XMLParser::AppendNode(doc, electricalProp, "IsOnline");
XMLParser::SetNodeValue(doc, isOnline, m_online);
auto name = XMLParser::AppendNode(doc, electricalProp, "Name");
XMLParser::SetNodeValue(doc, name, m_electricalData.name);
+ auto ratedPower = XMLParser::AppendNode(doc, electricalProp, "RatedPower");
+ XMLParser::SetNodeValue(doc, ratedPower, m_electricalData.ratedPower);
+ XMLParser::SetNodeAttribute(doc, ratedPower, "UnitID", m_electricalData.activePowerUnit);
auto activePower = XMLParser::AppendNode(doc, electricalProp, "ActivePower");
XMLParser::SetNodeValue(doc, activePower, m_electricalData.activePower);
XMLParser::SetNodeAttribute(doc, activePower, "UnitID", m_electricalData.activePowerUnit);
auto reactivePower = XMLParser::AppendNode(doc, electricalProp, "ReactivePower");
XMLParser::SetNodeValue(doc, reactivePower, m_electricalData.reactivePower);
XMLParser::SetNodeAttribute(doc, reactivePower, "UnitID", m_electricalData.reactivePowerUnit);
+ auto useMachineBase = XMLParser::AppendNode(doc, electricalProp, "UseMachineBase");
+ XMLParser::SetNodeValue(doc, useMachineBase, m_electricalData.useMachinePowerAsBase);
+
+ // Stability
+ auto stability = XMLParser::AppendNode(doc, electricalProp, "Stability");
+ auto plotMotor = XMLParser::AppendNode(doc, stability, "PlotIndMachine");
+ XMLParser::SetNodeValue(doc, plotMotor, m_electricalData.plotIndMachine);
+ auto inertia = XMLParser::AppendNode(doc, stability, "Inertia");
+ XMLParser::SetNodeValue(doc, inertia, m_electricalData.inertia);
+ auto r1 = XMLParser::AppendNode(doc, stability, "StatorResistence");
+ XMLParser::SetNodeValue(doc, r1, m_electricalData.r1);
+ auto x1 = XMLParser::AppendNode(doc, stability, "StatorReactance");
+ XMLParser::SetNodeValue(doc, x1, m_electricalData.x1);
+ auto r2 = XMLParser::AppendNode(doc, stability, "RotorResistence");
+ XMLParser::SetNodeValue(doc, r2, m_electricalData.r2);
+ auto x2 = XMLParser::AppendNode(doc, stability, "RotorReactance");
+ XMLParser::SetNodeValue(doc, x2, m_electricalData.x2);
+ auto xm = XMLParser::AppendNode(doc, stability, "MagnetizingReactance");
+ XMLParser::SetNodeValue(doc, xm, m_electricalData.xm);
+ auto useCageFactor = XMLParser::AppendNode(doc, stability, "UseCageFactor");
+ XMLParser::SetNodeValue(doc, useCageFactor, m_electricalData.useKf);
+ auto cageFactor = XMLParser::AppendNode(doc, stability, "CageFactor");
+ XMLParser::SetNodeValue(doc, cageFactor, m_electricalData.kf);
+ auto loadChar = XMLParser::AppendNode(doc, stability, "LoadCharacteristic");
+ auto aw = XMLParser::AppendNode(doc, loadChar, "Constant");
+ XMLParser::SetNodeValue(doc, aw, m_electricalData.aw);
+ auto bw = XMLParser::AppendNode(doc, loadChar, "Linear");
+ XMLParser::SetNodeValue(doc, bw, m_electricalData.bw);
+ auto cw = XMLParser::AppendNode(doc, loadChar, "Quadratic");
+ XMLParser::SetNodeValue(doc, cw, m_electricalData.cw);
+
+ SaveSwitchingData(doc, electricalProp);
return elementNode;
}
@@ -176,14 +212,54 @@ bool IndMotor::OpenElement(rapidxml::xml_node<>* elementNode, std::vector<Elemen
// Element properties
SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline"));
m_electricalData.name = electricalProp->first_node("Name")->value();
+ m_electricalData.ratedPower = XMLParser::GetNodeValueDouble(electricalProp, "RatedPower");
+ m_electricalData.ratedPowerUnit =
+ static_cast<ElectricalUnit>(XMLParser::GetAttributeValueInt(electricalProp, "RatedPower", "UnitID"));
m_electricalData.activePower = XMLParser::GetNodeValueDouble(electricalProp, "ActivePower");
m_electricalData.activePowerUnit =
static_cast<ElectricalUnit>(XMLParser::GetAttributeValueInt(electricalProp, "ActivePower", "UnitID"));
m_electricalData.reactivePower = XMLParser::GetNodeValueDouble(electricalProp, "ReactivePower");
m_electricalData.reactivePowerUnit =
static_cast<ElectricalUnit>(XMLParser::GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID"));
+ m_electricalData.useMachinePowerAsBase = XMLParser::GetNodeValueInt(electricalProp, "UseMachineBase");
+
+ // Stability
+ auto stability = electricalProp->first_node("Stability");
+ m_electricalData.plotIndMachine = XMLParser::GetNodeValueInt(stability, "Inertia");
+ m_electricalData.inertia = XMLParser::GetNodeValueDouble(stability, "PlotIndMachine");
+ m_electricalData.r1 = XMLParser::GetNodeValueDouble(stability, "StatorResistence");
+ m_electricalData.x1 = XMLParser::GetNodeValueDouble(stability, "StatorReactance");
+ m_electricalData.r2 = XMLParser::GetNodeValueDouble(stability, "RotorResistence");
+ m_electricalData.x2 = XMLParser::GetNodeValueDouble(stability, "RotorReactance");
+ m_electricalData.xm = XMLParser::GetNodeValueDouble(stability, "MagnetizingReactance");
+ m_electricalData.useKf = XMLParser::GetNodeValueInt(stability, "UseCageFactor");
+ m_electricalData.kf = XMLParser::GetNodeValueDouble(stability, "CageFactor");
+ auto loadChar = stability->first_node("LoadCharacteristic");
+ m_electricalData.aw = XMLParser::GetNodeValueDouble(loadChar, "Constant");
+ m_electricalData.bw = XMLParser::GetNodeValueDouble(loadChar, "Linear");
+ m_electricalData.cw = XMLParser::GetNodeValueDouble(loadChar, "Quadratic");
+
+ if(!OpenSwitchingData(electricalProp)) return false;
+ if(m_swData.swTime.size() != 0) SetDynamicEvent(true);
m_inserted = true;
return true;
}
+
+bool IndMotor::GetPlotData(ElementPlotData& plotData, PlotStudy study)
+{
+ if(!m_electricalData.plotIndMachine) return false;
+ plotData.SetName(m_electricalData.name);
+ plotData.SetCurveType(ElementPlotData::CT_IND_MOTOR);
+
+ plotData.AddData(m_electricalData.terminalVoltageVector, _("Terminal voltage"));
+ plotData.AddData(m_electricalData.activePowerVector, _("Active power"));
+ plotData.AddData(m_electricalData.reactivePowerVector, _("Reactive power"));
+ plotData.AddData(m_electricalData.currentVector, _("Current"));
+ plotData.AddData(m_electricalData.electricalTorqueVector, _("Electrical torque"));
+ plotData.AddData(m_electricalData.mechanicalTorqueVector, _("Mechanical torque"));
+ plotData.AddData(m_electricalData.velocityVector, _("Speed"));
+ plotData.AddData(m_electricalData.slipVector, _("Slip"));
+ return true;
+}