MFPumpRoutine.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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 MECF.Framework.Common.Equipment;
  6. using Venus_Core;
  7. using System.Threading;
  8. using Aitex.Core.RT.Log;
  9. namespace Venus_RT.Modules.TM
  10. {
  11. class MFPumpRoutine : ModuleRoutineBase, IRoutine
  12. {
  13. private enum PumpStep
  14. {
  15. kWaitPeerModule,
  16. kSoftPump,
  17. kFastPump,
  18. kClosePumpValves,
  19. kDelayForSwitchPump,
  20. kSwitchLLPump
  21. }
  22. private double _pumpBasePressure;
  23. private double _pumpCrossingPressure;
  24. private int _pumpingTimeout;
  25. private int _switchLLPumpDelay;
  26. private readonly JetTM _JetTM;
  27. private int _forelinePressure = 200;
  28. //private bool _pumpIsRunning;
  29. private bool _skipRepeatPump = false;
  30. public MFPumpRoutine(JetTM jetTM, ModuleName mod) : base(mod)
  31. {
  32. _JetTM = jetTM;
  33. Name = "Pump Down";
  34. }
  35. public RState Start(params object[] objs)
  36. {
  37. _JetTM.TurnVentValve(Module, false);
  38. _JetTM.TurnPurgeValve(Module, false);
  39. if (_JetTM.CheckLidClosed(Module) &&
  40. _JetTM.CheckVentValveClosed(Module) &&
  41. _JetTM.CheckPurgeValveClosed(Module))
  42. {
  43. Reset();
  44. _pumpBasePressure = SC.GetValue<double>($"{Module}.PumpBasePressure");
  45. _pumpCrossingPressure = SC.GetValue<double>($"{Module}.PumpCrossingPressure");
  46. _pumpingTimeout = SC.GetValue<int>($"{Module}.PumpingTimeout") * 1000;
  47. if (Module == ModuleName.LLA || Module == ModuleName.LLB)
  48. _switchLLPumpDelay = SC.GetValue<int>($"{Module}.SwitchLLPumpDelay");
  49. else
  50. _switchLLPumpDelay = 0;
  51. _skipRepeatPump = false;
  52. if (ModuleHelper.IsLoadLock(Module) && IsPressureReady())
  53. _skipRepeatPump = true;
  54. //前端压力值高于某个数值
  55. _forelinePressure = SC.GetValue<int>($"{Module}.PumpForelinePressureLimit");
  56. if (_JetTM.CheckPumpIsRunning(Module)==false || _JetTM.GetModuleForelinePressure(Module) > _forelinePressure)
  57. {
  58. LOG.Write(eEvent.ERR_TM, Module, $"Cannot start pumpdown, drypump running:{_JetTM.CheckPumpIsRunning(Module)}, ForelinePressure:{_JetTM.GetModuleForelinePressure(Module)}=>Target:{_forelinePressure}");
  59. return RState.Failed;
  60. }
  61. return Runner.Start(Module, Name);
  62. }
  63. return RState.Failed;
  64. }
  65. public RState Monitor()
  66. {
  67. if (_skipRepeatPump)
  68. {
  69. Notify($" pressure: {_JetTM.GetModulePressure(Module)} is ready, skip the the pumping routine.");
  70. ClosePumpValves();
  71. return RState.End;
  72. }
  73. Runner.Wait(PumpStep.kWaitPeerModule, WaitPeerModule, _delay_60s)
  74. .Run(PumpStep.kSoftPump, OpenSoftPump, () => { return _JetTM.GetModulePressure(Module) < _pumpCrossingPressure; }, _pumpingTimeout)
  75. .Run(PumpStep.kFastPump, SwitchFastPump, IsPressureReady, _pumpingTimeout)
  76. .Run(PumpStep.kClosePumpValves, ClosePumpValves, NullFun)
  77. .Delay(PumpStep.kDelayForSwitchPump, _switchLLPumpDelay)
  78. .End(PumpStep.kSwitchLLPump, ReleaseLLPump, NullFun);
  79. return Runner.Status;
  80. }
  81. private bool WaitPeerModule()
  82. {
  83. if (!IsPressureReady() && IsLLModule())
  84. {
  85. //return _JetTM.TryGetLLPump(Module);
  86. return true;
  87. }
  88. return true;
  89. }
  90. private bool IsLLModule()
  91. {
  92. return Module == ModuleName.LLA || Module == ModuleName.LLB;
  93. }
  94. private bool IsPressureReady()
  95. {
  96. return _JetTM.GetModulePressure(Module) < _pumpBasePressure;
  97. }
  98. private bool OpenSoftPump()
  99. {
  100. if (!IsPressureReady())
  101. {
  102. _JetTM.TurnSoftPumpValve(Module, true);
  103. }
  104. return true;
  105. }
  106. private bool SwitchFastPump()
  107. {
  108. if (_JetTM.GetModulePressure(Module) > (_pumpBasePressure-5))
  109. {
  110. _JetTM.TurnSoftPumpValve(Module, false);
  111. _JetTM.TurnFastPumpValve(Module, true);
  112. }
  113. return true;
  114. }
  115. private bool ClosePumpValves()
  116. {
  117. _JetTM.TurnSoftPumpValve(Module, false);
  118. _JetTM.TurnFastPumpValve(Module, false);
  119. return true;
  120. }
  121. private bool ReleaseLLPump()
  122. {
  123. if (Module == ModuleName.LLA || Module == ModuleName.LLB)
  124. _JetTM.ReleasePump(Module);
  125. return true;
  126. }
  127. public void Abort()
  128. {
  129. ClosePumpValves();
  130. }
  131. }
  132. }