using Aitex.Core.RT.Routine; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Aitex.Core.RT.Log; using MECF.Framework.Common.Equipment; using Aitex.Core.RT.SCCore; using CyberX8_Core; using System.Windows.Controls; using CyberX8_RT.Modules.EFEM; using MECF.Framework.Common.Utilities; using CyberX8_RT.Devices.EFEM; namespace CyberX8_RT.Modules.LPs { class LoadPortMapRoutine : ModuleRoutineBase, IRoutine { enum RoutineStep { Map, CheckMap, End, } private int _timeout = 0; private EfemRobotMapRoutine _robotMapRoutine; public LoadPortMapRoutine(LoadPortModule lpModule,EfemBase efemBase) : base(ModuleHelper.Converter(lpModule.Module)) { Name = "Map"; _robotMapRoutine=new EfemRobotMapRoutine(efemBase); } public RState Start(params object[] objs) { Reset(); _timeout = SC.GetValue("EFEM.LoadPort.MotionTimeout"); Notify($"Start Map"); return Runner.Start(Module, Name); } public RState Monitor() { Runner.Run(RoutineStep.Map, StartMap, _delay_1ms) .WaitWithStopCondition(RoutineStep.CheckMap, () => CommonFunction.CheckRoutineEndState(_robotMapRoutine), () => CommonFunction.CheckRoutineStopState(_robotMapRoutine)) .End(RoutineStep.End, NullFun, _delay_1ms); return Runner.Status; } private bool StartMap() { return _robotMapRoutine.Start(Module)==RState.Running; } public void Abort() { Runner.Stop("Manual Abort"); } } }