示例#1
0
 private void RaizeVariableClassChanged(string name, LDVarClass oldClass, LDVarClass newClass)
 {
     if (VariableClassChanged != null)
     {
         VariableClassChanged(this, new VarClassChangedArgs(name, oldClass, newClass));
     }
 }
示例#2
0
 /// <summary>
 /// Builder (sets type's default value)
 /// </summary>
 /// <param name="dataType">Variable type</param>
 public LDIVariable(Type dataType, LDVarClass type)
     : this(dataType, type, 1, null)
 {
     //get default value for the given type
     Value  = (dataType.IsValueType) ? Activator.CreateInstance(dataType) : null;
     Locked = false;
 }
示例#3
0
 private void RaizeVariableAdded(string name, LDVarClass varClass)
 {
     if (VariableAdded != null)
     {
         VariableAdded(this, new VarAddedArgs(name, varClass));
     }
 }
示例#4
0
        /// <summary>
        /// Set variable class by index
        /// </summary>
        /// <param name="index">Variable index</param>
        /// <param name="value">Value to be set</param>
        public LadderDataTable SetVarClass(int index, LDVarClass value)
        {
            if (index < 0 || index >= Table.Count)
            {
                throw new ArgumentOutOfRangeException("Index is not inside table limits");
            }
            if (Table.Values[index].NumRefs > 1 && Table.Values[index].Class != value)
            {
                throw new InvalidOperationException("Can't change variable LD Class");
            }

            if (Table.Values[index].Class != value)
            {
                Trace.WriteLine("Class at [" + index + "] (" + Table.Keys[index] + "): changed to " + value, "Ladder Data Table");
                LDVarClass oldClass = Table.Values[index].Class;
                Table.Values[index].Class = value;
                RaizeVariableClassChanged(Table.Keys[index], oldClass, value);
            }
            else
            {
                Trace.WriteLine("Class change at [" + index + "] (" + Table.Keys[index] + ") ignored", "Ladder Data Table");
            }

            return(this);
        }
示例#5
0
        /// <summary>
        /// Set variable class by name
        /// </summary>
        /// <param name="name">Variable name</param>
        /// <param name="value">Value to be set</param>
        public LadderDataTable SetVarClass(string name, LDVarClass value)
        {
            int index = Table.IndexOfKey(name);

            if (index != -1)
            {
                if (Table.Values[index].NumRefs > 1 && Table.Values[index].Class != value)
                {
                    throw new InvalidOperationException("Can't change variable LD Class");
                }

                if (Table.Values[index].Class != value)
                {
                    Trace.WriteLine("Class of " + name + " changed to " + value, "Ladder Data Table");
                    LDVarClass oldClass = Table.Values[index].Class;
                    Table.Values[index].Class = value;
                    RaizeVariableClassChanged(name, oldClass, value);
                }
                else
                {
                    Trace.WriteLine("Class change of " + name + " ignored", "Ladder Data Table");
                }

                return(this);
            }
            else
            {
                throw new ArgumentException("Variable not found", "name");
            }
        }
示例#6
0
        /// <summary>
        /// Manage memory allocation.
        /// In case of an existing variable it only increase its reference counter
        /// </summary>
        /// <param name="name">Variable name</param>
        /// <param name="dataType">Variable data type</param>
        /// <param name="varClass">Variable type</param>
        public LadderDataTable Add(string name, Type dataType, LDVarClass varClass = LDVarClass.Data)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("Variable name must be provided", "name");
            }
            if (dataType == null)
            {
                throw new ArgumentNullException("Variable type must be provided", "dataType");
            }

            int index = Table.IndexOfKey(name);

            if (index != -1)
            {
                if (dataType != Table.Values[index].DataType)
                {
                    throw new ArgumentException("Name already used", "name", new FormatException("Value Type Mismatch"));
                }
                Table.Values[index].NumRefs++;
                Trace.WriteLine("New reference to variable " + name + ", total number of references: " + Table.Values[index].NumRefs, "Ladder Data Table");
            }
            else
            {
                Table.Add(name, new LDIVariable(dataType, varClass));
                RaizeVariableAdded(name, varClass);
                Trace.WriteLine("New Variable inserted: " + name + ", Type: " + dataType, "Ladder Data Table");
            }

            return(this);
        }
示例#7
0
 /// <summary>
 /// Master builder
 /// </summary>
 /// <param name="dataType">Variable data type</param>
 /// <param name="type">Variable type</param>
 /// <param name="numRefs">Number of references to this variable</param>
 /// <param name="value">Variable initial value</param>
 public LDIVariable(Type dataType, LDVarClass type, int numRefs, object value)
 {
     Value    = value;
     NumRefs  = numRefs;
     DataType = dataType;
     Class    = type;
     Locked   = false;
 }
示例#8
0
 public static PinType ToPin(this LDVarClass varClass)
 {
     return((PinType)((char)varClass));
 }
示例#9
0
 public static bool IsPin(this LDVarClass varClass)
 {
     return((varClass == Data.LDVarClass.Analog) || (varClass == Data.LDVarClass.Input) || (varClass == Data.LDVarClass.Output) || (varClass == Data.LDVarClass.PWM));
 }
示例#10
0
 public VarAddedArgs(string name, LDVarClass varClass)
 {
     Name     = name;
     VarClass = varClass;
 }
示例#11
0
 public VarClassChangedArgs(string name, LDVarClass oldClass, LDVarClass newClass)
 {
     Name     = name;
     OldClass = oldClass;
     NewClass = newClass;
 }
示例#12
0
 /// <summary>
 /// Builder
 /// </summary>
 /// <param name="dataType">Variable type</param>
 /// <param name="value">Variable initial value</param>
 public LDIVariable(Type dataType, LDVarClass type, object value)
     : this(dataType, type, 1, value)
 {
 }