Ejemplo n.º 1
0
        public void AddPNMObject(PhysicalNetworkModel.ACLineSegment acls, string lineMrid = null)
        {
            string xml = "<cim:ACLineSegment rdf:ID='_" + acls.mRID + "'>\r\n";

            xml += "  <cim:IdentifiedObject.name>" + HttpUtility.HtmlEncode(acls.name) + "</cim:IdentifiedObject.name>\r\n";
            xml += "  <cim:Equipment.aggregate>false</cim:Equipment.aggregate>\r\n";
            xml += "  <cim:ConductingEquipment.BaseVoltage rdf:resource='#_" + GetBaseVoltageId(acls.BaseVoltage) + "'/>\r\n";

            if (lineMrid != null)
            {
                xml += "  <cim:Equipment.EquipmentContainer rdf:resource='#_" + lineMrid + "'/>\r\n";
            }

            // PF CGMES expect km, but vi got m in GIS, so we need to divede by 1000
            xml += "  <cim:Conductor.length>" + DoubleToString(acls.length.Value / 1000) + "</cim:Conductor.length>\r\n";


            if (acls.b0ch != null)
            {
                xml += "  <cim:ACLineSegment.b0ch>" + DoubleToString(acls.b0ch.Value / 1000000) + "</cim:ACLineSegment.b0ch>\r\n";
            }
            if (acls.bch != null)
            {
                xml += "  <cim:ACLineSegment.bch>" + DoubleToString(acls.bch.Value / 1000000) + "</cim:ACLineSegment.bch>\r\n";
            }
            if (acls.g0ch != null)
            {
                xml += "  <cim:ACLineSegment.g0ch>" + DoubleToString(acls.g0ch.Value / 1000000) + "</cim:ACLineSegment.g0ch>\r\n";
            }
            if (acls.gch != null)
            {
                xml += "  <cim:ACLineSegment.gch>" + DoubleToString(acls.gch.Value / 1000000) + "</cim:ACLineSegment.gch>\r\n";
            }
            if (acls.r != null)
            {
                xml += "  <cim:ACLineSegment.r>" + DoubleToString(acls.r.Value) + "</cim:ACLineSegment.r>\r\n";
            }
            if (acls.r0 != null)
            {
                xml += "  <cim:ACLineSegment.r0>" + DoubleToString(acls.r0.Value) + "</cim:ACLineSegment.r0>\r\n";
            }
            if (acls.x != null)
            {
                xml += "  <cim:ACLineSegment.x>" + DoubleToString(acls.x.Value) + "</cim:ACLineSegment.x>\r\n";
            }
            if (acls.x0 != null)
            {
                xml += "  <cim:ACLineSegment.x0>" + DoubleToString(acls.x0.Value) + "</cim:ACLineSegment.x0>\r\n";
            }


            xml += "</cim:ACLineSegment>\r\n\r\n";
            _writer.Write(xml);
        }
Ejemplo n.º 2
0
        public void TestEQWriterACLineSegment()
        {
            // Create ACLS
            PhysicalNetworkModel.IdentifiedObject acls = new PhysicalNetworkModel.ACLineSegment()
            {
                mRID        = Guid.NewGuid().ToString(),
                name        = "31-32",
                BaseVoltage = 10000,
                length      = new PhysicalNetworkModel.Length()
                {
                    multiplier = PhysicalNetworkModel.UnitMultiplier.none, unit = PhysicalNetworkModel.UnitSymbol.m, Value = 2500
                },
                b0ch = new PhysicalNetworkModel.Susceptance()
                {
                    Value = 0
                },
                bch = new PhysicalNetworkModel.Susceptance()
                {
                    Value = 0.0001440542
                },
                gch = new PhysicalNetworkModel.Conductance()
                {
                    Value = 0
                },
                g0ch = new PhysicalNetworkModel.Conductance()
                {
                    Value = 0
                },
                r = new PhysicalNetworkModel.Resistance()
                {
                    Value = 5.192352
                },
                r0 = new PhysicalNetworkModel.Resistance {
                    Value = 5.296199
                },
                x = new PhysicalNetworkModel.Reactance()
                {
                    Value = 17.16264
                },
                x0 = new PhysicalNetworkModel.Reactance()
                {
                    Value = 0
                }
            };

            var converter = new EQ_Writer(eqTempFileName, null, null, Guid.NewGuid(), "test");


            converter.AddPNMObject((dynamic)acls);
            converter.Close();

            // Check generated RDF XML document
            XDocument doc = XDocument.Load(eqTempFileName);

            var test = doc.Descendants();

            // Must be in km now
            Assert.IsNotNull(doc.Descendants().First(o =>
                                                     o.Name.LocalName == "Conductor.length" &&
                                                     o.Value == "2.5"
                                                     ));

            Assert.IsNotNull(doc.Descendants().First(o =>
                                                     o.Name.LocalName == "ACLineSegment.r" &&
                                                     o.Value == "5.192352"
                                                     ));
        }