StartTurboPumpRoutine.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 StartTurboPumpRoutine : PMRoutineBase, IRoutine
  9. {
  10. private enum TurboPumpStep
  11. {
  12. kStart,
  13. kEnd,
  14. }
  15. private readonly int FORELINE_PRESSURE_THRESHOLD = 500;
  16. private readonly int START_TURBO_PUMP_TIMEOUT = 30000;
  17. public StartTurboPumpRoutine(JetPMBase chamber) : base(chamber)
  18. {
  19. Name = "Start TurboPump";
  20. }
  21. public RState Start(params object[] objs)
  22. {
  23. if (_chamber.IsTurboPumpRunning)
  24. {
  25. Stop("Turbo Pump 已经运行");
  26. return RState.Failed;
  27. }
  28. if(!_chamber.IsPumpRunning)
  29. {
  30. Stop("干泵没有启动, 请先启动干泵");
  31. return RState.Failed;
  32. }
  33. if(_chamber.ForelinePressure >= FORELINE_PRESSURE_THRESHOLD)
  34. {
  35. Stop($"Foreline:{_chamber.ForelinePressure} 压力太高, 不能启动 Turbo Pump");
  36. return RState.Failed;
  37. }
  38. Reset();
  39. _chamber.OpenValve(ValveType.FastPump, false);
  40. _chamber.OpenValve(ValveType.SoftPump, false);
  41. _chamber.TurnTurboPump(true);
  42. return Runner.Start(Module, Name);
  43. }
  44. public RState Monitor()
  45. {
  46. Runner.Wait((int)TurboPumpStep.kStart, () => { return _chamber.IsTurboPumpRunning; }, START_TURBO_PUMP_TIMEOUT)
  47. .End((int)TurboPumpStep.kEnd, NullFun, _delay_50ms);
  48. return Runner.Status;
  49. }
  50. public void Abort()
  51. {
  52. _chamber.CloseValves();
  53. _chamber.TurnTurboPump(false);
  54. }
  55. }
  56. }