using Aitex.Core.Common; using MECF.Framework.Common.Equipment; using CyberX8_RT.Devices.EFEM; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Aitex.Core.RT.Log; using Aitex.Core.RT.Routine; using Aitex.Sorter.Common; using MECF.Framework.Common.Schedulers; using MECF.Framework.Common.SubstrateTrackings; using System.Diagnostics; using CyberX8_Core; using Aitex.Core.RT.SCCore; using System.Threading; namespace CyberX8_RT.Modules.EFEM { public class EfemVacuumRoutine : ModuleRoutineBase, IRoutine { private bool _vacuumStatus; private ModuleName _vacuumModule; private enum VacuumStep { VacuumAction, End, } EfemBase _efem; /// /// 构造函数 /// /// public EfemVacuumRoutine(EfemBase efem) : base(ModuleName.EFEM) { _efem = efem; } /// /// 启动 /// /// /// public RState Start(params object[] objs) { _vacuumModule = (ModuleName)objs[0]; _vacuumStatus = (bool)objs[1]; return Runner.Start(Module, "Vacumm"); } /// /// 监控 /// /// public RState Monitor() { Runner.Run(VacuumStep.VacuumAction, ()=> { return Vacuum(_vacuumModule, _vacuumStatus);}, CheckVacuumDone, 30000) .End(VacuumStep.End, NullFun, 0); return Runner.Status; } /// /// Vacuum功能 /// /// private bool Vacuum(ModuleName moduleName,bool VacuumState) { return _efem.Vacuum(moduleName,VacuumState); } private bool CheckVacuumDone() { if (_efem.Status == RState.End) { return true; } else if (_efem.Status == RState.Failed) { LOG.Write(eEvent.ERR_EFEM_COMMON_FAILED, Module, $"Efem Vacuum failed: {_efem.Status}"); return true; } return false; } public void Abort() { Runner.Stop("Manual Abort"); } } }