using System; using Aitex.Core.RT.Device; using Aitex.Core.RT.Log; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts; namespace JetEfemLib.LPs { class LoadPortMapRoutine : ModuleRoutineBase, IStepRoutine { enum RoutineStep { Map, QueryStatus, End, } private int _timeout = 0; private LoadPortModule _lpModule; public LoadPortMapRoutine(LoadPortModule lpModule) : base(lpModule.Module) { _lpModule = lpModule; Name = "Map"; } public bool Initalize() { return true; } public RState Start(params object[] objs) { Reset(); _timeout = SC.GetValue("EFEM.LoadPort.MotionTimeout"); return Runner.Start(_lpModule.Module, Name); } public RState Monitor() { Runner.Run(RoutineStep.Map, Map, CheckDevice,_timeout *1000) .End(RoutineStep.QueryStatus, QueryStatus, CheckDevice,_timeout *1000); return Runner.Status; } bool Map() { Notify($"Start map {_lpModule.LPDevice.Name}"); string reason; if (!_lpModule.LPDevice.QueryWaferMap(out reason)) { Stop(reason); return false; } return true; } bool CheckDevice() { return !(_lpModule.LPDevice.Error || _lpModule.LPDevice.IsBusy); } bool QueryStatus() { Notify($"Start query status {_lpModule.LPDevice.Name}"); string reason; if (!_lpModule.LPDevice.QueryState(out reason)) { Stop(reason); return false; } return true; } public void Abort() { } } }