Ejemplo n.º 1
0
        /// <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();
        }
Ejemplo n.º 2
0
        /// <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
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 创建一个SiemensDevice对象
 /// </summary>
 public override CustomDevice CreateProduct(CustomPLC parent, XmlNode node)
 {
     return(new SiemensDevice(parent, node));
 }
Ejemplo n.º 4
0
 /// <summary>
 /// 创建一个CustomDevice对象
 /// </summary>
 /// <param name="parent">设备所属PLC对象</param>
 /// <param name="node">设备属性Xml节点</param>
 public abstract CustomDevice CreateProduct(CustomPLC parent, XmlNode node);