| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | using Aitex.Core.RT.Routine;using Aitex.Core.RT.SCCore;using MECF.Framework.Common.Equipment;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Venus_Core;using Venus_RT.Devices;using Venus_RT.Devices.PreAligner;namespace Venus_RT.Modules.TM.VenusEntity{    public class SEMFHomeRoutine : ModuleRoutineBase, IRoutine    {        private enum HomeStep        {            seRobotHome,            seRobotDelay,            seSlitDoor,            seSlitDoorDelay,            seVPAHome,            seEnd,        }        private int _robotHomingTimeout = 120 * 1000;        private int _slitDoorHomingTimeout = 20 * 1000;        private int _vpaHomingTimeout = 20 * 1000;        private bool _TMHomeRBFlag = false; //是否仅仅home robot        private readonly HongHuTM _HongHuTM;        private readonly ITransferRobot _robot;        private readonly IPreAlign _vpa;        public int currentStepNo;        public SEMFHomeRoutine(HongHuTM HongHuTM, ITransferRobot robot,IPreAlign vpa) : base(ModuleName.TM)        {            _HongHuTM = HongHuTM;            _robot = robot;            _vpa = vpa;            Name = "SE TM Home";        }        public RState Start(params object[] objs)        {            if (objs.Length > 0 && objs[0].ToString() == "TMRobot")                _TMHomeRBFlag = true;            currentStepNo = 0;            //没有Lid传感 检查            Reset();            _robotHomingTimeout = SC.GetValue<int>($"{Module}.HomeTimeout") * 1000;            return Runner.Start(Module, Name);        }        //模式 指令名称 执行命令 检查结束命令 超时时长        public RState Monitor()        {            Runner.Run(HomeStep.seRobotHome,        HomeRobot,          CheckRobotReady,            _robotHomingTimeout)                  .Delay(HomeStep.seRobotDelay,     500)                  .Run(HomeStep.seSlitDoor,         HomeSlitDoor,       CheckSlitDoorReady,         _slitDoorHomingTimeout)                  .Delay(HomeStep.seSlitDoorDelay,  500)                  .Run(HomeStep.seVPAHome,          HomeVPA,            CheckVPAReady,              _vpaHomingTimeout)                  .End(HomeStep.seEnd,              NullFun,            _delay_50ms);            return Runner.Status;        }        private bool CheckVPAReady()        {            //vpa 检查            return _vpa.Status == RState.End;        }        private bool HomeVPA()        {            //vpa home            return _vpa.Home();        }        private bool CheckSlitDoorReady()        {            //检查门状态            if (_HongHuTM.AllPMSlitDoorClosed && _HongHuTM.VCESlitDoorClosed)                return true;            else                return false;        }        private bool HomeSlitDoor()        {            _HongHuTM.HomeVceSlitDoor();            currentStepNo = 2;            return _HongHuTM.CloseAllSlitDoor();        }        private bool CheckRobotReady()        {            //robot状态结束            return _robot.Status == RState.End;        }        private bool HomeRobot()        {            //robot开始Home            currentStepNo = 1;            return _robot.Home();        }        public void Abort()        {        }    }}
 |