| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | using Aitex.Core.RT.DataCenter;using Aitex.Core.RT.Device;using Aitex.Core.RT.IOCore;using MECF.Framework.Common.Event;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml;namespace FurnaceRT.Devices{    public class IoShutter : BaseDevice, IDevice    {        protected enum State        {            Idle,            Cycle,        }        #region Filed        private DIAccessor _diOpen;        private DIAccessor _diClose;        private DOAccessor _doOpen;        private DOAccessor _doClose;        #endregion        #region Property        public DeviceStatus OpenCloseStatus        {            get            {                if (_diOpen != null && _diClose != null && _diOpen.Value && !_diClose.Value)                    return DeviceStatus.Open;                if (_diOpen != null && _diClose != null && !_diOpen.Value && _diClose.Value)                    return DeviceStatus.Close;                return DeviceStatus.Unknown;            }        }        public AlarmEventItem AutoShutterMoveFailedForInterlock { get; set; }        public AlarmEventItem AutoShutterOpenTimeOut { get; set; }        public AlarmEventItem AutoShutterCloseTimeOut { get; set; }        #endregion        public IoShutter(string module, XmlElement node, string ioModule = "")        {            base.Module = string.IsNullOrEmpty(node.GetAttribute("module")) ? module : node.GetAttribute("module");            base.Name = node.GetAttribute("id");            base.Display = node.GetAttribute("display");            base.DeviceID = node.GetAttribute("schematicId");            _diOpen = ParseDiNode("diOpen", node, ioModule);            _diClose = ParseDiNode("diClose", node, ioModule);            _doOpen = ParseDoNode("doOpen", node, ioModule);            _doClose = ParseDoNode("doClose", node, ioModule);        }        public bool Initialize()        {            DATA.Subscribe($"{Module}.{Name}.OpenCloseStatus", () => OpenCloseStatus.ToString());            DATA.Subscribe($"{Module}.{Name}.DiOpen", () => _diOpen.Value);            DATA.Subscribe($"{Module}.{Name}.DiClose", () => _diClose.Value);            DATA.Subscribe($"{Module}.{Name}.DoOpen", () => _doOpen.Value);            DATA.Subscribe($"{Module}.{Name}.DoClose", () => _doClose.Value);            //OP.Subscribe($"{Module}.{Name}.SetRetract", (string cmd, object[] param) =>            //{            //    SetRetract(out string reason);            //    return true;            //});            return true;        }        public void Monitor()        {        }        public void Reset()        {        }        public void Terminate()        {        }        public bool SetOpen(bool isOpen, out string reason)        {            if (isOpen)            {                _doClose.SetValue(!isOpen, out reason);                return _doOpen.SetValue(isOpen, out reason);            }            else            {                _doOpen.SetValue(isOpen, out reason);                return _doClose.SetValue(!isOpen, out reason);            }        }    }}
 |