/// <summary> /// 解析组地址列表中各组地址的数据点类型。主号、次号、大小、类型名 /// </summary> /// <param name="addressList"></param> public static void parseDatapointType(ImGroupAddr address) { if (null == address) { return; } string dpst = address.DPTName; if ((null != dpst) && ((dpst.Length) > 0) && (dpst.Substring(0, 4).Equals("DPST"))) { var index1 = dpst.IndexOf("-"); // 第一个"-"的位置 var index2 = dpst.IndexOf("-", index1 + 1); // 第二个"-"的位置 var index3 = dpst.IndexOf(" ", index2 + 1); // 空格的位置 int mainNum = -1; int subNum = -1; if (index1 >= 4) { if (index2 > (index1 + 1)) { mainNum = Convert.ToInt32(dpst.Substring(index1 + 1, index2 - index1 - 1)); // 获取主号 if (index3 > (index2 + 1)) // 表示有多个数据类型。只取第一个 { subNum = Convert.ToInt32(dpst.Substring(index2 + 1, index3 - index2)); // 整型子号 } else { subNum = Convert.ToInt32(dpst.Substring(index2 + 1, dpst.Length - index2 - 1)); // 整型子号 } } else { mainNum = Convert.ToInt32(dpst.Substring(index1 + 1, dpst.Length - index1 - 1)); // 获取主号 } } if (MyCache.DicMainNumber.ContainsKey(mainNum)) { string knxMainNum = MyCache.DicMainNumber[mainNum]; string knxSubNum = DatapointType.DPST_ANY; if (MyCache.DicSubNumber.ContainsKey(subNum)) { knxSubNum = MyCache.DicSubNumber[subNum]; } address.DPTName = DPTHelper.GetDPTName(knxMainNum, knxSubNum); if (address.DPTName.Length > 0) { address.IsSelected = true; address.DPTNameIsDetermined = true; } } } }
public static List <ImGroupAddr> ParseOpcFile(string opcFile, BackgroundWorker worker) { List <ImGroupAddr> listAddr = new List <ImGroupAddr>(); string[] lines = File.ReadAllLines(opcFile, System.Text.Encoding.Default); foreach (string line in lines) { string[] elements = line.Split('\t'); if (elements.Length >= 4) { ImGroupAddr addr = new ImGroupAddr(); addr.Id = Guid.NewGuid().ToString(); addr.IsCommunication = true; addr.IsRead = true; addr.IsTransmit = true; addr.IsUpgrade = true; addr.IsWrite = true; string[] group = elements[0].Split('.'); if (group.Length >= 3) { addr.KnxAddress = group[2]; } addr.Name = elements[1]; worker.ReportProgress(0, addr.Name); int start = elements[2].IndexOf('('); int end = elements[2].IndexOf(')'); if ((start > 0) && (end > start)) { string type = elements[2].Substring(start + 1, end - (start + 1)); addr.DPTName = DPTHelper.GetDPTMainName(KNXAddressHelper.GetKnxDataType(type)); if (addr.DPTName.Length > 0) { //addr.IsSelected = true; addr.DPTNameIsDetermined = false; } } var formName = typeof(FrmGroupAddressMgt).Name; if (Application.OpenForms[formName] != null) { var frm = Application.OpenForms[formName] as FrmGroupAddressMgt; if (frm != null) { if (frm.AddressIsExsit(addr.KnxAddress)) { addr.IsSelected = false; } else { addr.IsSelected = true; } } } addr.Priority = KNXAddressHelper.GetKNXPriority(elements[3]); listAddr.Add(addr); } } return(listAddr); }
public static void parseComObject(ImGroupAddr address, XElement comObject) { var refId = comObject.Attribute(attrRefId); var text = comObject.Attribute(attrText); var priority = comObject.Attribute(attrPriority); var objectSize = comObject.Attribute(attrObjectSize); var readFlag = comObject.Attribute(attrReadFlag); var writeFlag = comObject.Attribute(attrWriteFlag); var communicationFlag = comObject.Attribute(attrCommunicationFlag); var transmitFlag = comObject.Attribute(attrTransmitFlag); var updateFlag = comObject.Attribute(attrUpdateFlag); var datapointType = comObject.Attribute(attrDatapointType); // //if (null != text) //{ //address.Name = text.Value; //} if (null != priority) { address.Priority = KNXAddressHelper.GetKNXPriority(priority.Value); } if (null != datapointType && null != datapointType.Value) { if ((null == address.DPTName) || (address.DPTName.Trim().Length <= 0) || (address.DPTName.Contains("*"))) { address.DPTName = datapointType.Value; parseDatapointType(address); } } if (objectSize != null) { if ((null == address.DPTName) || (address.DPTName.Trim().Length <= 0) || (address.DPTName.Contains("*"))) { // 数据类型 address.DPTName = DPTHelper.GetDPTMainName(KNXAddressHelper.GetKnxDataType(objectSize.Value)); if (address.DPTName.Length > 0) { address.IsSelected = true; address.DPTNameIsDetermined = false; } } } if (null != readFlag && null != readFlag.Value) { if ("Disabled" == readFlag.Value) { address.IsRead = false; } else if ("Enabled" == readFlag.Value) { address.IsRead = true; } } if (null != writeFlag && null != writeFlag.Value) { if ("Disabled" == writeFlag.Value) { address.IsWrite = false; } else if ("Enabled" == writeFlag.Value) { address.IsWrite = true; } } if (null != communicationFlag && null != communicationFlag.Value) { if ("Disabled" == communicationFlag.Value) { address.IsCommunication = false; } else if ("Enabled" == communicationFlag.Value) { address.IsCommunication = true; } } if (null != transmitFlag && null != transmitFlag.Value) { if ("Disabled" == transmitFlag.Value) { address.IsTransmit = false; } else if ("Enabled" == transmitFlag.Value) { address.IsTransmit = true; } } if (null != updateFlag && null != updateFlag.Value) { if ("Disabled" == updateFlag.Value) { address.IsUpgrade = false; } else if ("Enabled" == updateFlag.Value) { address.IsUpgrade = true; } } }