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; using Aitex.Core.Util; using MECF.Framework.Common.Utilities; namespace CyberX8_RT.Modules.EFEM { public class EfemMapDummyRoutine:ModuleRoutineBase, IRoutine { private enum MapDummyStep { MapDummy1, CheckDummy1Map, MapDummy2, CheckDummy2Map, End, } private EfemBase _efem; private EfemRobotMapRoutine _robotMapRoutine; bool _isDummy1Install = ModuleHelper.IsInstalled(ModuleName.Dummy1); bool _isDummy2Install = ModuleHelper.IsInstalled(ModuleName.Dummy2); /// /// 构造函数 /// /// public EfemMapDummyRoutine(EfemBase efem) : base(ModuleName.EfemRobot) { _efem = efem; _robotMapRoutine=new EfemRobotMapRoutine(efem); } /// /// 启动 /// /// /// public RState Start(params object[] objs) { return Runner.Start(Module, "Map Dummy"); } /// /// 监控 /// /// public RState Monitor() { Runner.RunIf(MapDummyStep.MapDummy1, CheckDummyAvaible(ModuleName.Dummy1, _isDummy1Install), () => { return Map(ModuleName.Dummy1);},_delay_1ms) .WaitWithStopConditionIf(MapDummyStep.CheckDummy1Map, CheckDummyAvaible(ModuleName.Dummy1, _isDummy1Install), () => CommonFunction.CheckRoutineEndState(_robotMapRoutine), () => CommonFunction.CheckRoutineStopState(_robotMapRoutine)) .RunIf(MapDummyStep.MapDummy2, CheckDummyAvaible(ModuleName.Dummy2, _isDummy2Install), () => { return Map(ModuleName.Dummy2); }, _delay_1ms) .WaitWithStopConditionIf(MapDummyStep.CheckDummy2Map, CheckDummyAvaible(ModuleName.Dummy2, _isDummy2Install), () => CommonFunction.CheckRoutineEndState(_robotMapRoutine), () => CommonFunction.CheckRoutineStopState(_robotMapRoutine)) .End(MapDummyStep.End, ActionDone, 0); return Runner.Status; } private bool CheckDummyAvaible(ModuleName moduleName, bool install) { if (!install) { return false; } if (ModuleHelper.IsDummy(moduleName)) { DummyDevice dummyDevice = Singleton.Instance.EFEM.GetDummyDevice(moduleName - ModuleName.Dummy1); if (dummyDevice == null) { return false; } return dummyDevice.HasCassette; } return false; } /// /// Map功能 /// /// private bool Map(ModuleName moduleName) { return _robotMapRoutine.Start(moduleName) == RState.Running; } private bool ActionDone() { return true; } public void Abort() { } } }