| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | using Aitex.Core.RT.Routine;using MECF.Framework.Common.Routine;using PunkHPX8_Core;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Runtime.InteropServices;namespace PunkHPX8_RT.Modules.LPs{    sealed class LoadPortCycleLoadUnloadRoutine : RoutineBase, IRoutine    {        private enum CycleLoadStep        {            LoopStart,            LoopLoad,            LoopLoadWait,            LoopDelay,            LoopUnload,            LoopUnloadWait,            LoopEnd,            End        }        #region 内部变量        private LoadPortModule _loadPortModule;        private LoadPortLoadRoutine _loadRoutine;        private LoadPortUnloadRoutine _unloadRoutine;        private int _cycle = 0;        #endregion        /// <summary>        /// 构造函数        /// </summary>        /// <param name="module"></param>        public LoadPortCycleLoadUnloadRoutine(LoadPortModule loadPortModule) : base(loadPortModule.Module)        {            _loadRoutine = new LoadPortLoadRoutine(loadPortModule);            _unloadRoutine=new LoadPortUnloadRoutine(loadPortModule);            _loadPortModule = loadPortModule;        }        /// <summary>        /// Abort        /// </summary>        public void Abort()        {            Runner.Stop("Manual Abort");        }        public RState Monitor()        {            Runner.LoopStart(CycleLoadStep.LoopStart, "Loop Start Load/Uload", _cycle, NullFun, _delay_1ms)                .LoopRun(CycleLoadStep.LoopLoad, () => _loadRoutine.Start() == RState.Running, _delay_1ms)                .LoopRunWithStopStatus(CycleLoadStep.LoopLoadWait, () => CheckRoutineEndStatus(_loadRoutine), () => CheckRoutineStopStatus(_loadRoutine))                .LoopDelay(CycleLoadStep.LoopDelay,_delay_2s)                .LoopRun(CycleLoadStep.LoopUnload, () => _unloadRoutine.Start() == RState.Running, _delay_1ms)                .LoopRunWithStopStatus(CycleLoadStep.LoopUnloadWait, () => CheckRoutineEndStatus(_unloadRoutine), () => CheckRoutineStopStatus(_unloadRoutine))                .LoopEnd(CycleLoadStep.LoopEnd, NullFun, _delay_2s)                .End(CycleLoadStep.End, NullFun, _delay_1ms);            return Runner.Status;        }        private bool CheckRoutineEndStatus(IRoutine routine)        {            return routine.Monitor() == RState.End;        }        private bool CheckRoutineStopStatus(IRoutine routine)        {            RState state =routine.Monitor();            if(state==RState.Failed||state==RState.Timeout)            {                return true;            }            return false;        }        public RState Start(params object[] objs)        {            _cycle=(int)objs[0];            return Runner.Start(Module, "Start cycle Load/Unload");        }    }}
 |