MFPumpRoutine.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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. public MFPumpRoutine(JetTM jetTM, ModuleName mod) : base(mod)
  30. {
  31. _JetTM = jetTM;
  32. Name = "Pump Down";
  33. }
  34. public RState Start(params object[] objs)
  35. {
  36. if (_JetTM.CheckLidClosed(Module) &&
  37. _JetTM.CheckVentValveClosed(Module) &&
  38. _JetTM.CheckPurgeValveClosed(Module))
  39. {
  40. Reset();
  41. _pumpBasePressure = SC.GetValue<double>($"{Module}.PumpBasePressure");
  42. _pumpCrossingPressure = SC.GetValue<double>($"{Module}.PumpCrossingPressure");
  43. _pumpingTimeout = SC.GetValue<int>($"{Module}.PumpingTimeout") * 1000;
  44. if (Module == ModuleName.LLA || Module == ModuleName.LLB)
  45. _switchLLPumpDelay = SC.GetValue<int>($"{Module}.SwitchLLPumpDelay");
  46. else
  47. _switchLLPumpDelay = 0;
  48. //前端压力值高于某个数值
  49. _forelinePressure = SC.GetValue<int>($"{Module}.PumpForelinePressureLimit");
  50. if (_JetTM.CheckPumpIsRunning(Module) && _JetTM.GetModuleForelinePressure(Module) > _forelinePressure)
  51. {
  52. LOG.Write(eEvent.ERR_TM, Module, $"Cannot start pumpdown, drypump running:{_JetTM.CheckPumpIsRunning(Module)}, ForelinePressure:{_JetTM.GetModulePressure(Module)}=>Target:{_forelinePressure}");
  53. return RState.Failed;
  54. }
  55. return Runner.Start(Module, Name);
  56. }
  57. return RState.Failed;
  58. }
  59. public RState Monitor()
  60. {
  61. Runner.Wait(PumpStep.kWaitPeerModule, WaitPeerModule, _delay_60s)
  62. .Run(PumpStep.kSoftPump, OpenSoftPump, () => { return _JetTM.GetModulePressure(Module) < _pumpCrossingPressure; }, _pumpingTimeout)
  63. .Run(PumpStep.kFastPump, SwitchFastPump, IsPressureReady, _pumpingTimeout)
  64. .Run(PumpStep.kClosePumpValves, ClosePumpValves, NullFun)
  65. .Delay(PumpStep.kDelayForSwitchPump, _switchLLPumpDelay)
  66. .End(PumpStep.kSwitchLLPump, ReleaseLLPump, NullFun);
  67. return Runner.Status;
  68. }
  69. private bool WaitPeerModule()
  70. {
  71. if (!IsPressureReady() && IsLLModule())
  72. {
  73. //return _JetTM.TryGetLLPump(Module);
  74. return true;
  75. }
  76. return true;
  77. }
  78. private bool IsLLModule()
  79. {
  80. return Module == ModuleName.LLA || Module == ModuleName.LLB;
  81. }
  82. private bool IsPressureReady()
  83. {
  84. return _JetTM.GetModulePressure(Module) < _pumpBasePressure;
  85. }
  86. private bool OpenSoftPump()
  87. {
  88. if (!IsPressureReady())
  89. {
  90. _JetTM.TurnSoftPumpValve(Module, true);
  91. }
  92. return true;
  93. }
  94. private bool SwitchFastPump()
  95. {
  96. if (_JetTM.GetModulePressure(Module) > (_pumpBasePressure-5))
  97. {
  98. _JetTM.TurnSoftPumpValve(Module, false);
  99. _JetTM.TurnFastPumpValve(Module, true);
  100. }
  101. return true;
  102. }
  103. private bool ClosePumpValves()
  104. {
  105. _JetTM.TurnSoftPumpValve(Module, false);
  106. _JetTM.TurnFastPumpValve(Module, false);
  107. return true;
  108. }
  109. private bool ReleaseLLPump()
  110. {
  111. if (Module == ModuleName.LLA || Module == ModuleName.LLB)
  112. _JetTM.ReleasePump(Module);
  113. return true;
  114. }
  115. public void Abort()
  116. {
  117. ClosePumpValves();
  118. }
  119. }
  120. }