using Aitex.Core.RT.DataCenter; using Aitex.Core.RT.Device; using Aitex.Core.RT.IOCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace FurnaceRT.Devices { public class IoDoor : BaseDevice, IDevice { #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; } } #endregion public IoDoor(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()); //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 void Open() { _doClose.Value = false; _doOpen.Value = true; } public void Close() { _doOpen.Value = false; _doClose.Value = true; } } }