Пример #1
0
        /// <summary>
        /// 给定名称和类型获得变量单元
        /// </summary>
        /// <param name="name">变量名称</param>
        /// <param name="type">变量类型(BIT/WORD/DWORD/FLOAT/DOUBLE)</param>
        /// <returns></returns>
        public SimulateVariableUnit GetVariableUnit(string name, string type)
        {
            // 如果是常量的头
            switch (name[0])
            {
            case 'K':
            case 'F':
            case 'H':
                return(GetConstantUnit(name, type));

            default:
                break;
            }
            // 剩下的是变量的头
            // 在管理器中查找
            SimulateVariableUnit unit = null;

            unit = smanager.Find(name, type);
            if (unit != null)
            {
                return(unit);
            }
            // 不存在则新建
            unit = SimulateVariableUnit.Create(name, type);
            // 注册到管理器中
            smanager.Add(unit);
            return(unit);
        }
Пример #2
0
        public static SimulateDataModel Create(string name)
        {
            SimulateVariableUnit svunit = SimulateVariableUnit.Create(name);

            if (svunit == null)
            {
                return(null);
            }
            return(new SimulateDataModel(svunit));
        }
Пример #3
0
        public void LoadXml(XElement node_SDModel)
        {
            string name = (string)(node_SDModel.Attribute("Name"));
            string type = (string)(node_SDModel.Attribute("Type"));
            string var  = (string)(node_SDModel.Attribute("var"));

            SVUnit     = SimulateVariableUnit.Create(name, type);
            SVUnit.Var = var;
            IEnumerable <XElement> node_VSs = node_SDModel.Elements("ValueSegment");

            values = new List <ValueSegment>();
            foreach (XElement node_VS in node_VSs)
            {
                ValueSegment vs;
                switch (Type)
                {
                case "BIT":
                    vs       = new BitSegment();
                    vs.Value = (Int32)node_VS.Attribute("Value");
                    break;

                case "WORD":
                    vs       = new WordSegment();
                    vs.Value = (Int32)node_VS.Attribute("Value");
                    break;

                case "DWORD":
                    vs       = new DWordSegment();
                    vs.Value = (Int64)node_VS.Attribute("Value");
                    break;

                case "FLOAT":
                    vs       = new FloatSegment();
                    vs.Value = (double)node_VS.Attribute("Value");
                    break;

                default:
                    throw new FormatException();
                }
                vs.TimeStart = (int)(node_VS.Attribute("TimeStart"));
                vs.TimeEnd   = (int)(node_VS.Attribute("TimeEnd"));
                values.Add(vs);
            }
            IsLock = (bool)(node_SDModel.Attribute("IsLock"));
            IsView = (bool)(node_SDModel.Attribute("IsView"));
        }