| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 | using System;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.RT.SCCore;using Aitex.Core.Util;namespace Aitex.Core.RT.Device.Unit{    public class IoSensor : BaseDevice, IDevice    {        private DIAccessor _di = null;        private DOAccessor _do = null;        private R_TRIG _trigTextOut = new R_TRIG();        private bool _textOutTrigValue;        private string _warningText;        private string _alarmText;        private string _infoText;        public Action WarningAction        {            get;            set;        }        [Subscription(AITSensorProperty.Value)]        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;            }        }        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);            return true;        }        public void Terminate()        {        }        public void Monitor()        {            try            {                if (Name == "SensorCDAPressureOk2" && SC.GetValue<bool>("System.IsIgnoreCDAPressure2Alarm")) return;                _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);                    }                }            }            catch (Exception ex)            {                LOG.Write(ex);            }        }        public void Reset()        {            _trigTextOut.RST = true;        }    }}
 |