示例#1
0
 internal void Insert(FCDA da)
 {
     Insert(da.archiveInfo);
     Insert(da.CerList);
     Insert(da.HouseList);
     Insert(da.HRList);
     Insert(da.PersonList);
     Insert(da.PropArchList);
     Insert(da.VolList);
 }
示例#2
0
        private static FCDA CreateFCDA(string prjId)
        {
            FCDA da = new FCDA();

            da.archiveInfo = CreateArchiveIndex(prjId);
            da.CerList     = CreateCerList(prjId);
            da.HouseList   = CreateHouseList(prjId);
            da.PersonList  = CreatePersonList(prjId);
            da.VolList     = CreateVolList(prjId);

            //da.PropArchList = CreatePropArchList(da);
            //da.HRList = CreateHRList(da);

            return(da);
        }
示例#3
0
        private static List <FCDA> GetFCDA(string prjId)
        {
            DataTable dt = GetAllSlbhFrmSJD(prjId);

            if (null != dt && dt.Rows.Count > 0)
            {
                List <FCDA> list = new List <FCDA>();
                foreach (DataRow row in dt.Rows)
                {
                    FCDA da = CreateFCDA(row["slbh"].ToString());
                    list.Add(da);
                }
                return(list);
            }
            return(null);
        }
示例#4
0
 private static List <PropArchiveRelation> CreatePropArchList(FCDA da)
 {
     if (null != da.CerList && da.CerList.Count > 0 && null != da.archiveInfo)
     {
         List <PropArchiveRelation> list = new List <PropArchiveRelation>();
         foreach (Certificate cer in da.CerList)
         {
             PropArchiveRelation cr = new PropArchiveRelation();
             cr.RelationID    = CreateGuid(32);
             cr.ArchiveId     = da.archiveInfo.ArchiveId;
             cr.CertificateID = cer.CertificateID;
             list.Add(cr);
         }
         return(list);
     }
     return(null);
 }
示例#5
0
 private static List <HouseArchiveRelation> CreateHRList(FCDA da)
 {
     if (null != da.HouseList && da.HouseList.Count > 0 && null != da.archiveInfo)
     {
         List <HouseArchiveRelation> list = new List <HouseArchiveRelation>();
         foreach (HouseInfo h in da.HouseList)
         {
             HouseArchiveRelation hr = new HouseArchiveRelation();
             hr.ArchiveId    = da.archiveInfo.ArchiveId;
             hr.BusiNO       = da.archiveInfo.BusiNO;
             hr.HouseInfo_ID = h.HouseInfo_ID;
             hr.RelationID   = CreateGuid(32);
             list.Add(hr);
         }
         return(list);
     }
     return(null);
 }
示例#6
0
        private static void SetDataTypeForFCDA(XElement dataTypeTemplate, XNamespace ns, FCDA fcda, string daTypeId, string[] daNames)
        {
            var daTypeNode = dataTypeTemplate.Elements(ns + "DAType").FirstOrDefault(x => x.Attribute("id")?.Value == daTypeId);

            if (daTypeNode != null)
            {
                foreach (var daName in daNames)
                {
                    var bda = daTypeNode.Elements(ns + "BDA")?.FirstOrDefault(x => x.Attribute("name")?.Value == daName);
                    if (bda != null)
                    {
                        var bType = bda.Attribute("bType").Value;

                        if (bType == "Struct")
                        {
                            var daType = bda.Attribute("type").Value;
                            SetDataTypeForFCDA(dataTypeTemplate, ns, fcda, daType, daNames);
                        }
                        else if (bType == "Quality")
                        {
                            fcda.IEC61850DataType = bType;
                            fcda.DataType         = DataType.bitstring;
                        }
                        else if (bType == "Timestamp")
                        {
                            fcda.IEC61850DataType = bType;
                            fcda.DataType         = DataType.utc_time;
                        }
                        else if (bType == "FLOAT32")
                        {
                            fcda.IEC61850DataType = bType;
                            fcda.DataType         = DataType.floating;
                        }
                        else
                        {
                            System.Diagnostics.Debug.WriteLine("********* Unhandled BTYPE = " + bType);
                        }
                    }
                }
            }
        }
示例#7
0
        private static void SetDataTypeForFCDA(XElement root, XNamespace ns, FCDA fcda)
        {
            var dataTypeTemplate = root.Element(ns + "DataTypeTemplates");

            if (dataTypeTemplate != null)
            {
                // LNodeType

                var lNodeType = dataTypeTemplate.Elements(ns + "LNodeType").FirstOrDefault(x => x.Attribute("id").Value == fcda.LnTypeId);

                if (lNodeType != null)
                {
                    // DO
                    var doNames = fcda.DoName.Split('.');

                    string sdo = null;
                    if (doNames.Length > 1)
                    {
                        sdo = doNames[1];
                    }

                    var doNode = lNodeType.Elements(ns + "DO").FirstOrDefault(x => x.Attribute("name").Value == doNames[0]);

                    if (doNode != null)
                    {
                        var type = doNode.Attribute("type").Value;

                        var doTypeNode = dataTypeTemplate.Elements(ns + "DOType").FirstOrDefault(x => x.Attribute("id").Value == type);

                        if (doTypeNode != null)
                        {
                            if (!string.IsNullOrEmpty(sdo))
                            {
                                var sdoNode = doTypeNode.Elements(ns + "SDO").FirstOrDefault(x => x.Attribute("name")?.Value == sdo);
                                if (sdoNode != null)
                                {
                                    type       = sdoNode.Attribute("type")?.Value;
                                    doTypeNode = dataTypeTemplate.Elements(ns + "DOType").FirstOrDefault(x => x.Attribute("id").Value == type);
                                }
                            }

                            // DA
                            var daNames = fcda.DaName.Split('.');

                            var da = doTypeNode.Elements(ns + "DA").FirstOrDefault(x => x.Attribute("name").Value == daNames[0]);
                            if (da != null)
                            {
                                var bType = da.Attribute("bType").Value;

                                if (bType == "Struct")
                                {
                                    var daType = da.Attribute("type").Value;
                                    SetDataTypeForFCDA(dataTypeTemplate, ns, fcda, daType, daNames);
                                }
                                else if (bType == "Dbpos")
                                {
                                    // Check enum type
                                    var enumType = dataTypeTemplate.Elements(ns + "EnumType").FirstOrDefault(x => x.Attribute("id").Value == bType);
                                    if (enumType != null)
                                    {
                                        fcda.IEC61850DataType = bType;
                                        fcda.DataType         = DataType.bitstring;
                                    }
                                }
                                else if (bType == "Quality")
                                {
                                    fcda.IEC61850DataType = bType;
                                    fcda.DataType         = DataType.bitstring;
                                }
                                else if (bType == "Timestamp")
                                {
                                    fcda.IEC61850DataType = bType;
                                    fcda.DataType         = DataType.utc_time;
                                }
                                else if (bType == "FLOAT32")
                                {
                                    fcda.IEC61850DataType = bType;
                                    fcda.DataType         = DataType.floating;
                                }
                                else
                                {
                                    System.Diagnostics.Debug.WriteLine("********* Unhandled BTYPE = " + bType);
                                }
                            }
                        }
                    }
                }
            }
        }
