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, seRobotCheckLoad, 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($"{Module}.HomeTimeout") * 1000; return Runner.Start(Module, Name); } //模式 指令名称 执行命令 检查结束命令 超时时长 public RState Monitor() { Runner.Run(HomeStep.seRobotHome, HomeRobot, CheckRobotReady, _robotHomingTimeout) .Run(HomeStep.seRobotCheckLoad, CheckLoad, 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; //return true; } private bool HomeVPA() { //vpa home //11.3 直接跳过vpa return _vpa.Home(); //return true; } 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 CheckLoad() { return _robot.CheckLoad(); } private bool HomeRobot() { //robot开始Home currentStepNo = 1; return _robot.Home(); } public void Abort() { } } }