using Aitex.Core.RT.Log; using Aitex.Core.RT.Routine; using Aitex.Core.Util; using CyberX8_Core; using CyberX8_RT.Devices.EFEM; using CyberX8_RT.Modules.SRD; 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 EfemSafeOpenRoutine : ModuleRoutineBase, IRoutine { private enum SafeOpenStep { Pause, PauseSignalCheck, Open, End } private EfemEntity _efemEntity; EfemBase _efem; public EfemSafeOpenRoutine(EfemBase efem) : base(ModuleName.EFEM) { _efem = efem; } /// /// 启动 /// /// /// public RState Start(params object[] objs) { return Runner.Start(Module, "Save Open"); } /// /// 监控 /// /// public RState Monitor() { Runner.Run(SafeOpenStep.Pause, () => { return Pause(); }, _delay_1ms) .Wait(SafeOpenStep.PauseSignalCheck, CheckPauseDone) .Run(SafeOpenStep.Open, () => { return Open(); },_delay_1ms) .End(SafeOpenStep.End, NullFun, 0); return Runner.Status; } /// /// 暂停功能 /// /// private bool Pause() { return _efem.Pause(); } /// /// 检查是否Pause /// /// private bool CheckPauseDone() { return _efem.IsPauseRDYReceived; } private bool Open() { _efemEntity = Singleton.Instance.GetModule(Module.ToString()); bool myBool = true; return _efemEntity.DoorUnlock(new object[] { myBool }); } public void Abort() { Runner.Stop("Manual Abort"); } } }