示例#8
0
        public static List <IED> Parse(string filePath)
        {
            List <IED> list = new List <IED>();

            XDocument doc = XDocument.Load(filePath);
            var       ns  = doc.Root.GetDefaultNamespace();

            var iedNodes = doc.Root.Elements(ns + "IED");

            foreach (var node in iedNodes)
            {
                string mrid = string.Empty;

                var mridNode = node.Elements(ns + "Private").FirstOrDefault(x => x.Attribute("type").Value == "mRID");
                if (mridNode != null)
                {
                    mrid = mridNode.Value;
                }
                else
                {
                    mrid = Guid.NewGuid().ToString().ToLower();
                }
                IED ied = new IED()
                {
                    Name = node.Attribute("name").Value,
                    MRID = mrid
                };

                // Access point LDO
                //var accessPoint = node.Elements(ns + "AccessPoint").FirstOrDefault(x => x.Attribute("name").Value == "LD0");
                var accessPoint = GetAccessPoint(node, ns);
                if (accessPoint != null)
                {
                    // Server

                    var server = accessPoint.Element(ns + "Server");

                    if (server != null)
                    {
                        // LD0
                        //var ld0 = server.Elements(ns + "LDevice").FirstOrDefault(x => x.Attribute("inst").Value == "LD0");
                        var ld0 = GetLD0(server, ns);
                        if (ld0 != null)
                        {
                            // LN0
                            var ln0 = ld0.Element(ns + "LN0");
                            if (ln0 != null)
                            {
                                // GSEControl
                                var gseControls = ln0.Elements(ns + "GSEControl");
                                if (gseControls != null && gseControls.Count() > 0)
                                {
                                    // Found GOOSE control blocks
                                    list.Add(ied);

                                    foreach (var gseControlNode in gseControls)
                                    {
                                        GseControl gseControl = new GseControl()
                                        {
                                            IED           = ied,
                                            LogicalDevice = "LD0",
                                            LogicalNode   = ln0.Attribute("lnClass").Value,
                                            Name          = gseControlNode.Attribute("name").Value,
                                            GooseId       = gseControlNode.Attribute("appID").Value,
                                            ConfRev       = gseControlNode.Attribute("confRev").Value,
                                            Dataset       = new DataSet()
                                            {
                                                Name = gseControlNode.Attribute("datSet").Value
                                            }
                                        };
                                        SetCommunication(doc.Root, ns, gseControl);

                                        ied.GseControls.Add(gseControl);

                                        var dataSetNode = ln0.Elements(ns + "DataSet").FirstOrDefault(x => x.Attribute("name").Value == gseControl.Dataset.Name);
                                        if (dataSetNode != null)
                                        {
                                            // FCDAs
                                            foreach (var fcdaNode in dataSetNode.Elements(ns + "FCDA"))
                                            {
                                                FCDA fcda = new FCDA()
                                                {
                                                    LDInst  = fcdaNode.Attribute("ldInst").Value,
                                                    Prefix  = fcdaNode.Attribute("prefix")?.Value,
                                                    LnClass = fcdaNode.Attribute("lnClass").Value,
                                                    LnInst  = Convert.ToInt32(fcdaNode.Attribute("lnInst").Value),
                                                    DoName  = fcdaNode.Attribute("doName").Value,
                                                    DaName  = fcdaNode.Attribute("daName").Value
                                                };

                                                var logicalDevice = server.Elements(ns + "LDevice").FirstOrDefault(x => x.Attribute("inst").Value == fcda.LDInst);
                                                //Get lnType
                                                var ln = logicalDevice.Elements(ns + "LN").
                                                         FirstOrDefault(x => x.Attribute("prefix")?.Value == fcda.Prefix &&
                                                                        x.Attribute("lnClass")?.Value == fcda.LnClass &&
                                                                        x.Attribute("inst")?.Value == fcda.LnInst.ToString());

                                                fcda.LnTypeId = ln.Attribute("lnType")?.Value;

                                                SetDataTypeForFCDA(doc.Root, ns, fcda);

                                                gseControl.Dataset.FCDAs.Add(fcda);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(list);
        }
示例#9
0
        private static void InserIntoFCDB(FCDA da)
        {
            FCDA_NEW_DAL dal = new FCDA_NEW_DAL();

            dal.Insert(da);
        }