| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 | using System;using System.Security.AccessControl;using System.Xml;using Aitex.Core.Common.DeviceData;using Aitex.Core.RT.DataCenter;using Aitex.Core.RT.Event;using Aitex.Core.RT.IOCore;using Aitex.Core.RT.Log;using Aitex.Core.Util;namespace Aitex.Core.RT.Device.Unit{    public class IoSensor : BaseDevice, IDevice    {        private DIAccessor _di = null;        private DOAccessor _do = null;        public DIAccessor SensorDI => _di;        public DOAccessor SensorDO => _do;        private R_TRIG _trigTextOut = new R_TRIG();		private bool _textOutTrigValue;		public bool AlarmTrigValue		{			get { return _textOutTrigValue&&!string.IsNullOrEmpty(_alarmText); }		}		private string _warningText;        private string _alarmText;        private string _infoText;        public Action WarningAction        {            get;            set;        }        public event Action<IoSensor, bool> OnSignalChanged;        public bool Value          {            get            {                if (_di != null)                    return _di.Value;                if (_do != null)                    return _do.Value;                return false;            }        }        private AITSensorData DeviceData        {            get            {                AITSensorData data = new AITSensorData()                {                    DeviceName = Name,                    DeviceSchematicId = DeviceID,                    DisplayName = Display,                    Value = Value,                };                return data;            }        }        private bool _previous;         public IoSensor(string module, XmlElement node, string ioModule = "")        {            var attrModule = node.GetAttribute("module");            base.Module = string.IsNullOrEmpty(attrModule) ? module : attrModule;            base.Name = node.GetAttribute("id");            base.Display = node.GetAttribute("display");            base.DeviceID = node.GetAttribute("schematicId");            _di = ParseDiNode("di", node, ioModule);// IO.DI[node.GetAttribute("di")];            //_do = ParseDoNode("do", node, ioModule);            _infoText = node.GetAttribute("infoText");            _warningText = node.GetAttribute("warningText");            _alarmText = node.GetAttribute("alarmText");             _textOutTrigValue = Convert.ToBoolean(string.IsNullOrEmpty(node.GetAttribute("textOutTrigValue")) ? "false" : node.GetAttribute("textOutTrigValue"));        }        public bool Initialize()        {            DATA.Subscribe($"{Module}.{Name}.DeviceData", () => DeviceData);            DATA.Subscribe($"{Module}.{Name}.Value", () => Value);            return true;        }        public void Terminate()        {        }        public void Monitor()        {            try            {                _trigTextOut.CLK = (Value == _textOutTrigValue) ;                if (_trigTextOut.Q)                {                    if (WarningAction != null)                    {                        WarningAction();                    }                    else if (!string.IsNullOrEmpty(_warningText.Trim()))                    {                        EV.PostWarningLog(Module, _warningText);                    }else if (!string.IsNullOrEmpty(_alarmText.Trim()))                    {                        EV.PostAlarmLog(Module,  _alarmText);                    }else if (!string.IsNullOrEmpty(_infoText.Trim()))                    {                        EV.PostInfoLog(Module,  _infoText);                    }                }                if (_previous != Value)                {                    if (OnSignalChanged != null)                        OnSignalChanged(this, Value);                    _previous = Value;                }            }            catch (Exception ex)            {                LOG.Write(ex);            }        }        public void Reset()        {            _trigTextOut.RST = true;        }    }}
 |