| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | using Aitex.Core.RT.Log;using Aitex.Core.RT.Routine;using CyberX8_Core;using CyberX8_RT.Devices.EFEM;using CyberX8_RT.Modules.Rinse;using MECF.Framework.Common.Equipment;using MECF.Framework.Common.Routine;using MECF.Framework.Common.Utilities;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CyberX8_RT.Modules.EFEM{    public class CycleRobotCycleRoutine : ModuleRoutineBase, IRoutine    {        private enum CycleRobotCycleStep        {            LoopStart,            LoopRunRobotCycle,            LoopRunRobotCycleWait,            LoopEnd,            End        }        /// <summary>        /// Cycle次数        /// </summary>        private int _cycleTimes;        /// <summary>        /// 当前处于第几次Cycle        /// </summary>        private int _currentCycle;        private object[] param;        private RobotCycleRoutine _robotCycleRoutine;        public CycleRobotCycleRoutine(EfemBase efem) : base(ModuleName.EfemRobot)        {            _robotCycleRoutine = new RobotCycleRoutine(efem);        }        public RState Start(params object[] objs)        {            param = objs;            _currentCycle = 1;//初始化当前Cycle次数            if (objs.Length >= 6)            {                _cycleTimes = (int)objs[4];                if (_cycleTimes < 1)                {                    LOG.Write(eEvent.ERR_EFEM_ROBOT, Module, $"Input Robot Cycle Times{_cycleTimes} error");                    return RState.Failed;                }            }            return Runner.Start(Module, "Start CycleRobotCycleRoutine");        }        public RState Monitor()        {            Runner.LoopStart(CycleRobotCycleStep.LoopStart, "Loop StartCycleRobotCycleRoutine", _cycleTimes, NullFun, _delay_1ms)                .LoopRun(CycleRobotCycleStep.LoopRunRobotCycle, () => _robotCycleRoutine.Start(param) == RState.Running,_delay_1ms)                .LoopRunWithStopStatus(CycleRobotCycleStep.LoopRunRobotCycleWait, () => { return CommonFunction.CheckRoutineEndState(_robotCycleRoutine); },                 () => CheckRoutineStopStatus(_robotCycleRoutine, "CycleRobotCycleRoutine failed"))                .LoopEnd(CycleRobotCycleStep.LoopEnd, UpdateCycleCount, _delay_1ms)                .End(CycleRobotCycleStep.End, AchievedCycleCount, _delay_1ms);            return Runner.Status;        }        private bool CheckRoutineStopStatus(IRoutine routine, string error)        {            bool result = CommonFunction.CheckRoutineStopState(routine);            if (result)            {                Stop($"{error}");            }            return result;        }                /// <summary>        /// Abort        /// </summary>        public void Abort()        {            Runner.Stop("CycleRobotCycleRoutine Abort");        }        /// <summary>        /// 统计完成的Cycle次数        /// </summary>        /// <returns></returns>        private bool UpdateCycleCount()        {            _currentCycle += 1;            return true;        }        /// <summary>        ///         /// </summary>        /// <returns></returns>        private bool AchievedCycleCount()        {            _currentCycle -= 1;            return true;        }        /// <summary>        /// 获取当前Cycle次数        /// </summary>        /// <returns></returns>        public int GetCurrentCycle()        {            return _currentCycle;        }    }}
 |