| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | using Aitex.Core.RT.Routine;using Aitex.Core.RT.SCCore;using Venus_RT.Devices;using MECF.Framework.Common.Routine;using MECF.Framework.Common.Equipment;using Venus_Core;using System.Threading;namespace Venus_RT.Modules.TM{    class MFPumpRoutine : ModuleRoutineBase, IRoutine    {        private enum PumpStep        {            kWaitPeerModule,            kSoftPump,            kFastPump,            kClosePumpValves,            kDelayForSwitchPump,            kSwitchLLPump        }        private double _pumpBasePressure;        private double _pumpCrossingPressure;        private int _pumpingTimeout;        private int _switchLLPumpDelay;        private readonly JetTM _JetTM;        public MFPumpRoutine(JetTM jetTM, ModuleName mod) : base(mod)        {            _JetTM = jetTM;            Name = "Pump Down";        }        public RState Start(params object[] objs)        {            if (_JetTM.CheckLidClosed(Module) &&                 _JetTM.CheckVentValveClosed(Module) &&                 _JetTM.CheckPurgeValveClosed(Module))            {                Reset();                _pumpBasePressure = SC.GetValue<double>($"{Module}.PumpBasePressure");                _pumpCrossingPressure = SC.GetValue<double>($"{Module}.PumpCrossingPressure");                _pumpingTimeout = SC.GetValue<int>($"{Module}.PumpingTimeout") * 1000;                if (Module == ModuleName.LLA || Module == ModuleName.LLB)                    _switchLLPumpDelay = SC.GetValue<int>($"{Module}.SwitchLLPumpDelay");                else                    _switchLLPumpDelay = 0;                return Runner.Start(Module, Name);            }            return RState.Failed;        }        public RState Monitor()        {            Runner.Wait((int)PumpStep.kWaitPeerModule,      WaitPeerModule,                                                                                             _delay_60s)                .Run((int)PumpStep.kSoftPump,               OpenSoftPump,           () => { return _JetTM.GetModulePressure(Module) < _pumpCrossingPressure; },         _pumpingTimeout)                .Run((int)PumpStep.kFastPump,               SwitchFastPump,         IsPressureReady,                                                                    _pumpingTimeout)                .Run((int)PumpStep.kClosePumpValves,        ClosePumpValves,        NullFun)                .Delay((int)PumpStep.kDelayForSwitchPump,                                                                                                               _switchLLPumpDelay)                .End((int)PumpStep.kSwitchLLPump,           ReleaseLLPump,          NullFun);            return Runner.Status;        }        private bool WaitPeerModule()        {            if (!IsPressureReady() && IsLLModule())            {                return _JetTM.TryGetLLPump(Module);            }            return true;        }        private bool IsLLModule()        {            return Module == ModuleName.LLA || Module == ModuleName.LLB;        }        private bool IsPressureReady()        {            return _JetTM.GetModulePressure(Module) < _pumpBasePressure;        }        private bool OpenSoftPump()        {            if (!IsPressureReady())            {                _JetTM.TurnSoftPumpValve(Module, true);            }            return true;        }        private bool SwitchFastPump()        {            if (!IsPressureReady())            {                _JetTM.TurnSoftPumpValve(Module, false);                _JetTM.TurnFastPumpValve(Module, true);            }            return true;        }        private bool ClosePumpValves()        {            _JetTM.TurnSoftPumpValve(Module, false);            _JetTM.TurnFastPumpValve(Module, false);            return true;        }        private bool ReleaseLLPump()        {            if (Module == ModuleName.LLA || Module == ModuleName.LLB)                _JetTM.ReleasePump(Module);            return true;        }        public void Abort()        {            ClosePumpValves();        }    }}
 |