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 StartTurboPumpRoutine : PMRoutineBase, IRoutine { private enum TurboPumpStep { kCheckForeLine, kEnd, } private double _chamberForelinePressureThreshold = 500; private int _chamberForelinePressureTimeout; public StartTurboPumpRoutine(JetPM chamber) : base(chamber) { Name = "Start TurboPump"; } public RState Start(params object[] objs) { if (_chamber.IsTurboPumpRunning) { Stop("Turbo Pump 已经运行"); return RState.Failed; } Reset(); _chamber.OpenValve(ValveType.FastPump, false); _chamber.OpenValve(ValveType.SoftPump, false); _chamberForelinePressureThreshold = SC.GetValue($"{Module}.TurboPump.ChamberForelinePressureThreshold"); _chamberForelinePressureTimeout = SC.GetValue($"{Module}.TurboPump.ChamberForelinePressureTimeout"); _chamber.TurnTurboPump(true); return Runner.Start(Module, Name); } public RState Monitor() { Runner.Wait((int)TurboPumpStep.kCheckForeLine, () => { return _chamber.ForelinePressure < _chamberForelinePressureThreshold; }, _chamberForelinePressureTimeout) .End((int)TurboPumpStep.kEnd, NullFun, _delay_50ms); return Runner.Status; } public void Abort() { _chamber.CloseValves(); _chamber.TurnTurboPump(false); } } }