| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | using Aitex.Core.RT.Log;using Aitex.Core.RT.Routine;using Aitex.Core.Util;using PunkHPX8_Core;using PunkHPX8_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 PunkHPX8_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;        }        /// <summary>        /// 启动        /// </summary>        /// <param name="objs"></param>        /// <returns></returns>        public RState Start(params object[] objs)        {            return Runner.Start(Module, "Save Close");        }        /// <summary>        /// 监控        /// </summary>        /// <returns></returns>        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;        }        /// <summary>        /// 暂停功能        /// </summary>        /// <returns></returns>        private bool Resume()        {            return _efem.Resume();        }        /// <summary>        /// 检查是否收到Resume_rdy        /// </summary>        /// <returns></returns>        private bool CheckResumeDone()        {            return _efem.IsResumeRDYReceived;        }        /// <summary>        /// 检查Resume动作是否完成        /// </summary>        /// <returns></returns>        private bool ResumeActionDoneCheck()        {            return _efem.IsActionRDYReceived;        }        private bool Close()        {            _efemEntity = Singleton<RouteManager>.Instance.GetModule<EfemEntity>(Module.ToString());            bool myBool = false;            return _efemEntity.DoorUnlock(new object[] { myBool });        }        public void Abort()        {            Runner.Stop("Manual Abort");        }    }}
 |