using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using Venus_RT.Devices; using MECF.Framework.Common.Routine; using Venus_Core; namespace Venus_RT.Modules.PMs { class LoadLockPumpRoutine : PMRoutineBase, IRoutine { private enum PumpStep { kCloseValves, kPump, kClosePumpValves, } private int _basePressureLL = 100; private int _pumpTimeLimitLL = 120; public LoadLockPumpRoutine(JetPM chamber) : base(chamber) { Name = "Loadlock Pump"; } public RState Start(params object[] objs) { if (CheckLidLoadLock() && CheckSlitDoor() && CheckDryPump()) { Reset(); _chamber.CloseValves(); _basePressureLL = SC.GetValue($"{Module}.Pump.LoadLockPumpBasePressure"); _pumpTimeLimitLL = SC.GetValue($"{Module}.Pump.LoadLockPumpTimeLimit"); return Runner.Start(Module, Name); } return RState.Failed; } public RState Monitor() { Runner.Delay((int)PumpStep.kCloseValves, _delay_1s) .Run((int)PumpStep.kPump, HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true), () => { return _chamber.LoadlockPressure <= _basePressureLL; }, _pumpTimeLimitLL * 1000) .End((int)PumpStep.kClosePumpValves, HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, false), _delay_1s); return Runner.Status; } public void Abort() { CloseAllValves(); } } }