MFPurgeRoutine.cs 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. namespace Venus_RT.Modules.TM
  8. {
  9. class MFPurgeRoutine : ModuleRoutineBase, IRoutine
  10. {
  11. private enum PurgeStep
  12. {
  13. kCloseValves,
  14. kPumpToCrossing,
  15. kPumpToBase,
  16. kPurgeDelay_1,
  17. kPurgeVent,
  18. kPurgeDelay_2,
  19. kPurgePumpToCrossing,
  20. kPurgePumpToBase,
  21. kPurgePumpDelay,
  22. kPurgeEnd,
  23. kEnd,
  24. }
  25. public int PurgeCounter { get; private set; }
  26. private double _basePressure = 100;
  27. private double _CrossingPressure = 2000;
  28. private double _purgeVentPressure = 10;
  29. private int _purgeCycleCounter = 30;
  30. private int _purgePumpTime = 120;
  31. private readonly JetTM _JetTM;
  32. public MFPurgeRoutine(JetTM tm, ModuleName mod) : base(mod)
  33. {
  34. Name = $"{Module} Purge";
  35. _JetTM = tm;
  36. }
  37. public RState Start(params object[] objs)
  38. {
  39. if (_JetTM.CheckLidClosed(Module) &&
  40. _JetTM.CheckVentValveClosed(Module) &&
  41. _JetTM.CheckPurgeValveClosed(Module) &&
  42. _JetTM.CheckPumpValveClosed(Module))
  43. {
  44. Reset();
  45. _JetTM.CloseModuleAllValves(Module);
  46. _basePressure = SC.GetValue<double>($"{Module}.PumpBasePressure");
  47. _CrossingPressure = SC.GetValue<double>($"{Module}.PumpCrossingPressure");
  48. _purgeVentPressure = SC.GetValue<double>($"{Module}.PurgeVentPressure");
  49. _purgeCycleCounter = SC.GetValue<int>($"{Module}.PurgeCycleCount");
  50. _purgePumpTime = SC.GetValue<int>($"{Module}.PurgePumpTime");
  51. PurgeCounter = 0;
  52. return Runner.Start(Module, Name);
  53. }
  54. return RState.Failed;
  55. }
  56. public RState Monitor()
  57. {
  58. Runner.Delay((int)PurgeStep.kCloseValves, _delay_1s)
  59. .Run((int)PurgeStep.kPumpToCrossing, HOFs.WrapAction(_JetTM.TurnSoftPumpValve, Module, true), () => { return _JetTM.GetModulePressure(Module) < _CrossingPressure; })
  60. .Run((int)PurgeStep.kPumpToBase, SwitchFastPump, () => { return _JetTM.GetModulePressure(Module) < _basePressure; })
  61. .LoopStart((int)PurgeStep.kPurgeDelay_1, "Purge", _purgeCycleCounter, HOFs.WrapAction(_JetTM.TurnFastPumpValve, Module, false), _delay_1s)
  62. .LoopRun((int)PurgeStep.kPurgeVent, HOFs.WrapAction(_JetTM.TurnVentValve, Module, true), () => { return _JetTM.GetModulePressure(Module) >= _purgeVentPressure; })
  63. .LoopRun((int)PurgeStep.kPurgeDelay_2, HOFs.WrapAction(_JetTM.TurnVentValve, Module, false), _delay_1s)
  64. .LoopRun((int)PurgeStep.kPurgePumpToCrossing, HOFs.WrapAction(_JetTM.TurnSoftPumpValve, Module, true), () => { return _JetTM.GetModulePressure(Module) < _basePressure; })
  65. .LoopRun((int)PurgeStep.kPurgePumpToBase, SwitchFastPump, () => { return _JetTM.GetModulePressure(Module) < _basePressure; })
  66. .LoopRun((int)PurgeStep.kPurgePumpDelay, NullFun, _purgePumpTime * 1000)
  67. .LoopEnd((int)PurgeStep.kPurgeEnd, HOFs.WrapAction(_JetTM.CloseModuleAllValves, Module), _delay_1s)
  68. .End((int)PurgeStep.kEnd, NullFun, _delay_50ms);
  69. return Runner.Status;
  70. }
  71. public void Abort()
  72. {
  73. _JetTM.CloseModuleAllValves(Module);
  74. }
  75. private bool SwitchFastPump()
  76. {
  77. _JetTM.TurnSoftPumpValve(Module, false);
  78. _JetTM.TurnFastPumpValve(Module, true);
  79. return true;
  80. }
  81. }
  82. }