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 EfemMapDummyRoutine:ModuleRoutineBase, IRoutine { private enum MapDummyStep { SetDummy1Size, MapDummy1, SetDummy2Size, MapDummy2, End, } EfemBase _efem; private int _waferSize = SC.GetValue("System.WaferSize"); /// /// 构造函数 /// /// public EfemMapDummyRoutine(EfemBase efem) : base(ModuleName.EfemRobot) { _efem = efem; } /// /// 启动 /// /// /// public RState Start(params object[] objs) { return Runner.Start(Module, "Map Dummy"); } /// /// 监控 /// /// public RState Monitor() { Runner.RunIf(MapDummyStep.SetDummy1Size, ModuleHelper.IsInstalled(ModuleName.Dummy1), () => { return SetWaferSize(ModuleName.Dummy1); }, CheckSetSizeDone,_delay_5s) .RunIf(MapDummyStep.MapDummy1, ModuleHelper.IsInstalled(ModuleName.Dummy1), () => { return Map(ModuleName.Dummy1);},CheckMapDone,40000) .RunIf(MapDummyStep.SetDummy2Size, ModuleHelper.IsInstalled(ModuleName.Dummy2), () => { return SetWaferSize(ModuleName.Dummy2); }, CheckSetSizeDone,_delay_5s) .RunIf(MapDummyStep.MapDummy2, ModuleHelper.IsInstalled(ModuleName.Dummy2), () => { return Map(ModuleName.Dummy2); }, CheckMapDone, 40000) .End(MapDummyStep.End, ActionDone, 0); return Runner.Status; } /// /// Map功能 /// /// private bool Map(ModuleName moduleName) { return _efem.Map(moduleName); } /// /// 设置晶圆尺寸 /// /// private bool SetWaferSize(ModuleName moduleName) { return _efem.SetWaferSize(moduleName,_waferSize); } private bool CheckMapDone() { if (_efem.Status == RState.End) { return true; } else if (_efem.Status != RState.Running) { LOG.Write(eEvent.ERR_EFEM_COMMON_FAILED, Module, $"Efem MapDummy failed: {_efem.Status}"); return true; } return false; } private bool CheckSetSizeDone() { if (_efem.Status == RState.End) { return true; } else if (_efem.Status != RState.Running) { LOG.Write(eEvent.ERR_EFEM_COMMON_FAILED, Module, $"Efem SetDummySize failed: {_efem.Status}"); return true; } return false; } private bool ActionDone() { return true; } public void Abort() { } } }