using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Venus_Core; using Venus_RT.Devices; namespace Venus_RT.Modules.PMs { class PMPartialPressureRoutine : PMRoutineBase, IRoutine { int gasIndex; int GasMaxScale; public int counter; int gasTime; ValveType[] valveTypes = new ValveType[4] { ValveType.PV11, ValveType.PV21, ValveType.PV31, ValveType.PV41 }; private enum PartialPressureStep { kDelay_1s, kStartGas, kReadChamberPressure, kEnd, } public PMPartialPressureRoutine(JetPM chamber) : base(chamber) { Name = "PMPartialPressure"; } public RState Start(params object[] objs) { if (!CheckTurboPump()) { return RState.Failed; } if (_chamber.GetPVPosition() == 0) { Stop("钟摆阀没有打开"); return RState.Failed; } _chamber.OpenValve(ValveType.Guage, true); _chamber.OpenValve(ValveType.TurboPumpPumping, true); _chamber.OpenValve(ValveType.TurboPumpPurge, true); counter = 1; Reset(); gasIndex = (int)objs[0]; gasTime = (int)objs[1]; GasMaxScale = SC.GetValue<int>($"{Module}.MfcGas{gasIndex.ToString()}.MfcN2Scale"); //_chamber.CloseValves(); _chamber.SetPVPostion(1000); return Runner.Start(Module, Name); } public RState Monitor() { Runner.Delay((int)PartialPressureStep.kDelay_1s, 1000 * 1) .LoopStart((int)PartialPressureStep.kStartGas, "Partial Pressure Test", 10, () => SetGasPoint(), gasTime) .LoopEnd((int)PartialPressureStep.kReadChamberPressure, ReadChamberPressure, _delay_1s) .End((int)PartialPressureStep.kEnd, () => { _chamber.CloseValves(); return true; }, 500); return Runner.Status; } private bool SetGasPoint() { if (gasIndex <= 4) { _chamber.OpenValve(valveTypes[gasIndex - 1], true); } _chamber.OpenValve(ValveType.GasFinal, true); _chamber.FlowGas(gasIndex - 1, GasMaxScale * 0.1 * counter); return true; } private bool ReadChamberPressure() { counter += 1; return true; } public void Abort() { _chamber.CloseValves(); } } }