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