PMPurgeRoutine.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using Aitex.Core.RT.Routine;
  2. using Aitex.Core.RT.SCCore;
  3. using Venus_RT.Devices;
  4. using MECF.Framework.Common.Routine;
  5. using Venus_Core;
  6. namespace Venus_RT.Modules.PMs
  7. {
  8. class PMPurgeRoutine : PMRoutineBase, IRoutine
  9. {
  10. private enum PurgeStep
  11. {
  12. kCloseValvesExceptN2Purge,
  13. kPurgeVent,
  14. kStopVent,
  15. kCloseISOValve,
  16. kSoftPump,
  17. kFastPump,
  18. kOpenISOValve,
  19. kRoughPump,
  20. kCloseFastPump,
  21. kPurgeDelay,
  22. kEnd,
  23. }
  24. public int PurgeCounter { get; private set; }
  25. private readonly int _forelinePressure = 200;
  26. private int _purgeVentPressure = 1000;
  27. private int _roughPumpDownPressure = 75;
  28. private int _purgePumpTime = 60;
  29. private int _purgeCycleCount = 30;
  30. public PMPurgeRoutine(JetPM chamber) : base(chamber)
  31. {
  32. Name = "PM Purge";
  33. }
  34. public RState Start(params object[] objs)
  35. {
  36. if (CheckLidLoadLock() &&
  37. CheckSlitDoor() &&
  38. CheckDryPump() &&
  39. CheckTurboPump())
  40. {
  41. _purgeVentPressure = SC.GetValue<int>($"{Module}.Purge.PurgeVentPressure");
  42. _roughPumpDownPressure = SC.GetValue<int>($"{Module}.Purge.PurgePumpPressure");
  43. _purgePumpTime = SC.GetValue<int>($"{Module}.Purge.PurgePumpTime");
  44. _purgeCycleCount = SC.GetValue<int>($"{Module}.Purge.PurgeCycleCount");
  45. Reset();
  46. CloseValvesExceptN2Purge();
  47. PurgeCounter = 0;
  48. return Runner.Start(Module, Name);
  49. }
  50. return RState.Failed;
  51. }
  52. public RState Monitor()
  53. {
  54. Runner.Delay((int)PurgeStep.kCloseValvesExceptN2Purge, _delay_1s)
  55. .LoopStart((int)PurgeStep.kPurgeVent, "Purge Cycle", _purgeCycleCount, OpenVentValves, () => { return _chamber.ChamberPressure >= _purgeVentPressure; })
  56. .LoopRun((int)PurgeStep.kStopVent, CloseVentValves, _delay_1s)
  57. .LoopRun((int)PurgeStep.kCloseISOValve, HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, false), _delay_1s)
  58. .LoopRun((int)PurgeStep.kSoftPump, HOFs.WrapAction(_chamber.OpenValve, ValveType.SoftPump, true), () => { return _chamber.ChamberPressure <= _roughPumpDownPressure; })
  59. .LoopRun((int)PurgeStep.kFastPump, StartFastPump, () => { return _chamber.ForelinePressure <= _forelinePressure; })
  60. .LoopRun((int)PurgeStep.kOpenISOValve, HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, true), _delay_1s)
  61. .LoopRun((int)PurgeStep.kRoughPump, HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPurge, true), _purgePumpTime * 1000)
  62. .LoopEnd((int)PurgeStep.kCloseFastPump, CloseFastPump, _delay_1s)
  63. .Delay((int)PurgeStep.kPurgeDelay, _delay_1s)
  64. .End((int)PurgeStep.kEnd, FinalStep, _delay_1s);
  65. return Runner.Status;
  66. }
  67. public void Abort()
  68. {
  69. CloseAllValves();
  70. }
  71. private void CloseValvesExceptN2Purge()
  72. {
  73. _chamber.OpenValve(ValveType.Guage, false);
  74. _chamber.OpenValve(ValveType.SoftPump, false);
  75. _chamber.OpenValve(ValveType.FastPump, false);
  76. _chamber.TurnPendulumValve(false);
  77. _chamber.OpenValve(ValveType.GasFinal, false);
  78. _chamber.OpenValve(ValveType.N2, false);
  79. _chamber.OpenValve(ValveType.PVN22, false);
  80. _chamber.OpenValve(ValveType.TurboPumpPumping, true);
  81. _chamber.OpenValve(ValveType.TurboPumpPurge, true);
  82. }
  83. private bool OpenVentValves()
  84. {
  85. _chamber.OpenValve(ValveType.GasFinal, true);
  86. _chamber.OpenValve(ValveType.N2, true);
  87. _chamber.OpenValve(ValveType.PVN22, true);
  88. return true;
  89. }
  90. private bool CloseVentValves()
  91. {
  92. _chamber.OpenValve(ValveType.GasFinal, false);
  93. _chamber.OpenValve(ValveType.N2, false);
  94. _chamber.OpenValve(ValveType.PVN22, false);
  95. _chamber.OpenValve(ValveType.TurboPumpPurge, false);
  96. return true;
  97. }
  98. private bool StartFastPump()
  99. {
  100. _chamber.OpenValve(ValveType.SoftPump, false);
  101. _chamber.OpenValve(ValveType.FastPump, true);
  102. return true;
  103. }
  104. private bool FinalStep()
  105. {
  106. _chamber.OpenValve(ValveType.Guage, true);
  107. _chamber.TurnPendulumValve(true);
  108. return true;
  109. }
  110. private bool CloseFastPump()
  111. {
  112. _chamber.OpenValve(ValveType.FastPump, false);
  113. PurgeCounter++;
  114. return true;
  115. }
  116. }
  117. }