public void AddPNMObject(PhysicalNetworkModel.Terminal terminal) { if (terminal.ConductingEquipment.@ref == "76c96252-b533-44b1-aac2-9efb184dc9e7") { } string xml = "<cim:Terminal rdf:ID = '_" + terminal.mRID + "'>\r\n"; if (terminal.name == null) { xml += " <cim:IdentifiedObject.name>" + "T" + terminal.sequenceNumber + "</cim:IdentifiedObject.name>\r\n"; } else { xml += " <cim:IdentifiedObject.name>" + terminal.name + "</cim:IdentifiedObject.name>\r\n"; } xml += " <cim:ACDCTerminal.sequenceNumber>" + terminal.sequenceNumber + "</cim:ACDCTerminal.sequenceNumber>\r\n"; // ABCN on everything except cables, to avoid connectivity struggle issues inside substation in PF var ci = _cimContext.GetObject <PhysicalNetworkModel.ConductingEquipment>(terminal.ConductingEquipment.@ref); if (ci is PhysicalNetworkModel.ACLineSegment) { xml += " <cim:Terminal.phases rdf:resource='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseCode.ABC'/>\r\n"; } else { xml += " <cim:Terminal.phases rdf:resource='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseCode.ABCN'/>\r\n"; } /* * if (!ForceThreePhases) * xml += " <cim:Terminal.phases rdf:resource='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseCode." + terminal.phases.ToString() + "'/>\r\n"; * else * xml += " <cim:Terminal.phases rdf:resource='http://iec.ch/TC57/2013/CIM-schema-cim16#PhaseCode.ABCN'/>\r\n"; */ if (terminal.ConnectivityNode != null) { xml += " <cim:Terminal.ConnectivityNode rdf:resource = '#_" + terminal.ConnectivityNode.@ref + "'/>\r\n"; } xml += " <cim:Terminal.ConductingEquipment rdf:resource='#_" + terminal.ConductingEquipment.@ref + "'/>\r\n"; xml += "</cim:Terminal>\r\n\r\n"; _writer.Write(xml); }
public void TestEngumEQWriter() { bool includeAll = false; var mappingContext = new MappingContext(); var converter = new PNM2PowerFactoryCimConverter(_context.GetAllObjects(), new List <IPreProcessor> { new ACLSMerger(mappingContext), new KonstantPowerFactoryDataPrepareAndFix(mappingContext) }); var outputCimObjects = converter.GetCimObjects().ToList(); // We need to reinitialize context, because converter has modified objects _context = CimContext.Create(outputCimObjects); var eqWriter = new EQ_Writer(eqTempFileName, _context, mappingContext, Guid.Parse("48acc999-f45c-475a-b61c-09e7d1001fc1"), "Engum"); var glWriter = new GL_Writer(glTempFileName); HashSet <PhysicalNetworkModel.ConnectivityNode> cnAlreadyWritten = new HashSet <PhysicalNetworkModel.ConnectivityNode>(); foreach (var cimObject in _context.GetAllObjects()) { if ((cimObject is PhysicalNetworkModel.ConductingEquipment && ((PhysicalNetworkModel.ConductingEquipment)cimObject).BaseVoltage > 5000) || !(cimObject is PhysicalNetworkModel.ConductingEquipment) || cimObject is PhysicalNetworkModel.PowerTransformer ) { if ( cimObject is PhysicalNetworkModel.ACLineSegment || cimObject is PhysicalNetworkModel.BusbarSection || cimObject is PhysicalNetworkModel.LoadBreakSwitch || cimObject is PhysicalNetworkModel.Breaker || cimObject is PhysicalNetworkModel.Disconnector || cimObject is PhysicalNetworkModel.Fuse || cimObject is PhysicalNetworkModel.Terminal || (cimObject is PhysicalNetworkModel.ConnectivityNode && cimObject.IsInsideSubstation()) || cimObject is PhysicalNetworkModel.Substation || cimObject is PhysicalNetworkModel.VoltageLevel || cimObject is PhysicalNetworkModel.Bay || cimObject is PhysicalNetworkModel.PowerTransformer || cimObject is PhysicalNetworkModel.PowerTransformerEnd ) { // Add substations if (cimObject is PhysicalNetworkModel.Substation && (cimObject.name == "BRB" || cimObject.name == "30904" || includeAll)) { var st = cimObject as PhysicalNetworkModel.Substation; if (st.PSRType == "PrimarySubstation" || st.PSRType == "SecondarySubstation" || st.PSRType == "Junction") { eqWriter.AddPNMObject((dynamic)cimObject); // Add location var loc = _context.GetObject <PhysicalNetworkModel.LocationExt>(st.Location.@ref); glWriter.AddLocation(Guid.Parse(st.mRID), loc); } } // Add voltage levels if (cimObject is PhysicalNetworkModel.VoltageLevel && (cimObject.GetSubstation().name == "BRB" || cimObject.GetSubstation().name == "30904" || includeAll)) { eqWriter.AddPNMObject((dynamic)cimObject); } // Power transformer if (cimObject is PhysicalNetworkModel.PowerTransformer && (cimObject.GetSubstation().name == "BRB" || cimObject.GetSubstation().name == "30904" || includeAll)) { eqWriter.AddPNMObject((dynamic)cimObject); // Add terminals var ci = cimObject as PhysicalNetworkModel.ConductingEquipment; foreach (var tc in _context.GetConnections(ci)) { tc.Terminal.phases = PhysicalNetworkModel.PhaseCode.ABCN; tc.Terminal.name = ci.name + "_T" + tc.Terminal.sequenceNumber; eqWriter.AddPNMObject((dynamic)tc.Terminal); } } // Power transformer end if (cimObject is PhysicalNetworkModel.PowerTransformerEnd && (cimObject.GetSubstation().name == "BRB" || cimObject.GetSubstation().name == "30904" || includeAll)) { PhysicalNetworkModel.PowerTransformerEnd ptend = cimObject as PhysicalNetworkModel.PowerTransformerEnd; ptend.r = new PhysicalNetworkModel.Resistance() { Value = 0.1 }; ptend.r0 = new PhysicalNetworkModel.Resistance() { Value = 0.2 }; ptend.x = new PhysicalNetworkModel.Reactance() { Value = 0.3 }; //ptend.x0 = new PhysicalNetworkModel.Reactance() { Value = 0.4 }; ptend.b = new PhysicalNetworkModel.Susceptance { Value = 0.5 }; ptend.b0 = new PhysicalNetworkModel.Susceptance { Value = 0.6 }; ptend.g = new PhysicalNetworkModel.Conductance { Value = 0.7 }; ptend.g0 = new PhysicalNetworkModel.Conductance { Value = 0.8 }; ptend.rground = new PhysicalNetworkModel.Resistance { Value = 0.9 }; ptend.xground = new PhysicalNetworkModel.Reactance { Value = 0.91 }; ptend.phaseAngleClock = "11"; ptend.grounded = false; eqWriter.AddPNMObject((dynamic)cimObject); } // Add bays if (cimObject is PhysicalNetworkModel.Bay && (cimObject.GetSubstation().name == "BRB" || cimObject.GetSubstation().name == "30904" || includeAll)) { eqWriter.AddPNMObject((dynamic)cimObject); } // Add ACLS if (cimObject is PhysicalNetworkModel.ACLineSegment && cimObject.name != null && (cimObject.name.Contains("BRB-30904") || includeAll)) { eqWriter.AddPNMObject((dynamic)cimObject); // Add terminals var ci = cimObject as PhysicalNetworkModel.ConductingEquipment; foreach (var tc in _context.GetConnections(ci)) { eqWriter.AddPNMObject((dynamic)tc.Terminal); } // Add location if (ci.PSRType != "InternalCable") { var loc = _context.GetObject <PhysicalNetworkModel.LocationExt>(ci.Location.@ref); glWriter.AddLocation(Guid.Parse(ci.mRID), loc); } } // Add stuff inside substation if (!(cimObject is PhysicalNetworkModel.PowerTransformer) && cimObject.IsInsideSubstation() && (cimObject.GetSubstation().name == "BRB" || cimObject.GetSubstation().name == "30904" || includeAll)) { // fix busbar voltage level ref if (cimObject is PhysicalNetworkModel.BusbarSection) { var busbar = cimObject as PhysicalNetworkModel.BusbarSection; busbar.EquipmentContainer.@ref = busbar.GetSubstation().GetVoltageLevel(busbar.BaseVoltage).mRID; } eqWriter.AddPNMObject((dynamic)cimObject); if (cimObject is PhysicalNetworkModel.ConductingEquipment) { var ci = cimObject as PhysicalNetworkModel.ConductingEquipment; foreach (var tc in _context.GetConnections(ci)) { eqWriter.AddPNMObject((dynamic)tc.Terminal); if (!cnAlreadyWritten.Contains(tc.ConnectivityNode)) { eqWriter.AddPNMObject((dynamic)tc.ConnectivityNode); } cnAlreadyWritten.Add(tc.ConnectivityNode); } } } } } } // Add peterson coil var coil = new PhysicalNetworkModel.PetersenCoil(); var priTrafo = outputCimObjects.Find(o => o is PhysicalNetworkModel.PowerTransformer && o.GetSubstation().name == "BRB"); var coilSt = priTrafo.GetSubstation(); coil.mRID = Guid.NewGuid().ToString(); coil.name = "Test coil"; coil.BaseVoltage = 10000; coil.EquipmentContainer = new PhysicalNetworkModel.EquipmentEquipmentContainer() { @ref = coilSt.GetVoltageLevel(10000).mRID }; coil.mode = PhysicalNetworkModel.PetersenCoilModeKind.@fixed; coil.nominalU = new PhysicalNetworkModel.Voltage() { Value = 10000 }; coil.positionCurrent = new PhysicalNetworkModel.CurrentFlow() { Value = 99.99 }; coil.offsetCurrent = new PhysicalNetworkModel.CurrentFlow { Value = 9.99 }; coil.r = new PhysicalNetworkModel.Resistance() { Value = 9.99 }; coil.xGroundMin = new PhysicalNetworkModel.Reactance { Value = 0.99 }; coil.xGroundMax = new PhysicalNetworkModel.Reactance { Value = 9.99 }; coil.xGroundNominal = new PhysicalNetworkModel.Reactance { Value = 4.99 }; var trafoCons = _context.GetConnections(priTrafo); var secTer = trafoCons.Find(o => o.Terminal.sequenceNumber == "1"); var coilTer = new PhysicalNetworkModel.Terminal(); coilTer.mRID = Guid.NewGuid().ToString(); coilTer.ConductingEquipment = new PhysicalNetworkModel.TerminalConductingEquipment() { @ref = coil.mRID }; coilTer.ConnectivityNode = new PhysicalNetworkModel.TerminalConnectivityNode() { @ref = secTer.ConnectivityNode.mRID }; coilTer.phases = PhysicalNetworkModel.PhaseCode.N; eqWriter.AddPNMObject(coil); eqWriter.AddPNMObject(coilTer); eqWriter.Close(); glWriter.Close(); string startPath = folder + "\\files"; string zipPath = folder + "\\export.zip"; File.Delete(zipPath); ZipFile.CreateFromDirectory(startPath, zipPath); }