PMGaslinePurgeRoutine.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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 PMGaslinePurgeRoutine : PMRoutineBase, IRoutine
  9. {
  10. private enum GaslinePurgeStep
  11. {
  12. kPreTurnValves,
  13. kOpenPVN21_PV12_1,
  14. kFlowMFC1_2,
  15. kClosePV12_3,
  16. kOpenPV22_4,
  17. kFlowMFC2_5,
  18. kClosePV22_6,
  19. kOpenPV32_7,
  20. kFlowMFC3_8,
  21. kClosePV32_9,
  22. kOpenPV42_10,
  23. kFlowMFC4_11,
  24. kClosePV42_12,
  25. kClosePVN21_13,
  26. kOpenMFC1_14,
  27. kCloseMFC1_15,
  28. kOpenMFC2_16,
  29. kCloseMFC2_17,
  30. kOpenMFC3_18,
  31. kCloseMFC3_19,
  32. kOpenMFC4_20,
  33. kCloseMFC4_21,
  34. kEnd,
  35. }
  36. private int _gasPurgeFlowTime = 5;
  37. private int _gasPurgePumpTime = 10;
  38. private int _gasPurgeCycleCount = 30;
  39. private readonly double _GasFlow = 1.0;
  40. bool Flow_MFC1() => _chamber.FlowGas(1, _GasFlow);
  41. bool Flow_MFC2() => _chamber.FlowGas(2, _GasFlow);
  42. bool Flow_MFC3() => _chamber.FlowGas(3, _GasFlow);
  43. bool Flow_MFC4() => _chamber.FlowGas(4, _GasFlow);
  44. public PMGaslinePurgeRoutine(JetPM chamber) : base(chamber)
  45. {
  46. Name = "GasLine Purge";
  47. }
  48. public RState Start(params object[] objs)
  49. {
  50. if (CheckLidLoadLock() &&
  51. CheckSlitDoor() &&
  52. CheckDryPump() &&
  53. CheckTurboPump())
  54. {
  55. _gasPurgeFlowTime = SC.GetValue<int>($"{Module}.Purge.GasPurgeFlowTime");
  56. _gasPurgePumpTime = SC.GetValue<int>($"{Module}.Purge.GasPurgePumpTime");
  57. _gasPurgeCycleCount = SC.GetValue<int>($"{Module}.Purge.GasPurgeCycleCount");
  58. Reset();
  59. PreTurnValves();
  60. return Runner.Start(Module, Name);
  61. }
  62. return RState.Failed;
  63. }
  64. public RState Monitor()
  65. {
  66. Runner.Delay((int)GaslinePurgeStep.kPreTurnValves, _delay_1s)
  67. .LoopStart((int)GaslinePurgeStep.kOpenPVN21_PV12_1, "Gas Purge Cycle", _gasPurgeCycleCount, OpenPVN21_PV12, _delay_1s)
  68. .LoopRun((int)GaslinePurgeStep.kFlowMFC1_2, Flow_MFC1, _gasPurgeFlowTime * 1000)
  69. .LoopRun((int)GaslinePurgeStep.kClosePV12_3, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV12, false), _delay_1s)
  70. .LoopRun((int)GaslinePurgeStep.kOpenPV22_4, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV22, true), _delay_1s)
  71. .LoopRun((int)GaslinePurgeStep.kFlowMFC2_5, Flow_MFC2, _gasPurgeFlowTime * 1000)
  72. .LoopRun((int)GaslinePurgeStep.kClosePV22_6, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV22, false), _delay_1s)
  73. .LoopRun((int)GaslinePurgeStep.kOpenPV32_7, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV32, true), _delay_1s)
  74. .LoopRun((int)GaslinePurgeStep.kFlowMFC3_8, Flow_MFC3, _gasPurgeFlowTime * 1000)
  75. .LoopRun((int)GaslinePurgeStep.kClosePV32_9, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV32, false), _delay_1s)
  76. .LoopRun((int)GaslinePurgeStep.kOpenPV42_10, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV42, true), _delay_1s)
  77. .LoopRun((int)GaslinePurgeStep.kFlowMFC4_11, Flow_MFC4, _gasPurgeFlowTime * 1000)
  78. .LoopRun((int)GaslinePurgeStep.kClosePV42_12, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV42, false), _delay_1s)
  79. .LoopRun((int)GaslinePurgeStep.kClosePVN21_13, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV21, false), _delay_1s)
  80. .LoopRun((int)GaslinePurgeStep.kOpenMFC1_14, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc1, true), _gasPurgePumpTime * 1000)
  81. .LoopRun((int)GaslinePurgeStep.kCloseMFC1_15, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc1, false), _delay_1s)
  82. .LoopRun((int)GaslinePurgeStep.kOpenMFC2_16, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc2, true), _gasPurgePumpTime * 1000)
  83. .LoopRun((int)GaslinePurgeStep.kCloseMFC2_17, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc2, false), _delay_1s)
  84. .LoopRun((int)GaslinePurgeStep.kOpenMFC3_18, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc3, true), _gasPurgePumpTime * 1000)
  85. .LoopRun((int)GaslinePurgeStep.kCloseMFC3_19, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc3, false), _delay_1s)
  86. .LoopRun((int)GaslinePurgeStep.kOpenMFC4_20, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc4, true), _gasPurgePumpTime * 1000)
  87. .LoopEnd((int)GaslinePurgeStep.kCloseMFC4_21, StopAllGas, _delay_1s)
  88. .End((int)GaslinePurgeStep.kEnd, NullFun, _delay_50ms);
  89. return Runner.Status;
  90. }
  91. public void Abort()
  92. {
  93. CloseAllValves();
  94. }
  95. private void PreTurnValves()
  96. {
  97. _chamber.OpenValve(ValveType.Guage, false);
  98. _chamber.OpenValve(ValveType.SoftPump, false);
  99. _chamber.OpenValve(ValveType.FastPump, false);
  100. _chamber.TurnPendulumValve(false);
  101. _chamber.OpenValve(ValveType.GasFinal, false);
  102. _chamber.OpenValve(ValveType.N2, false);
  103. _chamber.OpenValve(ValveType.PVN22, false);
  104. _chamber.OpenValve(ValveType.TurboPumpPumping, true);
  105. _chamber.OpenValve(ValveType.TurboPumpPurge, true);
  106. }
  107. private bool OpenPVN21_PV12()
  108. {
  109. _chamber.OpenValve(ValveType.PVN21, true);
  110. _chamber.OpenValve(ValveType.PV12, true);
  111. return true;
  112. }
  113. private bool StopAllGas()
  114. {
  115. _chamber.StopGas(1);
  116. _chamber.StopGas(2);
  117. _chamber.StopGas(3);
  118. _chamber.StopGas(4);
  119. return true;
  120. }
  121. }
  122. }