using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using Venus_RT.Devices; using MECF.Framework.Common.Equipment; using Venus_Core; namespace Venus_RT.Modules.TM { class MFVentRoutine : ModuleRoutineBase, IRoutine { private enum VentStep { kVenting, kOpenSoftVent, KSwitchFastVent, kCloseVentValves, //kOpenExhaustValve, KDelay, //kCloseExhaustValve, } private int _ventingTimeout; private int _SoftVentEndPressure; private readonly JetTM _JetTM; private int _ventTimeDelay = 1; public MFVentRoutine(JetTM jetTM, ModuleName mod) : base(mod) { _JetTM = jetTM; Name = "Vent "; } public RState Start(params object[] objs) { _JetTM.TurnSoftPumpValve(Module, false); _JetTM.TurnPurgeValve(Module, false); if (_JetTM.CheckLidClosed(Module) && _JetTM.CheckPumpValveClosed(Module) && _JetTM.CheckPurgeValveClosed(Module)) { Reset(); _ventingTimeout = SC.GetValue($"{Module}.VentingTimeout") * 1000; _SoftVentEndPressure= SC.GetValue($"{Module}.SoftVentEndPressure"); _ventTimeDelay = SC.GetValue($"{Module}.OverVentTime"); return Runner.Start(Module, Name); } return RState.Failed; } public RState Monitor() { Runner.Run(VentStep.kOpenSoftVent, OpenSoftVentValve, IsSoftVentEnd) .Run(VentStep.KSwitchFastVent, SwitchFastVentValve, IsPressureReady, _ventingTimeout) .Delay(VentStep.KDelay, _ventTimeDelay) .End(VentStep.kCloseVentValves, CloseVentValve, _delay_50ms); //Runner.Run(VentStep.kOpenSoftVent, OpenSoftVentValve, IsSoftVentEnd) // .Run(VentStep.KSwitchFastVent, SwitchFastVentValve, IsPressureReady, _ventingTimeout) // .Run(VentStep.kCloseVentValves, CloseVentValve, _delay_50ms) // .Run(VentStep.kOpenExhaustValve, OpenExhaustValve) // .Delay(VentStep.KDelay, _ventTimeDelay) // .End(VentStep.kCloseExhaustValve,CloseExhaustValve); return Runner.Status; } private bool OpenSoftVentValve() { _JetTM.TurnN2Valve(true); _JetTM.TurnPurgeValve(Module, true); return true; } private bool OpenExhaustValve() { _JetTM.TurnExhaustValve(Module, true); return true; } private bool CloseExhaustValve() { _JetTM.TurnExhaustValve(Module, false); return true; } private bool IsSoftVentEnd() { return _JetTM.GetModulePressure(Module) > _SoftVentEndPressure; } private bool SwitchFastVentValve() { if (Module == ModuleName.TM) { _JetTM.TurnPurgeValve(Module, false); _JetTM.SetTMFlow(100); } _JetTM.TurnVentValve(Module, true); return true; } private bool CloseVentValve() { //_JetTM.TurnN2Valve(false); _JetTM.TurnPurgeValve(Module, false); _JetTM.TurnVentValve(Module, false); if (Module == ModuleName.TM) { _JetTM.SetTMFlow(0); } return true; } private bool IsPressureReady() { return _JetTM.IsModuleATM(Module); } public void Abort() { CloseVentValve(); } } }