using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; 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.Modules.PMs; namespace Venus_RT.Modules.TM { class MFControlPressureRoutine : ModuleRoutineBase, IRoutine { private enum ControlPressureStep { PumpDown, Delay1s, StartControlPressure, End } private readonly JetTM _JetTM; private readonly MFPumpRoutine _pumpDownRoutine; private int _controlPressureCheckPoint = 100; private int _controlPressureSetPoint = 90; private int _controlFlowSetPoint = 90; public MFControlPressureRoutine(JetTM jetTM, MFPumpRoutine pumpDownRoutine) : base(ModuleName.TM) { _JetTM = jetTM; _pumpDownRoutine = pumpDownRoutine; } public RState Start(params object[] objs) { _controlPressureCheckPoint= SC.GetValue($"TM.ControlPressureCheckPoint"); _controlPressureSetPoint= SC.GetValue($"TM.ControlPressureSetPoint"); _controlFlowSetPoint= SC.GetValue($"TM.TM_MFC1.DefaultSetPoint"); return Runner.Start(Module, Name); } public RState Monitor() { Runner.Run(ControlPressureStep.PumpDown, PumpingDown, StopPumpDone) .Delay(ControlPressureStep.Delay1s, _delay_1s) .Run(ControlPressureStep.StartControlPressure, StartControlPressure) .End(ControlPressureStep.End, End); return Runner.Status; } private bool PumpingDown() { return _pumpDownRoutine.Start() == RState.Running; } private bool StopPumpDone() { var status = _pumpDownRoutine.Monitor(); if (_JetTM.TMPressure <= _controlPressureCheckPoint && status == RState.End) { _JetTM.TurnSoftPumpValve(ModuleName.TM, false); _JetTM.TurnFastPumpValve(ModuleName.TM, false); _JetTM.TurnFastPumpValve(ModuleName.TM,true); return true; } else { return false; } } private bool StartControlPressure() { _JetTM.TurnN2Valve(true); _JetTM.TurnPurgeValve(ModuleName.TM, true); if (_JetTM.AllPMSlitDoorClosed) { _JetTM.SwitchTMPressureMode(true); _JetTM.SetTMPressure(_controlPressureSetPoint); } else { _JetTM.SwitchTMPressureMode(false); _JetTM.SetTMFlow(_controlFlowSetPoint); } return true; } private bool End() { return true; } public void Abort() { if(_JetTM != null) { _JetTM.TurnFastPumpValve(ModuleName.TM, false); _JetTM.TurnN2Valve(false); _JetTM.TurnPurgeValve(ModuleName.TM, false); _JetTM.SetTMPressure(0); _JetTM.SetTMFlow(0); } } } }