using Aitex.Core.RT.Event; using Aitex.Core.RT.Log; using Aitex.Core.RT.Routine; using EFEM.RT.Devices.Flipper; using MECF.Framework.Common.Equipment; using System; namespace EFEM.RT.Routines.FLP { public class FlipperHomeRoutine : CommonRoutine, IRoutine { private FlipperBase _flipper; private ModuleName modulename; private int _waitTimeout; private int _ClampTimeout; private int _TurnTimeout; public FlipperHomeRoutine(ModuleName module, FlipperBase flipper) { modulename = module; _flipper = flipper; _waitTimeout = 60; _ClampTimeout = 60; _TurnTimeout = 60; } public Result Start(params object[] objs) { if (_flipper == null) { LOG.Error($"{Module.ToString()} Flipper is null. Cannot Start"); return Result.FAIL; } Reset(); return Result.RUN; } public Result Monitor() { try { FlipperReset((int)FlipperHomeStep.Reset, _flipper, "Flipper Reset", _waitTimeout, Notify, Stop); TimeDelay((int)FlipperHomeStep.DeviceWait1, 1000); FlipperClampClose((int)FlipperHomeStep.ClampClose, _flipper, "Flipper Clamp Close", _ClampTimeout, Notify, Stop); TimeDelay((int)FlipperHomeStep.DeviceWait2, 1000); FlipperTurnToHome((int)FlipperHomeStep.TurnToHome, _flipper, "Flipper Turn to Home", _TurnTimeout, Notify, Stop); } catch (RoutineBreakException) { return Result.RUN; } catch (RoutineFaildException) { return Result.FAIL; } EV.PostMessage(ModuleName.System.ToString(), EventEnum.HomeEnds, ModuleName.System.ToString()); return Result.DONE; } protected override void Notify(string message) { EV.PostMessage(Module, EventEnum.GeneralInfo, String.Format("Flipper Home Sequence :{0}", message)); } /// /// prepare process failed /// /// /// protected override void Stop(string failReason) { string reason = String.Empty; EV.PostMessage(Module, EventEnum.HomeFailed, failReason); } enum FlipperHomeStep { Reset, DeviceWait1, ClampOpen, ClampClose, DeviceWait2, TurnToHome } } }