/// <summary> /// 构造方法 /// </summary> /// <param name="parent">设备所属PLC对象</param> /// <param name="node">设备属性Xml节点</param> public CustomDevice(CustomPLC parent, XmlNode node) { if (parent == null) { throw new Exception("没有设备所属的PLC对象,不能创建设备"); } if (node.Attributes["Name"] == null) { throw new Exception("传入的Xml节点没有[Name]属性,请注意大小写"); } Name = node.Attributes["Name"].Value; if (node.Attributes["T133LeafID"] == null) { throw new Exception("传入的Xml节点没有[T133LeafID]属性"); } else { if (int.TryParse( node.Attributes["T133LeafID"].Value, out int rlt)) { T133LeafID = rlt; } } if (node.Attributes["T216LeafID"] == null) { throw new Exception("传入的Xml节点没有[T216LeafID]属性"); } else { if (int.TryParse( node.Attributes["T216LeafID"].Value, out int rlt)) { T216LeafID = rlt; } } if (node.Attributes["T107LeafID"] != null) { if (int.TryParse( node.Attributes["T107LeafID"].Value, out int rlt)) { T107LeafID = rlt; } } InitComponents(); }
/// <summary> /// 构造方法 /// </summary> public SiemensDevice(CustomPLC parent, XmlNode node) : base(parent, node) { _log = Logger.Get <SiemensDevice>(); if (!(parent is SiemensPLC)) { throw new Exception($"传入的PLC对象不是[SiemensPLC]对象"); } else { Parent = parent; } #region 创建 Device if (node.Name.ToUpper() != "DEVICE") { throw new Exception($"Xml节点[{node.Name}]不是\"Device\""); } if (node.Attributes["DBType"] != null) { try { DBType = (SiemensRegisterType)Enum.Parse( typeof(SiemensRegisterType), node.Attributes["DBType"].Value); } catch { string enumValues = ""; foreach (var value in Enum.GetValues(typeof(SiemensRegisterType))) { enumValues += $"[{value}]"; } throw new Exception( $"{node.Name}.{Name}节点中[DBType]属性值错误,只支持[{enumValues}]"); } } else { throw new Exception( $"{node.Name}.{Name}节点中未找到[DBType]属性,请注意属性名的大小写"); } if (node.Attributes["DBNumber"] != null) { try { DBNumber = int.Parse(node.Attributes["DBNumber"].Value); } catch { throw new Exception( $"{node.Name}.{Name}节点中[DBNumber]属性值错误,必须是整型值"); } } else { throw new Exception( $"{node.Name}.{Name}节点中未找到[DBNumber]属性,请注意属性名的大小写"); } if (node.Attributes["CycleReadMode"] != null) { try { CycleReadMode = (SiemensCycleReadMode)Enum.Parse( typeof(SiemensCycleReadMode), node.Attributes["CycleReadMode"].Value); } catch { string enumValues = ""; foreach (var value in Enum.GetValues(typeof(SiemensCycleReadMode))) { enumValues += $"[{value}]"; } throw new Exception( $"{node.Name}.{Name}节点中[CycleReadMode]属性值错误,只支持[{enumValues}]"); } } if (node.Attributes["SplitterTime"] != null) { try { SplitterTime = short.Parse(node.Attributes["SplitterTime"].Value); } catch (Exception error) { _log.Error( $"{node.Name}.{Name}节点中[SplitterTime]属性值错误,使用缺省10毫秒", error); } } #endregion _log.Trace( $"创建设备[{Name}][DBType={DBType}|DBNumber={DBNumber}|" + $"CycleReadMode={CycleReadMode}]"); #region 创建 Tag 组 if (node.HasChildNodes) { CustomTagGroupCreator creator = new SiemensTagGroupCreator(); XmlNode tagGroupNode = node.FirstChild; while (tagGroupNode != null) { if (tagGroupNode.Name.ToUpper() == "TAGGROUP") { try { CustomTagGroup group = creator.CreateProuct( this, tagGroupNode, OnTagRegister); _groups.Add(group); } catch (Exception error) { _log.Error(error.Message, error); } } tagGroupNode = tagGroupNode.NextSibling; } } #endregion }
/// <summary> /// 创建一个SiemensDevice对象 /// </summary> public override CustomDevice CreateProduct(CustomPLC parent, XmlNode node) { return(new SiemensDevice(parent, node)); }
/// <summary> /// 创建一个CustomDevice对象 /// </summary> /// <param name="parent">设备所属PLC对象</param> /// <param name="node">设备属性Xml节点</param> public abstract CustomDevice CreateProduct(CustomPLC parent, XmlNode node);