| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | 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 LoadLockPurgeRoutine : PMRoutineBase, IRoutine    {        private enum PurgeStep        {            kCloseValves,            kPumpToBase,            kPurgeDelay_1,            kPurgeVent,            kPurgeDelay_2,                                                                                           kPurgePumpToBase,            kPurgePumpDelay,            kPurgeEnd,            kEnd,        }        public int PurgeCounter { get; private set; }        private int _basePressureLL = 100;        private int _purgeVentPressureLL = 10;        private int _purgeCycleCounter = 30;        private int _purgePumpTime = 120;        public LoadLockPurgeRoutine(JetPM chamber) : base(chamber)        {            Name = "Loadlock Purge";        }        public RState Start(params object[] objs)        {            if (CheckLidLoadLock() &&                CheckSlitDoor() &&                CheckDryPump())            {                Reset();                _chamber.CloseValves();                _basePressureLL         = SC.GetValue<int>($"{Module}.Pump.LoadLockPumpBasePressure");                _purgeVentPressureLL    = SC.GetValue<int>($"{Module}.Pump.LoadLockPurgeVentPressure");                _purgeCycleCounter      = SC.GetValue<int>($"{Module}.Pump.LoadLockPurgeCycleCount");                _purgePumpTime          = SC.GetValue<int>($"{Module}.Pump.LoadLockPurgePumpTime");                PurgeCounter = 0;                return Runner.Start(Module, Name);            }            return RState.Failed;        }        public RState Monitor()        {            Runner.Delay((int)PurgeStep.kCloseValves,       _delay_1s)                .Run((int)PurgeStep.kPumpToBase,            HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true),   () => { return _chamber.LoadlockPressure < _basePressureLL; })                .LoopStart((int)PurgeStep.kPurgeDelay_1,    "Purge",            _purgeCycleCounter,                                 HOFs.WrapAction(_chamber.OpenValve,  ValveType.LoadlockPumping, false), _delay_1s)                .LoopRun((int)PurgeStep.kPurgeVent,         HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockVent, true),      () => { return _chamber.LoadlockPressure >= _purgeVentPressureLL; })                .LoopRun((int)PurgeStep.kPurgeDelay_2,      HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockVent, false),     _delay_1s)                .LoopRun((int)PurgeStep.kPurgePumpToBase,   HOFs.WrapAction(_chamber.OpenValve, ValveType.LoadlockPumping, true),   () => { return _chamber.LoadlockPressure < _basePressureLL; })                .LoopRun((int)PurgeStep.kPurgePumpDelay,    NullFun,                                                                _purgePumpTime * 1000)                .LoopEnd((int)PurgeStep.kPurgeEnd,          ClosePumpValve,                                                         _delay_50ms)                .End((int)PurgeStep.kEnd,                   NullFun,                                                                _delay_50ms);                            return Runner.Status;        }        public void Abort()        {            CloseAllValves();        }        private bool ClosePumpValve()        {            _chamber.OpenValve(ValveType.LoadlockPumping, false);            return true;        }    }}
 |