| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | using Aitex.Core.Common;using MECF.Framework.Common.Equipment;using PunkHPX8_RT.Devices.EFEM;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Aitex.Core.RT.Log;using Aitex.Core.RT.Routine;using Aitex.Sorter.Common;using MECF.Framework.Common.Schedulers;using MECF.Framework.Common.SubstrateTrackings;using System.Diagnostics;using PunkHPX8_Core;using Aitex.Core.RT.SCCore;using System.Threading;using Aitex.Core.Util;using MECF.Framework.Common.Utilities;namespace PunkHPX8_RT.Modules.EFEM{    public class EfemMapDummyRoutine:ModuleRoutineBase, IRoutine    {        private enum MapDummyStep        {            MapDummy1,            CheckDummy1Map,            MapDummy2,            CheckDummy2Map,            End,        }        private EfemBase _efem;        private EfemRobotMapRoutine _robotMapRoutine;        bool _isDummy1Install = ModuleHelper.IsInstalled(ModuleName.Dummy1);        bool _isDummy2Install = ModuleHelper.IsInstalled(ModuleName.Dummy2);        /// <summary>        /// 构造函数        /// </summary>        /// <param name="efem"></param>        public EfemMapDummyRoutine(EfemBase efem) : base(ModuleName.EfemRobot)        {            _efem = efem;            _robotMapRoutine=new EfemRobotMapRoutine(efem);        }        /// <summary>        /// 启动        /// </summary>        /// <param name="objs"></param>        /// <returns></returns>        public RState Start(params object[] objs)        {            return Runner.Start(Module, "Map Dummy");        }        /// <summary>        /// 监控        /// </summary>        /// <returns></returns>        public RState Monitor()        {            Runner.RunIf(MapDummyStep.MapDummy1, CheckDummyAvaible(ModuleName.Dummy1, _isDummy1Install),                    () => { return Map(ModuleName.Dummy1);},_delay_1ms)                .WaitWithStopConditionIf(MapDummyStep.CheckDummy1Map, CheckDummyAvaible(ModuleName.Dummy1, _isDummy1Install),                    () => CommonFunction.CheckRoutineEndState(_robotMapRoutine), () => CommonFunction.CheckRoutineStopState(_robotMapRoutine))                .RunIf(MapDummyStep.MapDummy2, CheckDummyAvaible(ModuleName.Dummy2, _isDummy2Install),                    () => { return Map(ModuleName.Dummy2); }, _delay_1ms)                .WaitWithStopConditionIf(MapDummyStep.CheckDummy2Map, CheckDummyAvaible(ModuleName.Dummy2, _isDummy2Install),                    () => CommonFunction.CheckRoutineEndState(_robotMapRoutine), () => CommonFunction.CheckRoutineStopState(_robotMapRoutine))                .End(MapDummyStep.End, ActionDone, 0);            return Runner.Status;        }        private bool CheckDummyAvaible(ModuleName moduleName, bool install)        {            if (!install)            {                return false;            }            if (ModuleHelper.IsDummy(moduleName))            {                DummyDevice dummyDevice = Singleton<RouteManager>.Instance.EFEM.GetDummyDevice(moduleName - ModuleName.Dummy1);                if (dummyDevice == null)                {                    return false;                }                return dummyDevice.HasCassette;            }            return false;        }        /// <summary>        /// Map功能        /// </summary>        /// <returns></returns>        private bool Map(ModuleName moduleName)        {            return _robotMapRoutine.Start(moduleName) == RState.Running;        }        private bool ActionDone()        {            return true;        }        public void Abort()        {        }    }}
 |