PMGaslinePurgeRoutine.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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. using System.Collections.Generic;
  7. using System.Linq;
  8. using System;
  9. namespace Venus_RT.Modules.PMs
  10. {
  11. class PMGaslinePurgeRoutine : PMRoutineBase, IRoutine
  12. {
  13. private enum GaslinePurgeStep
  14. {
  15. kPreTurnValves,
  16. kOpenPVN21_PV12_1,
  17. kFlowMFC1_2,
  18. kClosePV12_3,
  19. kOpenPV22_4,
  20. kFlowMFC2_5,
  21. kClosePV22_6,
  22. kOpenPV32_7,
  23. kFlowMFC3_8,
  24. kClosePV32_9,
  25. kOpenPV42_10,
  26. kFlowMFC4_11,
  27. kClosePV42_12,
  28. kClosePVN21_13,
  29. kOpenMFC1_14,
  30. kCloseMFC1_15,
  31. kOpenMFC2_16,
  32. kCloseMFC2_17,
  33. kOpenMFC3_18,
  34. kCloseMFC3_19,
  35. kOpenMFC4_20,
  36. kCloseMFC4_21,
  37. kEnd,
  38. }
  39. private enum NewGaslinePurgeStep
  40. {
  41. kPreTurnValves,
  42. kStartPurge,
  43. kPumpGasLines,
  44. kStopPumpGasLines,
  45. kPurgeGasLines,
  46. kStopPurgeGasLines,
  47. kCloseAllValves,
  48. kEnd,
  49. }
  50. public int PurgeCounter { get; private set; }
  51. private int _gasPurgeFlowTime = 5;
  52. private int _gasPurgePumpTime = 10;
  53. private int _gasPurgeCycleCount = 30;
  54. private readonly double _GasFlow = 1.0;
  55. bool Flow_MFC1() => _chamber.FlowGas(1, _GasFlow);
  56. bool Flow_MFC2() => _chamber.FlowGas(2, _GasFlow);
  57. bool Flow_MFC3() => _chamber.FlowGas(3, _GasFlow);
  58. bool Flow_MFC4() => _chamber.FlowGas(4, _GasFlow);
  59. private string[] _gasLineNums;
  60. public PMGaslinePurgeRoutine(JetPMBase chamber) : base(chamber)
  61. {
  62. Name = "GasLine Purge";
  63. }
  64. public RState Start(params object[] objs)
  65. {
  66. if (CheckLid() &&
  67. CheckSlitDoor() &&
  68. CheckDryPump())
  69. {
  70. _gasPurgeFlowTime = SC.GetValue<int>($"{Module}.Purge.GasPurgeFlowTime");
  71. _gasPurgePumpTime = SC.GetValue<int>($"{Module}.Purge.GasPurgePumpTime");
  72. _gasPurgeCycleCount = SC.GetValue<int>($"{Module}.Purge.GasPurgeCycleCount");
  73. Reset();
  74. PreTurnValves();
  75. _gasLineNums = objs[0].ToString().Split(',');
  76. PurgeCounter = 0;
  77. return Runner.Start(Module, Name);
  78. }
  79. return RState.Failed;
  80. }
  81. public RState Monitor()
  82. {
  83. //Runner.Delay(GaslinePurgeStep.kPreTurnValves, _delay_1s)
  84. // .LoopStart(GaslinePurgeStep.kOpenPVN21_PV12_1, "Gas Purge Cycle", _gasPurgeCycleCount, OpenPVN21_PV12, _delay_1s)
  85. // .LoopRun(GaslinePurgeStep.kFlowMFC1_2, Flow_MFC1, _gasPurgeFlowTime * 1000)
  86. // .LoopRun(GaslinePurgeStep.kClosePV12_3, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV12, false), _delay_1s)
  87. // .LoopRun(GaslinePurgeStep.kOpenPV22_4, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV22, true), _delay_1s)
  88. // .LoopRun(GaslinePurgeStep.kFlowMFC2_5, Flow_MFC2, _gasPurgeFlowTime * 1000)
  89. // .LoopRun(GaslinePurgeStep.kClosePV22_6, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV22, false), _delay_1s)
  90. // .LoopRun(GaslinePurgeStep.kOpenPV32_7, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV32, true), _delay_1s)
  91. // .LoopRun(GaslinePurgeStep.kFlowMFC3_8, Flow_MFC3, _gasPurgeFlowTime * 1000)
  92. // .LoopRun(GaslinePurgeStep.kClosePV32_9, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV32, false), _delay_1s)
  93. // .LoopRun(GaslinePurgeStep.kOpenPV42_10, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV42, true), _delay_1s)
  94. // .LoopRun(GaslinePurgeStep.kFlowMFC4_11, Flow_MFC4, _gasPurgeFlowTime * 1000)
  95. // .LoopRun(GaslinePurgeStep.kClosePV42_12, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV42, false), _delay_1s)
  96. // .LoopRun(GaslinePurgeStep.kClosePVN21_13, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV21, false), _delay_1s)
  97. // .LoopRun(GaslinePurgeStep.kOpenMFC1_14, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc1, true), _gasPurgePumpTime * 1000)
  98. // .LoopRun(GaslinePurgeStep.kCloseMFC1_15, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc1, false), _delay_1s)
  99. // .LoopRun(GaslinePurgeStep.kOpenMFC2_16, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc2, true), _gasPurgePumpTime * 1000)
  100. // .LoopRun(GaslinePurgeStep.kCloseMFC2_17, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc2, false), _delay_1s)
  101. // .LoopRun(GaslinePurgeStep.kOpenMFC3_18, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc3, true), _gasPurgePumpTime * 1000)
  102. // .LoopRun(GaslinePurgeStep.kCloseMFC3_19, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc3, false), _delay_1s)
  103. // .LoopRun(GaslinePurgeStep.kOpenMFC4_20, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc4, true), _gasPurgePumpTime * 1000)
  104. // .LoopEnd(GaslinePurgeStep.kCloseMFC4_21, StopAllGas, _delay_1s)
  105. // .End(GaslinePurgeStep.kEnd, NullFun, _delay_50ms);
  106. Runner.Delay(NewGaslinePurgeStep.kPreTurnValves, _delay_1s)
  107. .LoopStart(NewGaslinePurgeStep.kStartPurge, "Gas Purge Cycle", _gasPurgeCycleCount, PreparePurge, _delay_1s)
  108. .LoopRun(NewGaslinePurgeStep.kPumpGasLines, StartPump, _gasPurgePumpTime * 1000)
  109. .LoopRun(NewGaslinePurgeStep.kStopPumpGasLines, StopPump)
  110. .LoopRun(NewGaslinePurgeStep.kPurgeGasLines, StartPurge, _gasPurgeFlowTime * 1000)
  111. .LoopRun(NewGaslinePurgeStep.kStopPurgeGasLines, StopPurge)
  112. .LoopEnd(NewGaslinePurgeStep.kCloseAllValves, StopAllGas, _delay_1s)
  113. .End(GaslinePurgeStep.kEnd, NullFun, _delay_50ms);
  114. return Runner.Status;
  115. }
  116. public void Abort()
  117. {
  118. CloseAllValves();
  119. }
  120. public bool PreparePurge()
  121. {
  122. return true;
  123. }
  124. private void PreTurnValves()
  125. {
  126. _chamber.OpenValve(ValveType.Guage, false);
  127. _chamber.OpenValve(ValveType.SoftPump, false);
  128. _chamber.OpenValve(ValveType.FastPump, false);
  129. _chamber.TurnPendulumValve(false);
  130. _chamber.OpenValve(ValveType.GasFinal, false);
  131. _chamber.OpenValve(ValveType.N2, false);
  132. _chamber.OpenValve(ValveType.PVN22, false);
  133. _chamber.OpenValve(ValveType.TurboPumpPumping, false);
  134. _chamber.OpenValve(ValveType.TurboPumpPurge, false);
  135. }
  136. private bool OpenPVN21_PV12()
  137. {
  138. _chamber.OpenValve(ValveType.PVN21, true);
  139. _chamber.OpenValve(ValveType.PV12, true);
  140. return true;
  141. }
  142. private bool StopAllGas()
  143. {
  144. _chamber.StopGas(1);
  145. _chamber.StopGas(2);
  146. _chamber.StopGas(3);
  147. _chamber.StopGas(4);
  148. PurgeCounter++;
  149. return true;
  150. }
  151. private bool StartPump()
  152. {
  153. _gasLineNums.ToList().ForEach(x =>
  154. {
  155. _chamber.PumpGas(Convert.ToInt32(x) - 1);
  156. });
  157. return true;
  158. }
  159. private bool StopPump()
  160. {
  161. _chamber.OpenValve(ValveType.N2Purge2, false);
  162. return true;
  163. }
  164. private bool StartPurge()
  165. {
  166. _gasLineNums.ToList().ForEach(x =>
  167. {
  168. _chamber.PurgeGas(Convert.ToInt32(x) - 1);
  169. });
  170. return true;
  171. }
  172. private bool StopPurge()
  173. {
  174. _chamber.OpenValve(ValveType.PVN21, false);
  175. return true;
  176. }
  177. }
  178. }