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 PMGaslinePurgeRoutine : PMRoutineBase, IRoutine { private enum GaslinePurgeStep { kPreTurnValves, kOpenPVN21_PV12_1, kFlowMFC1_2, kClosePV12_3, kOpenPV22_4, kFlowMFC2_5, kClosePV22_6, kOpenPV32_7, kFlowMFC3_8, kClosePV32_9, kOpenPV42_10, kFlowMFC4_11, kClosePV42_12, kClosePVN21_13, kOpenMFC1_14, kCloseMFC1_15, kOpenMFC2_16, kCloseMFC2_17, kOpenMFC3_18, kCloseMFC3_19, kOpenMFC4_20, kCloseMFC4_21, kEnd, } private int _gasPurgeFlowTime = 5; private int _gasPurgePumpTime = 10; private int _gasPurgeCycleCount = 30; private readonly double _GasFlow = 1.0; bool Flow_MFC1() => _chamber.FlowGas(1, _GasFlow); bool Flow_MFC2() => _chamber.FlowGas(2, _GasFlow); bool Flow_MFC3() => _chamber.FlowGas(3, _GasFlow); bool Flow_MFC4() => _chamber.FlowGas(4, _GasFlow); public PMGaslinePurgeRoutine(JetPM chamber) : base(chamber) { Name = "GasLine Purge"; } public RState Start(params object[] objs) { if (CheckLidLoadLock() && CheckSlitDoor() && CheckDryPump() && CheckTurboPump()) { _gasPurgeFlowTime = SC.GetValue($"{Module}.Purge.GasPurgeFlowTime"); _gasPurgePumpTime = SC.GetValue($"{Module}.Purge.GasPurgePumpTime"); _gasPurgeCycleCount = SC.GetValue($"{Module}.Purge.GasPurgeCycleCount"); Reset(); PreTurnValves(); return Runner.Start(Module, Name); } return RState.Failed; } public RState Monitor() { Runner.Delay((int)GaslinePurgeStep.kPreTurnValves, _delay_1s) .LoopStart((int)GaslinePurgeStep.kOpenPVN21_PV12_1, "Gas Purge Cycle", _gasPurgeCycleCount, OpenPVN21_PV12, _delay_1s) .LoopRun((int)GaslinePurgeStep.kFlowMFC1_2, Flow_MFC1, _gasPurgeFlowTime * 1000) .LoopRun((int)GaslinePurgeStep.kClosePV12_3, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV12, false), _delay_1s) .LoopRun((int)GaslinePurgeStep.kOpenPV22_4, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV22, true), _delay_1s) .LoopRun((int)GaslinePurgeStep.kFlowMFC2_5, Flow_MFC2, _gasPurgeFlowTime * 1000) .LoopRun((int)GaslinePurgeStep.kClosePV22_6, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV22, false), _delay_1s) .LoopRun((int)GaslinePurgeStep.kOpenPV32_7, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV32, true), _delay_1s) .LoopRun((int)GaslinePurgeStep.kFlowMFC3_8, Flow_MFC3, _gasPurgeFlowTime * 1000) .LoopRun((int)GaslinePurgeStep.kClosePV32_9, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV32, false), _delay_1s) .LoopRun((int)GaslinePurgeStep.kOpenPV42_10, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV42, true), _delay_1s) .LoopRun((int)GaslinePurgeStep.kFlowMFC4_11, Flow_MFC4, _gasPurgeFlowTime * 1000) .LoopRun((int)GaslinePurgeStep.kClosePV42_12, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV42, false), _delay_1s) .LoopRun((int)GaslinePurgeStep.kClosePVN21_13, HOFs.WrapAction(_chamber.OpenValve, ValveType.PV21, false), _delay_1s) .LoopRun((int)GaslinePurgeStep.kOpenMFC1_14, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc1, true), _gasPurgePumpTime * 1000) .LoopRun((int)GaslinePurgeStep.kCloseMFC1_15, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc1, false), _delay_1s) .LoopRun((int)GaslinePurgeStep.kOpenMFC2_16, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc2, true), _gasPurgePumpTime * 1000) .LoopRun((int)GaslinePurgeStep.kCloseMFC2_17, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc2, false), _delay_1s) .LoopRun((int)GaslinePurgeStep.kOpenMFC3_18, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc3, true), _gasPurgePumpTime * 1000) .LoopRun((int)GaslinePurgeStep.kCloseMFC3_19, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc3, false), _delay_1s) .LoopRun((int)GaslinePurgeStep.kOpenMFC4_20, HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc4, true), _gasPurgePumpTime * 1000) .LoopEnd((int)GaslinePurgeStep.kCloseMFC4_21, StopAllGas, _delay_1s) .End((int)GaslinePurgeStep.kEnd, NullFun, _delay_50ms); return Runner.Status; } public void Abort() { CloseAllValves(); } private void PreTurnValves() { _chamber.OpenValve(ValveType.Guage, false); _chamber.OpenValve(ValveType.SoftPump, false); _chamber.OpenValve(ValveType.FastPump, false); _chamber.TurnPendulumValve(false); _chamber.OpenValve(ValveType.GasFinal, false); _chamber.OpenValve(ValveType.N2, false); _chamber.OpenValve(ValveType.PVN22, false); _chamber.OpenValve(ValveType.TurboPumpPumping, true); _chamber.OpenValve(ValveType.TurboPumpPurge, true); } private bool OpenPVN21_PV12() { _chamber.OpenValve(ValveType.PVN21, true); _chamber.OpenValve(ValveType.PV12, true); return true; } private bool StopAllGas() { _chamber.StopGas(1); _chamber.StopGas(2); _chamber.StopGas(3); _chamber.StopGas(4); return true; } } }