| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 | using Aitex.Core.RT.Routine;using Aitex.Core.RT.SCCore;using Venus_RT.Devices;using MECF.Framework.Common.Routine;using Venus_Core;using System.Collections.Generic;using System.Linq;using System;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 enum NewGaslinePurgeStep        {            kPreTurnValves,            kStartPurge,            kPumpGasLines,            kStopPumpGasLines,            kPurgeGasLines,            kStopPurgeGasLines,            kCloseAllValves,            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);        private string[] _gasLineNums;        public PMGaslinePurgeRoutine(JetPMBase chamber) : base(chamber)        {            Name = "GasLine Purge";        }        public RState Start(params object[] objs)        {            if (CheckLid() &&                CheckSlitDoor() &&                CheckDryPump())            {                _gasPurgeFlowTime = SC.GetValue<int>($"{Module}.Purge.GasPurgeFlowTime");                _gasPurgePumpTime = SC.GetValue<int>($"{Module}.Purge.GasPurgePumpTime");                _gasPurgeCycleCount = SC.GetValue<int>($"{Module}.Purge.GasPurgeCycleCount");                Reset();                PreTurnValves();                _gasLineNums = objs[0].ToString().Split(',');                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);         Runner.Delay(NewGaslinePurgeStep.kPreTurnValves, _delay_1s)               .LoopStart(NewGaslinePurgeStep.kStartPurge,      "Gas Purge Cycle", _gasPurgeCycleCount, PreparePurge, _delay_1s)               .LoopRun(NewGaslinePurgeStep.kPumpGasLines,      StartPump, _gasPurgePumpTime * 1000)               .LoopRun(NewGaslinePurgeStep.kStopPumpGasLines,  StopPump)               .LoopRun(NewGaslinePurgeStep.kPurgeGasLines,     StartPurge, _gasPurgeFlowTime * 1000)               .LoopRun(NewGaslinePurgeStep.kStopPurgeGasLines, StopPurge)               .LoopEnd(NewGaslinePurgeStep.kCloseAllValves,    StopAllGas, _delay_1s)               .End(GaslinePurgeStep.kEnd, NullFun, _delay_50ms);            return Runner.Status;        }        public void Abort()        {            CloseAllValves();        }        public bool PreparePurge()        {             return true;         }        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, false);            _chamber.OpenValve(ValveType.TurboPumpPurge, false);        }        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;        }        private bool StartPump()        {            _gasLineNums.ToList().ForEach(x =>             {                _chamber.PumpGas(Convert.ToInt32(x) - 1);                     });            return true;        }        private bool StopPump()        {            _chamber.OpenValve(ValveType.N2Purge2, false);            return true;        }        private bool StartPurge()        {            _gasLineNums.ToList().ForEach(x =>            {                _chamber.PurgeGas(Convert.ToInt32(x) - 1);            });            return true;        }        private bool StopPurge()        {            _chamber.OpenValve(ValveType.PVN21, false);            return true;        }    }}
 |