IoShutter.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. #region Filed
  16. private DIAccessor _diOpen;
  17. private DIAccessor _diClose;
  18. private DOAccessor _doOpen;
  19. private DOAccessor _doClose;
  20. #endregion
  21. #region Property
  22. public DeviceStatus OpenCloseStatus
  23. {
  24. get
  25. {
  26. if (_diOpen != null && _diClose != null && _diOpen.Value && !_diClose.Value)
  27. return DeviceStatus.Open;
  28. if (_diOpen != null && _diClose != null && !_diOpen.Value && _diClose.Value)
  29. return DeviceStatus.Close;
  30. return DeviceStatus.Unknown;
  31. }
  32. }
  33. public AlarmEventItem AutoShutterMoveFailedForInterlock { get; set; }
  34. public AlarmEventItem AutoShutterOpenTimeOut { get; set; }
  35. public AlarmEventItem AutoShutterCloseTimeOut { get; set; }
  36. #endregion
  37. public IoShutter(string module, XmlElement node, string ioModule = "")
  38. {
  39. base.Module = string.IsNullOrEmpty(node.GetAttribute("module")) ? module : node.GetAttribute("module");
  40. base.Name = node.GetAttribute("id");
  41. base.Display = node.GetAttribute("display");
  42. base.DeviceID = node.GetAttribute("schematicId");
  43. _diOpen = ParseDiNode("diOpen", node, ioModule);
  44. _diClose = ParseDiNode("diClose", node, ioModule);
  45. _doOpen = ParseDoNode("doOpen", node, ioModule);
  46. _doClose = ParseDoNode("doClose", node, ioModule);
  47. }
  48. public bool Initialize()
  49. {
  50. DATA.Subscribe($"{Module}.{Name}.OpenCloseStatus", () => OpenCloseStatus.ToString());
  51. DATA.Subscribe($"{Module}.{Name}.DiOpen", () => _diOpen.Value);
  52. DATA.Subscribe($"{Module}.{Name}.DiClose", () => _diClose.Value);
  53. DATA.Subscribe($"{Module}.{Name}.DoOpen", () => _doOpen.Value);
  54. DATA.Subscribe($"{Module}.{Name}.DoClose", () => _doClose.Value);
  55. //OP.Subscribe($"{Module}.{Name}.SetRetract", (string cmd, object[] param) =>
  56. //{
  57. // SetRetract(out string reason);
  58. // return true;
  59. //});
  60. return true;
  61. }
  62. public void Monitor()
  63. {
  64. }
  65. public void Reset()
  66. {
  67. }
  68. public void Terminate()
  69. {
  70. }
  71. public bool SetOpen(bool isOpen, out string reason)
  72. {
  73. if (isOpen)
  74. {
  75. _doClose.SetValue(!isOpen, out reason);
  76. return _doOpen.SetValue(isOpen, out reason);
  77. }
  78. else
  79. {
  80. _doOpen.SetValue(isOpen, out reason);
  81. return _doClose.SetValue(!isOpen, out reason);
  82. }
  83. }
  84. }
  85. }