From 2771fff79ac9c3c09b70f4668e7142b2e944d1f2 Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Thu, 25 Apr 2019 01:25:41 -0300 Subject: Matpower Importer and power quality calculation Power quality in implementation --- Project/FileHanding.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'Project/FileHanding.cpp') diff --git a/Project/FileHanding.cpp b/Project/FileHanding.cpp index 91ddcfe..7120063 100644 --- a/Project/FileHanding.cpp +++ b/Project/FileHanding.cpp @@ -232,6 +232,17 @@ void FileHanding::SaveProject(wxFileName path) elementID++; } //} + + //{ HarmCurrent + auto harmCurrentNode = XMLParser::AppendNode(doc, elementsNode, "HarmCurrentList"); + auto harmCurrentList = allElements.GetHarmCurrentList(); + elementID = 0; + for(auto it = harmCurrentList.begin(), itEnd = harmCurrentList.end(); it != itEnd; ++it) { + (*it)->SetID(elementID); + (*it)->SaveElement(doc, harmCurrentNode); + elementID++; + } + //} //{ Text auto textsNode = XMLParser::AppendNode(doc, elementsNode, "TextList"); @@ -333,6 +344,7 @@ bool FileHanding::OpenProject(wxFileName path) std::vector syncGeneratorList; std::vector syncMotorList; std::vector transformerList; + std::vector harmCurrentList; std::vector textList; // List of parents @@ -480,6 +492,20 @@ bool FileHanding::OpenProject(wxFileName path) transfomerNode = transfomerNode->next_sibling("Transfomer"); } //} + + //{ Transformer + auto harmCurrentListNode = elementsNode->first_node("HarmCurrentList"); + if(!harmCurrentListNode) return false; + auto harmCurrentNode = harmCurrentListNode->first_node("HarmCurrent"); + while(harmCurrentNode) { + HarmCurrent* harmCurrent = new HarmCurrent(); + + if(!harmCurrent->OpenElement(harmCurrentNode, parentList)) return false; + elementList.push_back(harmCurrent); + harmCurrentList.push_back(harmCurrent); + + harmCurrentNode = harmCurrentNode->next_sibling("HarmCurrent"); + } //} m_workspace->SetElementList(elementList); @@ -531,6 +557,10 @@ bool FileHanding::OpenProject(wxFileName path) Transformer* transformer = transformerList[text->GetElementNumber()]; text->SetElement(transformer); } break; + case TYPE_HARMCURRENT: { + HarmCurrent* harmCurrent = harmCurrentList[text->GetElementNumber()]; + text->SetElement(harmCurrent); + } break; } textList.push_back(text); -- cgit From a40d5a405d60b4e429f6f578dcfe3c33ab5ad81a Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Fri, 26 Apr 2019 02:29:47 -0300 Subject: Frequency response implemented Need a form --- Project/FileHanding.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'Project/FileHanding.cpp') diff --git a/Project/FileHanding.cpp b/Project/FileHanding.cpp index 7120063..f5facbf 100644 --- a/Project/FileHanding.cpp +++ b/Project/FileHanding.cpp @@ -232,7 +232,7 @@ void FileHanding::SaveProject(wxFileName path) elementID++; } //} - + //{ HarmCurrent auto harmCurrentNode = XMLParser::AppendNode(doc, elementsNode, "HarmCurrentList"); auto harmCurrentList = allElements.GetHarmCurrentList(); @@ -492,19 +492,20 @@ bool FileHanding::OpenProject(wxFileName path) transfomerNode = transfomerNode->next_sibling("Transfomer"); } //} - - //{ Transformer + + //{ HarmCurrent auto harmCurrentListNode = elementsNode->first_node("HarmCurrentList"); - if(!harmCurrentListNode) return false; - auto harmCurrentNode = harmCurrentListNode->first_node("HarmCurrent"); - while(harmCurrentNode) { - HarmCurrent* harmCurrent = new HarmCurrent(); + if(harmCurrentListNode) { + auto harmCurrentNode = harmCurrentListNode->first_node("HarmCurrent"); + while(harmCurrentNode) { + HarmCurrent* harmCurrent = new HarmCurrent(); - if(!harmCurrent->OpenElement(harmCurrentNode, parentList)) return false; - elementList.push_back(harmCurrent); - harmCurrentList.push_back(harmCurrent); + if(!harmCurrent->OpenElement(harmCurrentNode, parentList)) return false; + elementList.push_back(harmCurrent); + harmCurrentList.push_back(harmCurrent); - harmCurrentNode = harmCurrentNode->next_sibling("HarmCurrent"); + harmCurrentNode = harmCurrentNode->next_sibling("HarmCurrent"); + } } //} m_workspace->SetElementList(elementList); -- cgit From 2b02ef22cc5f2025b09b700f1cb6e1cec94d80f6 Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Fri, 26 Apr 2019 17:52:32 -0300 Subject: Power quality fully implemented A formal filter element must be implemented in future --- Project/FileHanding.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Project/FileHanding.cpp') diff --git a/Project/FileHanding.cpp b/Project/FileHanding.cpp index f5facbf..ed747a8 100644 --- a/Project/FileHanding.cpp +++ b/Project/FileHanding.cpp @@ -60,6 +60,8 @@ void FileHanding::SaveProject(wxFileName path) XMLParser::SetNodeValue(doc, contCalcFault, simulationData.faultAfterPowerFlow); auto contCalcSCPower = XMLParser::AppendNode(doc, contCalc, "SCPower"); XMLParser::SetNodeValue(doc, contCalcSCPower, simulationData.scPowerAfterPowerFlow); + auto contCalcTHD = XMLParser::AppendNode(doc, contCalc, "HarmonicDistortion"); + XMLParser::SetNodeValue(doc, contCalcTHD, simulationData.harmDistortionAfterPowerFlow); auto powerFlowPropNode = XMLParser::AppendNode(doc, simulationPropNode, "PowerFlow"); auto solutionMethod = XMLParser::AppendNode(doc, powerFlowPropNode, "SolutionMethod"); @@ -289,6 +291,8 @@ bool FileHanding::OpenProject(wxFileName path) auto contCalc = general->first_node("ContinuousCalculation"); simData.faultAfterPowerFlow = XMLParser::GetNodeValueInt(contCalc, "Fault"); simData.scPowerAfterPowerFlow = XMLParser::GetNodeValueInt(contCalc, "SCPower"); + int harmDistortionAfterPowerFlow = XMLParser::GetNodeValueInt(contCalc, "HarmonicDistortion"); + simData.harmDistortionAfterPowerFlow = harmDistortionAfterPowerFlow != -1 ? harmDistortionAfterPowerFlow : false; // Power flow auto powerFlow = simPropertiesNode->first_node("PowerFlow"); -- cgit