| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 | using Aitex.Core.RT.Routine;using Aitex.Core.RT.SCCore;using Aitex.Sorter.Common;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;using Venus_RT.Devices.TM;namespace Venus_RT.Modules.TM.VenusEntity{    public class SEMFHomeRoutine : ModuleRoutineBase, IRoutine    {        private enum HomeStep        {            seRobotHome,            seRobotBlade1CheckLoad,            seRobotBlade2CheckLoad,            QueryARMA,            QueryARMB,            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 TMBase _HongHuTM;        private readonly ITransferRobot _robot;        private readonly IPreAlign _vpa;        public int currentStepNo;        public SEMFHomeRoutine(TMBase HongHuTM, ITransferRobot robot,IPreAlign vpa,ModuleName module) : base(module)        {            _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()        {            if(!_TMHomeRBFlag)                Runner.Run(HomeStep.seRobotHome, HomeRobot, CheckRobotReady, _robotHomingTimeout)                      .Run(HomeStep.seRobotBlade1CheckLoad, Blade1CheckLoad, CheckRobotReady, _robotHomingTimeout)                      .Run(HomeStep.seRobotBlade2CheckLoad, Blade2CheckLoad, CheckRobotReady, _robotHomingTimeout)                      .Run(HomeStep.QueryARMA, ReQueryLoadA, CheckRobotReady, _robotHomingTimeout)                      .Run(HomeStep.QueryARMB, ReQueryLoadB, 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);            else                Runner.Run(HomeStep.seRobotHome, HomeRobot, CheckRobotReady, _robotHomingTimeout)                      .End(HomeStep.seEnd, NullFun, _delay_50ms);            return Runner.Status;        }        private bool CheckVPAReady()        {            //vpa 检查            return _vpa.Status == RState.End;            //return true;        }        private bool ReQueryLoadA()        {            return _robot.ReQueryLoadA();        }        private bool ReQueryLoadB()        {            return _robot.ReQueryLoadB();        }        private bool HomeVPA()        {            //vpa home            //11.3 直接跳过vpa            return _vpa.Home();            //return true;        }        private bool CheckSlitDoorReady()        {            if (_HongHuTM.Module == "SETM")            {                //检查门状态                if (_HongHuTM.AllPMSlitDoorClosed && _HongHuTM.VCESlitDoorClosed(ModuleName.VCE1))                    return true;                else                    return false;            }            if (_HongHuTM.Module == "DETM")            {                //检查门状态                if (_HongHuTM.AllPMSlitDoorClosed && _HongHuTM.VCESlitDoorClosed(ModuleName.VCEA)&&_HongHuTM.VCESlitDoorClosed(ModuleName.VCEB))                    return true;                else                    return false;            }            return false;        }        private bool HomeSlitDoor()        {            _HongHuTM.HomeVceSlitDoor();            currentStepNo = 2;            return _HongHuTM.CloseAllSlitDoor();        }        private bool CheckRobotReady()        {            //robot状态结束            return _robot.Status == RState.End;        }        private bool Blade1CheckLoad()        {            return _robot.CheckLoad(Hand.Blade1);        }        private bool Blade2CheckLoad()        {            return _robot.CheckLoad(Hand.Blade2);        }        private bool HomeRobot()        {            //robot开始Home            currentStepNo = 1;            return _robot.Home();        }        public void Abort()        {        }    }}
 |