using Aitex.Core.RT.Log;
using Aitex.Core.RT.Routine;
using Aitex.Core.Util;
using CyberX8_Core;
using CyberX8_RT.Devices.EFEM;
using MECF.Framework.Common.Equipment;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CyberX8_RT.Modules.EFEM
{
public class EfemSafeCloseRoutine : ModuleRoutineBase, IRoutine
{
private enum SafeCloseStep
{
Close,
Resume,
ResumeSignalCheck,
ResumeActionDoneCheck,
End
}
EfemBase _efem;
private EfemEntity _efemEntity;
public EfemSafeCloseRoutine(EfemBase efem) : base(ModuleName.EFEM)
{
_efem = efem;
}
///
/// 启动
///
///
///
public RState Start(params object[] objs)
{
return Runner.Start(Module, "Save Close");
}
///
/// 监控
///
///
public RState Monitor()
{
Runner.Run(SafeCloseStep.Close, () => { return Close(); }, _delay_1ms)
.Run(SafeCloseStep.Resume, () => { return Resume(); },_delay_1ms)
.Wait(SafeCloseStep.ResumeSignalCheck, CheckResumeDone)
.Wait(SafeCloseStep.ResumeActionDoneCheck, ResumeActionDoneCheck)
.End(SafeCloseStep.End, NullFun, 0);
return Runner.Status;
}
///
/// 暂停功能
///
///
private bool Resume()
{
return _efem.Resume();
}
///
/// 检查是否收到Resume_rdy
///
///
private bool CheckResumeDone()
{
return _efem.IsResumeRDYReceived;
}
///
/// 检查Resume动作是否完成
///
///
private bool ResumeActionDoneCheck()
{
return _efem.IsActionRDYReceived;
}
private bool Close()
{
_efemEntity = Singleton.Instance.GetModule(Module.ToString());
bool myBool = false;
return _efemEntity.DoorUnlock(new object[] { myBool });
}
public void Abort()
{
Runner.Stop("Manual Abort");
}
}
}