MFPumpRoutine.cs 4.9 KB

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