| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Diagnostics;
 
- using System.Linq;
 
- using System.Threading.Tasks;
 
- using Aitex.Core.RT.Event;
 
- using Aitex.Core.RT.Log;
 
- using MECF.Framework.RT.Core.IoProviders;
 
- namespace Aitex.Core.RT.IOCore
 
- {
 
-     public delegate void SetValue<T>(int index, T Value);
 
-     public delegate T GetValue<T>(int index);
 
-     public enum IOType
 
-     {
 
-         DI,
 
-         DO,
 
-         AI,
 
-         AO,
 
-     }
 
-     public class IOAccessor<T>
 
-     {
 
-         protected string name;
 
-         protected string addr;
 
-         protected int index;
 
-         protected T[] values;
 
-         protected SetValue<T> setter = null;
 
-         protected GetValue<T> getter = null;
 
-         public T Value
 
-         {
 
-             get
 
-             {
 
-                 return getter(index);
 
-             }
 
-             set
 
-             {
 
-                 setter(index, value);
 
-             }
 
-         }
 
-         public T[] Buffer
 
-         {
 
-             get
 
-             {
 
-                 return values;
 
-             }
 
-         }
 
-         public string Name
 
-         {
 
-             get { return name; }
 
-         }
 
-         public int Index
 
-         {
 
-             get { return index; }
 
-         }
 
-         public int BlockOffset
 
-         {
 
-             get;
 
-             set;
 
-         }
 
-         public string Addr
 
-         {
 
-             get { return addr; }
 
-             set { addr = value; }
 
-         }
 
-         public string Provider
 
-         {
 
-             get;
 
-             set;
 
-         }
 
-         public string Description
 
-         {
 
-             get;
 
-             set;
 
-         }
 
-         public string StringIndex
 
-         {
 
-             get
 
-             {
 
-                 return name.Substring(0, 2) + "-" + index.ToString();
 
-             }
 
-         }
 
-         public int IoTableIndex { get; set; }
 
-         public int AlarmEventID { get; set; }
 
-         public int WarningEventID { get; set; }
 
-         public IOAccessor(string name, int index, T[] values)
 
-         {
 
-             this.name = name;
 
-             this.index = index;
 
-             this.values = values;
 
-             getter = GetValue;
 
-             setter = SetValue;
 
-         }
 
-         private T GetValue(int index)
 
-         {
 
-             if (values != null && index >= 0 && index < values.Length)
 
-             {
 
-             }
 
-             else
 
-             {
 
-             }
 
-             Debug.Assert(values != null && index >= 0 && index < values.Length);
 
-             return values[index];
 
-         }
 
-         private void SetValue(int index, T value)
 
-         {
 
-             Debug.Assert(values != null && index >= 0 && index < values.Length);
 
-             values[index] = value;
 
-         }
 
-     }
 
-     public class DIAccessor : IOAccessor<bool>
 
-     {
 
-         private IOAccessor<bool> rawAccessor;
 
-         public bool RawData
 
-         {
 
-             get
 
-             {
 
-                 return rawAccessor.Value;
 
-             }
 
-             set
 
-             {
 
-                 rawAccessor.Value = value;
 
-             }
 
-         }
 
-         public DIAccessor(string name, int index, bool[] values, bool[] raws)
 
-             : base(name, index, values)
 
-         {
 
-             rawAccessor = new IOAccessor<bool>(name, index, raws);
 
-         }
 
-     }
 
-     public class DOAccessor : IOAccessor<bool>
 
-     {
 
-         public DOAccessor(string name, int index, bool[] values, int alarmEventID = 0, int warningEventID = 0)
 
-         : base(name, index, values)
 
-         {
 
-             setter = SetValueSafe;
 
-             AlarmEventID = alarmEventID;
 
-             WarningEventID = warningEventID;
 
-         }
 
-         public bool SetValue(bool value, out string reason, bool needCheckSet = true)
 
-         {
 
-             reason = "";
 
-             if (!needCheckSet || IO.CanSetDO(name, value, out reason))
 
-             {
 
-                 IIoProvider provider = IoProviderManager.Instance.GetProvider(this.Provider);
 
-                 if (provider != null)
 
-                 {
 
-                     if (!provider.SetValue(this, value))
 
-                     {
 
-                         reason = $"Write DO[{Name}] failed";
 
-                         return false;
 
-                     }
 
-                 }
 
-                 if (values[index] != value)
 
-                 {
 
-                     LOG.Write($"Write DO[{Name}] from {values[index]} to {value}");
 
-                 }
 
-                 values[index] = value;
 
-                 if (!needCheckSet)
 
-                 {
 
-                     return false;
 
-                 }
 
-                 else
 
-                 {
 
-                     return true;
 
-                 }
 
-             }
 
-             return false;
 
-         }
 
-         public async Task<bool> SetPulseValue(bool value, int milliSecondsDelay, bool holdValue = false)
 
-         {
 
-             if (IO.CanSetDO(name, value, out string _))
 
-             {
 
-                 IIoProvider provider = IoProviderManager.Instance.GetProvider(this.Provider);
 
-                 if (provider != null)
 
-                 {
 
-                     if (!provider.SetValue(this, value))
 
-                     {
 
-                         return false;
 
-                     }
 
-                 }
 
-                 if (values[index] != value)
 
-                 {
 
-                     LOG.Write($"Write DO[{Name}] from {values[index]} to {value}");
 
-                 }
 
-                 values[index] = value;
 
-             }
 
-             else
 
-             {
 
-                 return false;
 
-             }
 
-             await Task.Delay(milliSecondsDelay);
 
-             if (IO.CanSetDO(name, holdValue, out string _))
 
-             {
 
-                 IIoProvider provider = IoProviderManager.Instance.GetProvider(this.Provider);
 
-                 if (provider != null)
 
-                 {
 
-                     if (!provider.SetValue(this, holdValue))
 
-                     {
 
-                         return false;
 
-                     }
 
-                 }
 
-                 if (values[index] != holdValue)
 
-                 {
 
-                     LOG.Write($"Write DO[{Name}] from {values[index]} to {holdValue}");
 
-                 }
 
-                 values[index] = holdValue;
 
-                 return true;
 
-             }
 
-             else
 
-             {
 
-                 return false;
 
-             }
 
-         }
 
-         public bool Check(bool value, out string reason)
 
-         {
 
-             return IO.CanSetDO(name, value, out reason);
 
-         }
 
-         private void SetValueSafe(int index, bool value)
 
-         {
 
-             string reason;
 
-             if (IO.CanSetDO(name, value, out reason))
 
-             {
 
-                 values[index] = value;
 
-                 IIoProvider provider = IoProviderManager.Instance.GetProvider(this.Provider);
 
-                 if (provider != null)
 
-                 {
 
-                     provider.SetValue(this, value);
 
-                 }
 
-             }
 
-         }
 
-     }
 
-     public class AIAccessor : IOAccessor<short>
 
-     {
 
-         protected float[] _floatValues;
 
-         public float FloatValue
 
-         {
 
-             get
 
-             {
 
-                 return _floatValues[index];
 
-             }
 
-             set
 
-             {
 
-                 _floatValues[index] = value;
 
-             }
 
-         }
 
-         public AIAccessor(string name, int index, short[] values, float[] floatValues)
 
-         : base(name, index, values)
 
-         {
 
-             _floatValues = floatValues;
 
-         }
 
-     }
 
-     public class AOAccessor : IOAccessor<short>
 
-     {
 
-         protected float[] _floatValues;
 
-         public float FloatValue
 
-         {
 
-             get
 
-             {
 
-                 return _floatValues[index];
 
-             }
 
-             set
 
-             {
 
-                 IIoProvider provider = IoProviderManager.Instance.GetProvider(this.Provider);
 
-                 if (provider != null)
 
-                 {
 
-                     provider.SetValueFloat(this, value);
 
-                 }
 
-                 _floatValues[index] = value;
 
-             }
 
-         }
 
-         public AOAccessor(string name, int index, short[] values, float[] floatValues)
 
-         : base(name, index, values)
 
-         {
 
-             setter = SetValueSafe;
 
-             _floatValues = floatValues;
 
-         }
 
-         private void SetValueSafe(int index, short value)
 
-         {
 
-             values[index] = value;
 
-             IIoProvider provider = IoProviderManager.Instance.GetProvider(this.Provider);
 
-             if (provider != null)
 
-             {
 
-                 provider.SetValue(this, value);
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |