using Aitex.Core.RT.Log; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using Aitex.Core.Util; using MECF.Framework.Common.Equipment; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Venus_Core; using Venus_RT.Devices; using Venus_RT.Devices.TM; namespace Venus_RT.Modules.TM.VenusEntity { public class SEMFPumpRoutine : ModuleRoutineBase, IRoutine { public enum PumpDownStep { seWaitModuleReady, seOpenSoftPump, seSwitchFastPump, seClosePumpValves, seDelayForSafe, seReleasePump } private double _pumpBasePressure; private double _pumpCrossingPressure; private int _pumpingTimeout; private int _switchPumpDelay; private readonly TMBase _TM; public SEMFPumpRoutine(TMBase tm,ModuleName module) : base(module) { _TM = tm; Name = "Pump Down"; } public RState Start(params object[] objs) { if (ModuleHelper.IsVCE(Module) && !Singleton.Instance.GetVCE(Module).VCEOutDoorClosed) { LOG.Write(eEvent.ERR_VCE_COMMON_Failed, Module, $"cannot pumpdown as {Module}outdoor is open."); return RState.Failed; } //待补充 lid purge状态检查 没有相关IO if (_TM.CheckVentValveClosed(Module)) { Reset(); _pumpBasePressure = SC.GetValue($"{Module}.PumpBasePressure"); _pumpCrossingPressure = SC.GetValue($"{Module}.PumpCrossingPressure"); _pumpingTimeout = SC.GetValue($"{Module}.PumpingTimeout") * 1000; _switchPumpDelay = SC.GetValue($"{Module}.SwitchPumpDelay"); return Runner.Start(Module, Name); } return RState.Failed; } public RState Monitor() { Runner .Wait(PumpDownStep.seWaitModuleReady, WaitPump, _delay_60s) .Run(PumpDownStep.seOpenSoftPump, OpenSoftPump, ArriveCrossPressure, _pumpingTimeout) .Run(PumpDownStep.seSwitchFastPump, SwitchFastPump, IsPressureReady, _pumpingTimeout) .Delay(PumpDownStep.seDelayForSafe, _switchPumpDelay) .Run(PumpDownStep.seClosePumpValves, ClosePumpValves, NullFun) .End(PumpDownStep.seReleasePump, ReleaseTMPump, NullFun); return Runner.Status; } private bool WaitPump() { if (!IsPressureReady()) { return _TM.TryGetPump(Module); } return true; } private bool OpenSoftPump() { if (!IsPressureReady()) { _TM.TurnSoftPumpValve(Module, true); } return true; } private bool ArriveCrossPressure() { return _TM.GetModulePressure(Module) < _pumpCrossingPressure; } public bool SwitchFastPump() { if (!IsPressureReady()) { _TM.TurnSoftPumpValve(Module,false); _TM.TurnFastPumpValve(Module,true); } return true; } public bool IsPressureReady() { return _TM.GetModulePressure(Module) < _pumpBasePressure; } public bool ClosePumpValves() { _TM.TurnFastPumpValve(Module, false); _TM.TurnSoftPumpValve(Module, false); return true; } public bool ReleaseTMPump() { _TM.ReleasePump(Module); return true; } public void Abort() { //关闭所有阀体 释放使用权 _TM.TurnFastPumpValve(Module, false); _TM.TurnSoftPumpValve(Module, false); _TM.ReleasePump(Module); } } }