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, kOpenTurboPump, kGasFinal, 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; //private bool needsoft = true; public PumpDownRoutine(JetPMBase chamber) : base(chamber) { jetChamber = (JetChamber)SC.GetValue($"{chamber.Name}.ChamberType"); Name = "PumpDown"; //if (jetChamber == JetChamber.VenusDE) //{ // needsoft = false; //} } public RState Start(params object[] objs) { if (CheckLid() && CheckSlitDoor()) { Reset(); _chamber.CloseValves(); _roughPumpPressure = SC.GetValue($"{Module}.Pump.PumpCrossingPressure"); _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); //} _vHe2FlowPressure = SC.GetValue($"{Module}.Pump.PumpVHe2FlowPressure"); return Runner.Start(Module, Name); } return RState.Failed; } public RState Monitor() { switch (jetChamber) { //case JetChamber.Venus: case JetChamber.VenusSE: 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, OpenTurboPumpPurgeGasFinalValve, _delay_3s) .Run(PumpStep.kFinalStep, FinalStep, () => { return _chamber.ChamberPressure < _basePressure; }) .End(PumpStep.kEnd, NullFun, _delay_1s); break; case JetChamber.Kepler2300: case JetChamber.Kepler2200A: case JetChamber.Kepler2200B: 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.kISOValve, OpenISOValve, _delay_2s) .Run(PumpStep.kVATValve, OpenVATValve, _delay_5s) .Run(PumpStep.kOpenTurboPumpPurgeGasFinal, OpenTurboPumpPurgeGasFinalValve, _delay_3s) .Run(PumpStep.kFinalStep, FinalStep, () => { return _chamber.ChamberPressure < _basePressure; }) .End(PumpStep.kEnd, NullFun, _delay_1s); break; case JetChamber.VenusDE: Runner.Delay(PumpStep.kDelay_2s, _delay_2s) .Run(PumpStep.kCloseISOValve, HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, false), _delay_2s) .Run(PumpStep.kPVHe2, OpenHe2Valve, _delay_5s) .Run(PumpStep.kFastPump, OpenFastPump, () => { return _chamber.ChamberPressure < _vHe2FlowPressure; }) .Run(PumpStep.kISOValve, OpenISOValve, _delay_5s) .Run(PumpStep.kOpenTurboPump, OpenTurboValve, _delay_3s) .Run(PumpStep.kVATValve, OpenVATValve, _delay_2s) .Run(PumpStep.kOpenTurboPump, OpenGuageGasFinalValve, _delay_3s) .Run(PumpStep.kFinalStep, FinalStep, () => { return _chamber.ChamberPressure < _basePressure; }) .End(PumpStep.kEnd, NullFun, _delay_1s); break; } //if (jetChamber == JetChamber.VenusDE) //{ // Runner.Delay(PumpStep.kDelay_2s, _delay_2s) // .Run(PumpStep.kCloseISOValve, HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, false), _delay_2s) // .Run(PumpStep.kPVHe2, OpenHe2Valve, _delay_5s) // .Run(PumpStep.kFastPump, OpenFastPump, () => { return _chamber.ChamberPressure < _vHe2FlowPressure; }) // .Run(PumpStep.kISOValve, OpenISOValve, _delay_5s) // .Run(PumpStep.kOpenTurboPump, OpenTurboValve, _delay_3s) // .Run(PumpStep.kVATValve, OpenVATValve, _delay_2s) // .Run(PumpStep.kOpenTurboPump, OpenGuageGasFinalValve, _delay_3s) // .Run(PumpStep.kFinalStep, FinalStep, () => { return _chamber.ChamberPressure < _basePressure; }) // .End(PumpStep.kEnd, NullFun, _delay_1s); //} //else //{ // Runner.Delay(PumpStep.kDelay_2s, _delay_2s) // .Run(PumpStep.kCloseISOValve, HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, false), _delay_2s) // .RunIf(PumpStep.kSoftPump, needsoft, 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, OpenTurboPumpPurgeGasFinalValve, _delay_3s) // .Run(PumpStep.kFinalStep, FinalStep, () => { return _chamber.ChamberPressure < _basePressure; }) // .End(PumpStep.kEnd, NullFun, _delay_1s); //} return Runner.Status; } private bool OpenTurboPumpPurgeGasFinalValve() { _chamber.OpenValve(ValveType.TurboPumpPurge, true); _chamber.OpenValve(ValveType.GasFinal, true); return true; } private bool OpenTurboValve() { _chamber.OpenValve(ValveType.TurboPumpPurge, true); return true; } private bool OpenGuageGasFinalValve() { _chamber.OpenValve(ValveType.GasFinal, true); _chamber.OpenValve(ValveType.Guage, true); return true; } 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.FastPump, false); _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(); } } }