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 LoadPortUndockRoutine : ModuleRoutineBase, IStepRoutine { enum RoutineStep { Undock, QueryStatus, End, } private int _timeout = 0; private LoadPortModule _lpModule; public LoadPortUndockRoutine(LoadPortModule lpModule) : base(lpModule.Module) { _lpModule = lpModule; Name = "Undock"; } 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.Undock, Undock, CheckDevice, _timeout * 1000) .End(RoutineStep.QueryStatus, QueryStatus, CheckDevice, _timeout * 1000); return Runner.Status; } bool Undock() { string reason; if (!_lpModule.LPDevice.Undock(out reason)) { Stop(reason); return false; } return true; } bool CheckDevice() { return !(_lpModule.LPDevice.Error || _lpModule.LPDevice.IsBusy); } bool QueryStatus() { string reason; if (!_lpModule.LPDevice.QueryState(out reason)) { Stop(reason); return false; } return true; } public void Abort() { } } }