EfemSafeCloseRoutine.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using Aitex.Core.RT.Log;
  2. using Aitex.Core.RT.Routine;
  3. using Aitex.Core.Util;
  4. using CyberX8_Core;
  5. using CyberX8_RT.Devices.EFEM;
  6. using MECF.Framework.Common.Equipment;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace CyberX8_RT.Modules.EFEM
  13. {
  14. public class EfemSafeCloseRoutine : ModuleRoutineBase, IRoutine
  15. {
  16. private enum SafeCloseStep
  17. {
  18. Close,
  19. Resume,
  20. ResumeActionDoneCheck,
  21. End
  22. }
  23. EfemBase _efem;
  24. private EfemEntity _efemEntity;
  25. public EfemSafeCloseRoutine(EfemBase efem) : base(ModuleName.EFEM)
  26. {
  27. _efem = efem;
  28. }
  29. /// <summary>
  30. /// 启动
  31. /// </summary>
  32. /// <param name="objs"></param>
  33. /// <returns></returns>
  34. public RState Start(params object[] objs)
  35. {
  36. return Runner.Start(Module, "Save Close");
  37. }
  38. /// <summary>
  39. /// 监控
  40. /// </summary>
  41. /// <returns></returns>
  42. public RState Monitor()
  43. {
  44. Runner.Run(SafeCloseStep.Close, () => { return Close(); }, _delay_1ms)
  45. .Run(SafeCloseStep.Resume, () => { return Resume(); }, CheckResumeDone,_delay_1s)
  46. .Wait(SafeCloseStep.ResumeActionDoneCheck, ResumeActionDoneCheck)
  47. .End(SafeCloseStep.End, NullFun, 0);
  48. return Runner.Status;
  49. }
  50. /// <summary>
  51. /// 暂停功能
  52. /// </summary>
  53. /// <returns></returns>
  54. private bool Resume()
  55. {
  56. return _efem.Resume();
  57. }
  58. /// <summary>
  59. /// 检查是否收到Resume_rdy
  60. /// </summary>
  61. /// <returns></returns>
  62. private bool CheckResumeDone()
  63. {
  64. return _efem.IsResumeRDYReceived;
  65. }
  66. /// <summary>
  67. /// 检查Resume动作是否完成
  68. /// </summary>
  69. /// <returns></returns>
  70. private bool ResumeActionDoneCheck()
  71. {
  72. if (_efem.Status == RState.End)
  73. {
  74. return true;
  75. }
  76. else if (_efem.Status == RState.Failed)
  77. {
  78. LOG.Write(eEvent.ERR_EFEM_COMMON_FAILED, Module, $"Efem Resume Action failed: {_efem.Status}");
  79. return true;
  80. }
  81. return false;
  82. }
  83. private bool Close()
  84. {
  85. _efemEntity = Singleton<RouteManager>.Instance.GetModule<EfemEntity>(Module.ToString());
  86. bool myBool = false;
  87. return _efemEntity.DoorUnlock(new object[] { myBool });
  88. }
  89. public void Abort()
  90. {
  91. Runner.Stop("Manual Abort");
  92. }
  93. }
  94. }