| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | 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,        }        public int PurgeCounter { get; private set; }        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(JetPMBase chamber) : base(chamber)        {            Name = "GasLine Purge";        }        public RState Start(params object[] objs)        {            if (CheckLid() &&                CheckSlitDoor() &&                CheckDryPump() &&                CheckTurboPump())            {                _gasPurgeFlowTime = SC.GetValue<int>($"{Module}.Purge.GasPurgeFlowTime");                _gasPurgePumpTime = SC.GetValue<int>($"{Module}.Purge.GasPurgePumpTime");                _gasPurgeCycleCount = SC.GetValue<int>($"{Module}.Purge.GasPurgeCycleCount");                Reset();                PreTurnValves();                PurgeCounter = 0;                return Runner.Start(Module, Name);            }            return RState.Failed;        }        public RState Monitor()        {            Runner.Delay(GaslinePurgeStep.kPreTurnValves,      _delay_1s)                .LoopStart(GaslinePurgeStep.kOpenPVN21_PV12_1, "Gas Purge Cycle",    _gasPurgeCycleCount, OpenPVN21_PV12,     _delay_1s)                .LoopRun(GaslinePurgeStep.kFlowMFC1_2,         Flow_MFC1,                                                      _gasPurgeFlowTime * 1000)                .LoopRun(GaslinePurgeStep.kClosePV12_3,        HOFs.WrapAction(_chamber.OpenValve, ValveType.PV12, false),     _delay_1s)                .LoopRun(GaslinePurgeStep.kOpenPV22_4,         HOFs.WrapAction(_chamber.OpenValve, ValveType.PV22, true),      _delay_1s)                .LoopRun(GaslinePurgeStep.kFlowMFC2_5,         Flow_MFC2,                                                      _gasPurgeFlowTime * 1000)                .LoopRun(GaslinePurgeStep.kClosePV22_6,        HOFs.WrapAction(_chamber.OpenValve, ValveType.PV22, false),     _delay_1s)                .LoopRun(GaslinePurgeStep.kOpenPV32_7,         HOFs.WrapAction(_chamber.OpenValve, ValveType.PV32, true),      _delay_1s)                .LoopRun(GaslinePurgeStep.kFlowMFC3_8,         Flow_MFC3,                                                      _gasPurgeFlowTime * 1000)                .LoopRun(GaslinePurgeStep.kClosePV32_9,        HOFs.WrapAction(_chamber.OpenValve, ValveType.PV32, false),     _delay_1s)                .LoopRun(GaslinePurgeStep.kOpenPV42_10,        HOFs.WrapAction(_chamber.OpenValve, ValveType.PV42, true),      _delay_1s)                .LoopRun(GaslinePurgeStep.kFlowMFC4_11,        Flow_MFC4,                                                      _gasPurgeFlowTime * 1000)                .LoopRun(GaslinePurgeStep.kClosePV42_12,       HOFs.WrapAction(_chamber.OpenValve, ValveType.PV42, false),     _delay_1s)                .LoopRun(GaslinePurgeStep.kClosePVN21_13,      HOFs.WrapAction(_chamber.OpenValve, ValveType.PV21, false),     _delay_1s)                .LoopRun(GaslinePurgeStep.kOpenMFC1_14,        HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc1, true),      _gasPurgePumpTime * 1000)                .LoopRun(GaslinePurgeStep.kCloseMFC1_15,       HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc1, false),     _delay_1s)                .LoopRun(GaslinePurgeStep.kOpenMFC2_16,        HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc2, true),      _gasPurgePumpTime * 1000)                .LoopRun(GaslinePurgeStep.kCloseMFC2_17,       HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc2, false),     _delay_1s)                .LoopRun(GaslinePurgeStep.kOpenMFC3_18,        HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc3, true),      _gasPurgePumpTime * 1000)                .LoopRun(GaslinePurgeStep.kCloseMFC3_19,       HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc3, false),     _delay_1s)                .LoopRun(GaslinePurgeStep.kOpenMFC4_20,        HOFs.WrapAction(_chamber.OpenValve, ValveType.Mfc4, true),      _gasPurgePumpTime * 1000)                .LoopEnd(GaslinePurgeStep.kCloseMFC4_21,       StopAllGas,                                                     _delay_1s)                .End(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);            PurgeCounter++;            return true;        }    }}
 |