IoShutter.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using Aitex.Core.RT.DataCenter;
  2. using Aitex.Core.RT.Device;
  3. using Aitex.Core.RT.IOCore;
  4. using MECF.Framework.Common.Event;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Xml;
  11. namespace FurnaceRT.Devices
  12. {
  13. public class IoShutter : BaseDevice, IDevice
  14. {
  15. protected enum State
  16. {
  17. Idle,
  18. Cycle,
  19. }
  20. #region Filed
  21. private DIAccessor _diOpen;
  22. private DIAccessor _diClose;
  23. private DOAccessor _doOpen;
  24. private DOAccessor _doClose;
  25. #endregion
  26. #region Property
  27. public DeviceStatus OpenCloseStatus
  28. {
  29. get
  30. {
  31. if (_diOpen != null && _diClose != null && _diOpen.Value && !_diClose.Value)
  32. return DeviceStatus.Open;
  33. if (_diOpen != null && _diClose != null && !_diOpen.Value && _diClose.Value)
  34. return DeviceStatus.Close;
  35. return DeviceStatus.Unknown;
  36. }
  37. }
  38. public AlarmEventItem AutoShutterMoveFailedForInterlock { get; set; }
  39. public AlarmEventItem AutoShutterOpenTimeOut { get; set; }
  40. public AlarmEventItem AutoShutterCloseTimeOut { get; set; }
  41. #endregion
  42. public IoShutter(string module, XmlElement node, string ioModule = "")
  43. {
  44. base.Module = string.IsNullOrEmpty(node.GetAttribute("module")) ? module : node.GetAttribute("module");
  45. base.Name = node.GetAttribute("id");
  46. base.Display = node.GetAttribute("display");
  47. base.DeviceID = node.GetAttribute("schematicId");
  48. _diOpen = ParseDiNode("diOpen", node, ioModule);
  49. _diClose = ParseDiNode("diClose", node, ioModule);
  50. _doOpen = ParseDoNode("doOpen", node, ioModule);
  51. _doClose = ParseDoNode("doClose", node, ioModule);
  52. }
  53. public bool Initialize()
  54. {
  55. DATA.Subscribe($"{Module}.{Name}.OpenCloseStatus", () => OpenCloseStatus.ToString());
  56. DATA.Subscribe($"{Module}.{Name}.DiOpen", () => _diOpen.Value);
  57. DATA.Subscribe($"{Module}.{Name}.DiClose", () => _diClose.Value);
  58. DATA.Subscribe($"{Module}.{Name}.DoOpen", () => _doOpen.Value);
  59. DATA.Subscribe($"{Module}.{Name}.DoClose", () => _doClose.Value);
  60. //OP.Subscribe($"{Module}.{Name}.SetRetract", (string cmd, object[] param) =>
  61. //{
  62. // SetRetract(out string reason);
  63. // return true;
  64. //});
  65. return true;
  66. }
  67. public void Monitor()
  68. {
  69. }
  70. public void Reset()
  71. {
  72. }
  73. public void Terminate()
  74. {
  75. }
  76. public bool SetOpen(bool isOpen, out string reason)
  77. {
  78. if (isOpen)
  79. {
  80. _doClose.SetValue(!isOpen, out reason);
  81. return _doOpen.SetValue(isOpen, out reason);
  82. }
  83. else
  84. {
  85. _doOpen.SetValue(isOpen, out reason);
  86. return _doClose.SetValue(!isOpen, out reason);
  87. }
  88. }
  89. }
  90. }