using System; 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 PumpDownRoutine : PMRoutineBase, IRoutine { private enum PumpStep { kDelay_2s, kCloseISOValve, kSoftPump, kFastPump, kPVHe2, kISOValve, kTurboN2Purge, kVATValve, kOpenTurboPumpPurgeGasFinal, kFinalStep, kEnd, } //private int _ventTime; private int _pump_delay = 5000; private int _roughPumpPressure = 75000; private int _vHe2FlowPressure = 200; private int _basePressure = 10; private JetChamber jetChamber = JetChamber.None; public PumpDownRoutine(JetPMBase chamber) : base(chamber) { jetChamber = (JetChamber)SC.GetValue($"{chamber.Name}.ChamberType"); Name = "PumpDown"; } public RState Start(params object[] objs) { if (CheckLid() && CheckSlitDoor()) { Reset(); _chamber.CloseValves(); _roughPumpPressure = SC.GetValue($"{Module}.Pump.PumpCrossingPressure") * 1000; _vHe2FlowPressure = SC.GetValue($"{Module}.Pump.PumpVHe2FlowPressure"); _pump_delay = SC.GetValue($"{Module}.Pump.PumpValveDelay") * 1000; _basePressure = (objs.Length >= 1) ? Convert.ToInt32(objs[0]) : SC.GetValue($"{Module}.Pump.PumpBasePressure"); _chamber.OpenValve(ValveType.PVN22, true); _chamber.OpenValve(ValveType.TurboPumpPumping, true); _chamber.TurnPendulumValve(false); if (jetChamber == JetChamber.Venus) { _chamber.OpenValve(ValveType.HeISO, false); _chamber.OpenValve(ValveType.PVHe3, false); } return Runner.Start(Module, Name); } return RState.Failed; } public RState Monitor() { Runner.Delay(PumpStep.kDelay_2s, _delay_2s) .Run(PumpStep.kCloseISOValve, HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, false), _delay_2s) .Run(PumpStep.kSoftPump, HOFs.WrapAction(_chamber.OpenValve, ValveType.SoftPump, true), () => { return _chamber.ChamberPressure < _roughPumpPressure; }) .Run(PumpStep.kFastPump, OpenFastPump, () => { return _chamber.ChamberPressure < _vHe2FlowPressure; }) .Run(PumpStep.kPVHe2, OpenHe2Valve, _delay_2s) .Run(PumpStep.kISOValve, OpenISOValve, _delay_2s) .Run(PumpStep.kVATValve, OpenVATValve, _delay_5s) .Run(PumpStep.kOpenTurboPumpPurgeGasFinal, () => { _chamber.OpenValve(ValveType.TurboPumpPurge, true); _chamber.OpenValve(ValveType.GasFinal, true); return true; }, 3000) .Run(PumpStep.kFinalStep, FinalStep, () => { return _chamber.ChamberPressure < _basePressure; }) .End(PumpStep.kEnd, NullFun, _delay_1s); return Runner.Status; } private bool OpenFastPump() { _chamber.OpenValve(ValveType.SoftPump, false); _chamber.OpenValve(ValveType.FastPump, true); return true; } private bool OpenHe2Valve() { _chamber.OpenValve(ValveType.FastPump, false); _chamber.OpenValve(ValveType.PVHe2, true); return true; } private bool OpenISOValve() { _chamber.OpenValve(ValveType.PVHe2, false); // ISO Valve _chamber.OpenValve(ValveType.TurboPumpPumping, true); return true; } private bool OpenVATValve() { return _chamber.TurnPendulumValve(true); } private bool FinalStep() { _chamber.OpenValve(ValveType.Guage, true); //2023/04/25修改 //_chamber.OpenValve(ValveType.TurboPumpPurge, true); //_chamber.OpenValve(ValveType.GasFinal, true); return true; } public void Abort() { CloseAllValves(); } } }