PumpDownRoutine.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using System;
  2. using Aitex.Core.RT.Event;
  3. using Aitex.Core.RT.Routine;
  4. using Aitex.Core.RT.SCCore;
  5. using VirgoRT.Devices;
  6. namespace VirgoRT.Modules.PMs
  7. {
  8. class PumpDownRoutine : PMRoutineBase, IRoutine
  9. {
  10. private enum PumpSequence
  11. {
  12. kCheckLidSignal,
  13. kCheckSlitDoor,
  14. kCheckDryPumpStatus,
  15. kCloseValves,
  16. kOpenPumpingValve,
  17. kDelay,
  18. kCheckVAC,
  19. kCheckForelinePressure,
  20. kCheckThrottleValveStatus,
  21. kCheckATM,
  22. kOpenSoftPumpValve,
  23. kCloseSoftPumpValve,
  24. kFastPumpValve,
  25. kCloseFastPumpValve,
  26. kCheckChamberPressure,
  27. kCheckVACSignal,
  28. kEnd
  29. }
  30. private int _basePressure;
  31. private int _pumpValveDelay;
  32. private double _pumpTimeLimit;
  33. private readonly uint FORELINE_TARGET = 500;
  34. public PumpDownRoutine(JetPM chamber) : base(chamber)
  35. {
  36. Name = "PumpDown";
  37. bUINotify = true;
  38. }
  39. public void Terminate()
  40. {
  41. }
  42. public Result Start(params object[] objs)
  43. {
  44. // 预检查,必须关盖子
  45. if (CheckLid() == Result.RUN &&
  46. CheckSlitDoor() == Result.RUN)
  47. //&& CheckDryPump() == Result.RUN)
  48. {
  49. Reset();
  50. //关闭所有阀门
  51. _chamber.CloseValves();
  52. //_PressureTrip1 = SC.GetValue<int>($"{Module}.Pump.PressureTrip1") * 1000;
  53. _basePressure = (objs.Length == 1) ? Convert.ToInt32(objs[0]) : SC.GetValue<int>($"{Module}.Pump.PumpBasePressure");
  54. _pumpTimeLimit = SC.GetValue<double>($"{Module}.Pump.PumpTimeLimit");
  55. _pumpValveDelay = SC.GetValue<int>($"{Module}.Pump.PumpValveDelay");
  56. Notify("开始");
  57. return Result.RUN;
  58. }
  59. return Result.FAIL;
  60. }
  61. public Result Monitor()
  62. {
  63. try
  64. {
  65. CheckForeline((int)PumpSequence.kCheckForelinePressure, FORELINE_TARGET, 15);
  66. // open pumping valve
  67. SetValve((int)PumpSequence.kOpenSoftPumpValve, ValveType.SOFT_PUMP, true);
  68. CheckThrottleValveFullOpen((int)PumpSequence.kCheckThrottleValveStatus);
  69. TimeDelay((int)PumpSequence.kDelay, _pumpValveDelay);
  70. SetValve((int)PumpSequence.kFastPumpValve, ValveType.FAST_PUMP, true);
  71. SetValve((int)PumpSequence.kCloseFastPumpValve, ValveType.SOFT_PUMP, false);
  72. CheckATM2((int)PumpSequence.kCheckATM, false, 30);
  73. //CheckPressure((int)PumpSequence.kCheckChamberPressure, _PressureTrip1, false, 50);
  74. //OpenValve((int)PumpSequence.kCloseSoftPumpValve, ValveType.SOFT_PUMP, false);
  75. //检查VAC
  76. CheckVAC((int)PumpSequence.kCheckVACSignal, 90);
  77. CheckPressure((int)PumpSequence.kCheckVAC, _basePressure, false, (int)_pumpTimeLimit);
  78. End((int)PumpSequence.kEnd);
  79. }
  80. catch (RoutineBreakException)
  81. {
  82. return Result.RUN;
  83. }
  84. catch (RoutineFaildException)
  85. {
  86. Stop("出错");
  87. return Result.FAIL;
  88. }
  89. catch (Exception ex)
  90. {
  91. Stop(ex.Message);
  92. return Result.FAIL;
  93. }
  94. Notify("结束");
  95. return Result.DONE;
  96. }
  97. public override void Abort()
  98. {
  99. _chamber.CloseValves();
  100. }
  101. }
  102. }