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"); } } }