| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | 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;namespace Venus_RT.Modules.TM{    class MFPurgeRoutine : ModuleRoutineBase, IRoutine    {        private enum PurgeStep        {            kCloseValves,            kPumpToCrossing,            kPumpToBase,            kPurgeDelay_1,            kPurgeVent,            kPurgeDelay_2,            kPurgePumpToCrossing,            kPurgePumpToBase,            kPurgePumpDelay,            kPurgeEnd,            kEnd,        }        public int PurgeCounter { get; private set; }        private double _basePressure = 100;        private double _CrossingPressure = 2000;        private double _purgeVentPressure = 10;        private int _purgeCycleCounter = 30;        private int _purgePumpTime = 120;        private readonly JetTM _JetTM;        public MFPurgeRoutine(JetTM tm, ModuleName mod) : base(mod)        {            Name = $"{Module} Purge";            _JetTM = tm;        }        public RState Start(params object[] objs)        {            if (_JetTM.CheckLidClosed(Module) &&                _JetTM.CheckVentValveClosed(Module) &&                _JetTM.CheckPurgeValveClosed(Module) &&                _JetTM.CheckPumpValveClosed(Module))            {                Reset();                _JetTM.CloseModuleAllValves(Module);                _basePressure = SC.GetValue<double>($"{Module}.PumpBasePressure");                _CrossingPressure = SC.GetValue<double>($"{Module}.PumpCrossingPressure");                _purgeVentPressure = SC.GetValue<double>($"{Module}.PurgeVentPressure");                _purgeCycleCounter = SC.GetValue<int>($"{Module}.PurgeCycleCount");                _purgePumpTime = SC.GetValue<int>($"{Module}.PurgePumpTime");                PurgeCounter = 0;                return Runner.Start(Module, Name);            }            return RState.Failed;        }        public RState Monitor()        {            Runner.Delay((int)PurgeStep.kCloseValves, _delay_1s)                .Run((int)PurgeStep.kPumpToCrossing,            HOFs.WrapAction(_JetTM.TurnSoftPumpValve, Module, true),    () => { return _JetTM.GetModulePressure(Module) < _CrossingPressure; })                .Run((int)PurgeStep.kPumpToBase,                SwitchFastPump,                                             () => { return _JetTM.GetModulePressure(Module) < _basePressure; })                .LoopStart((int)PurgeStep.kPurgeDelay_1,        "Purge",            _purgeCycleCounter,                     HOFs.WrapAction(_JetTM.TurnFastPumpValve, Module, false),           _delay_1s)                .LoopRun((int)PurgeStep.kPurgeVent,             HOFs.WrapAction(_JetTM.TurnVentValve, Module, true),        () => { return _JetTM.GetModulePressure(Module) >= _purgeVentPressure; })                .LoopRun((int)PurgeStep.kPurgeDelay_2,          HOFs.WrapAction(_JetTM.TurnVentValve, Module, false),       _delay_1s)                .LoopRun((int)PurgeStep.kPurgePumpToCrossing,   HOFs.WrapAction(_JetTM.TurnSoftPumpValve, Module, true),    () => { return _JetTM.GetModulePressure(Module) < _basePressure; })                .LoopRun((int)PurgeStep.kPurgePumpToBase,       SwitchFastPump,                                             () => { return _JetTM.GetModulePressure(Module) < _basePressure; })                .LoopRun((int)PurgeStep.kPurgePumpDelay,        NullFun,                                                    _purgePumpTime * 1000)                .LoopEnd((int)PurgeStep.kPurgeEnd,              HOFs.WrapAction(_JetTM.CloseModuleAllValves, Module),       _delay_1s)                .End((int)PurgeStep.kEnd,                       NullFun,                                                    _delay_50ms);            return Runner.Status;        }        public void Abort()        {            _JetTM.CloseModuleAllValves(Module);        }        private bool SwitchFastPump()        {            _JetTM.TurnSoftPumpValve(Module, false);            _JetTM.TurnFastPumpValve(Module, true);            return true;        }    }}
 |