| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419 | 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        {            kWaitPendulumValveClose,            kClosePumpingValve,            kPreTurnValves,            kStartPurge,            kPumpGasLines,            kStopPumpGasLines,            kPurgeGasLines,            kStopPurgeGasLines,            kCloseAllValves,            kPumpDown,            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;        private bool IsVenus = false;        private int _currentIndex = 0;        private int _gasPurgeAllCycleCount = 0;        private PumpDownRoutine _pumpDownRoutine;        public PMGaslinePurgeRoutine(JetPMBase chamber, PumpDownRoutine pdRoutine) : base(chamber)        {            Name = "GasLine Purge";            _pumpDownRoutine = pdRoutine;        }        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(',');                switch (_chamber.ChamberType)                {                    case JetChamber.VenusSE:                    case JetChamber.VenusDE:                        _gasPurgeAllCycleCount = _gasPurgeCycleCount* _gasLineNums.Count();                        _currentIndex = 0;                        IsVenus = true;                        break;                    default:                        IsVenus = false;                        break;                }                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);            if (!IsVenus)            {                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);            }            else            {                Runner.Wait(NewGaslinePurgeStep.kWaitPendulumValveClose,()=>!_chamber.IsPenVOpen)                      .Run(NewGaslinePurgeStep.kClosePumpingValve, ClosePumping, _delay_1s)                      .Delay(NewGaslinePurgeStep.kPreTurnValves, _delay_1s)                      .LoopStart(NewGaslinePurgeStep.kStartPurge, "Gas Purge Cycle", _gasPurgeAllCycleCount, PreparePurge, _delay_1s)                      .LoopRun(NewGaslinePurgeStep.kPumpGasLines, StartPumpWithIndex, _gasPurgePumpTime * 1000)                      .LoopRun(NewGaslinePurgeStep.kStopPumpGasLines, StopPumpWithIndex)                      .LoopRun(NewGaslinePurgeStep.kPurgeGasLines, StartPurgeWithIndex, _gasPurgeFlowTime * 1000)                      .LoopRun(NewGaslinePurgeStep.kStopPurgeGasLines, StopPurgeWithIndex)                      .LoopEnd(NewGaslinePurgeStep.kCloseAllValves, StopAllGas, _delay_1s)                      .Run(NewGaslinePurgeStep.kPumpDown,StartPumpDown,PumpDownOver)                      .End(GaslinePurgeStep.kEnd, NullFun, _delay_50ms);            }            return Runner.Status;        }        private bool ClosePumping()        {            _chamber.OpenValve(ValveType.TurboPumpPumping,false);            return true;        }        private bool StartPumpDown()        {            return _pumpDownRoutine.Start() == RState.Running;        }        private bool PumpDownOver()        {            return _pumpDownRoutine.Monitor() == RState.End;        }        private bool StopPurgeWithIndex()        {            int idx = Convert.ToInt32(_gasLineNums[_currentIndex / _gasPurgeCycleCount]);            _chamber.OpenValve(ValveType.PVN22, false);            _chamber.OpenValve(ValveType.PVN21, false);            _chamber.StopGas(idx);            switch (idx)            {                case 0:                    _chamber.OpenValve(ValveType.PV12, false);                    break;                case 1:                    _chamber.OpenValve(ValveType.PV22, false);                    break;                case 2:                    _chamber.OpenValve(ValveType.PV32, false);                    break;                case 3:                    _chamber.OpenValve(ValveType.PV42, false);                    break;                case 4:                    _chamber.OpenValve(ValveType.PV52, false);                    break;                case 5:                    _chamber.OpenValve(ValveType.PV62, false);                    break;                case 6:                    _chamber.OpenValve(ValveType.PV72, false);                    break;                case 7:                    _chamber.OpenValve(ValveType.PV82, false);                    break;                case 8:                    _chamber.OpenValve(ValveType.PV92, false);                    break;                case 9:                    _chamber.OpenValve(ValveType.PVA2, false);                    break;                case 10:                    _chamber.OpenValve(ValveType.PVB2, false);                    break;                case 11:                    _chamber.OpenValve(ValveType.PVC2, false);                    break;            }            _currentIndex++;            return true;        }        private bool StartPurgeWithIndex()        {            int idx = Convert.ToInt32(_gasLineNums[_currentIndex / _gasPurgeCycleCount]);            _chamber.OpenValve(ValveType.PVN22, true);            _chamber.OpenValve(ValveType.PVN21, true);            _chamber.FullMFC(idx);            switch (idx)            {                case 0:                    _chamber.OpenValve(ValveType.PV12, true);                    break;                case 1:                    _chamber.OpenValve(ValveType.PV22, true);                    break;                case 2:                    _chamber.OpenValve(ValveType.PV32, true);                    break;                case 3:                    _chamber.OpenValve(ValveType.PV42, true);                    break;                case 4:                    _chamber.OpenValve(ValveType.PV52, true);                    break;                case 5:                    _chamber.OpenValve(ValveType.PV62, true);                    break;                case 6:                    _chamber.OpenValve(ValveType.PV72, true);                    break;                case 7:                    _chamber.OpenValve(ValveType.PV82, true);                    break;                case 8:                    _chamber.OpenValve(ValveType.PV92, true);                    break;                case 9:                    _chamber.OpenValve(ValveType.PVA2, true);                    break;                case 10:                    _chamber.OpenValve(ValveType.PVB2, true);                    break;                case 11:                    _chamber.OpenValve(ValveType.PVC2, true);                    break;            }            return true;        }        private bool StartPumpWithIndex()        {            int idx = Convert.ToInt32(_gasLineNums[_currentIndex / _gasPurgeCycleCount]);            _chamber.PumpGas(idx);            return true;        }        private bool StopPumpWithIndex()        {            int idx = Convert.ToInt32(_gasLineNums[_currentIndex / _gasPurgeCycleCount]);            switch (idx)            {                case 0:                    _chamber.OpenValve(ValveType.PV11, false);                    _chamber.OpenValve(ValveType.Mfc1, false);                    break;                case 1:                    _chamber.OpenValve(ValveType.PV21, false);                    _chamber.OpenValve(ValveType.Mfc2, false);                    break;                case 2:                    _chamber.OpenValve(ValveType.PV31, false);                    _chamber.OpenValve(ValveType.Mfc3, false);                    break;                case 3:                    _chamber.OpenValve(ValveType.PV41, false);                    _chamber.OpenValve(ValveType.Mfc4, false);                    break;                case 4:                    _chamber.OpenValve(ValveType.PV51, false);                    _chamber.OpenValve(ValveType.Mfc5, false);                    break;                case 5:                    _chamber.OpenValve(ValveType.PV61, false);                    _chamber.OpenValve(ValveType.Mfc6, false);                    break;                case 6:                    _chamber.OpenValve(ValveType.PV71, false);                    _chamber.OpenValve(ValveType.Mfc7, false);                    break;                case 7:                    _chamber.OpenValve(ValveType.PV81, false);                    _chamber.OpenValve(ValveType.Mfc8, false);                    break;                case 8:                    _chamber.OpenValve(ValveType.PV91, false);                    _chamber.OpenValve(ValveType.Mfc9, false);                    break;                case 9:                    _chamber.OpenValve(ValveType.PVA1, false);                    _chamber.OpenValve(ValveType.Mfc10, false);                    break;                case 10:                    _chamber.OpenValve(ValveType.PVB1, false);                    _chamber.OpenValve(ValveType.Mfc11, false);                    break;                case 11:                    _chamber.OpenValve(ValveType.PVC1, false);                    _chamber.OpenValve(ValveType.Mfc12, false);                    break;            }            _chamber.StopGas(idx);            _chamber.OpenValve(ValveType.SecondPurge,false);            return true;        }        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;        }    }}
 |