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); } } } }