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
}
}
}