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); }
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); }
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); }
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); }
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); }
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); } } } } }
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); } } } } } } }
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); }
private static void InserIntoFCDB(FCDA da) { FCDA_NEW_DAL dal = new FCDA_NEW_DAL(); dal.Insert(da); }