Sic03-8inch/Modules/Mainframe/EFEMs/Routines/TrayRobotMapRoutine.cs

84 lines
2.3 KiB
C#

using Aitex.Core.RT.Event;
using Aitex.Core.RT.Log;
using Aitex.Core.RT.Routine;
using Aitex.Core.RT.SCCore;
using MECF.Framework.Common.Equipment;
using SicModules.EFEMs.Routines.Base;
namespace SicModules.EFEMs.Routines
{
public class TrayRobotMapRoutine : EfemBaseRoutine
{
enum RoutineStep
{
CheckRobotReady,
RobotMap,
TimeDelay1,
}
public TrayRobotMapRoutine()
{
Module = ModuleName.TrayRobot.ToString();
Name = "TrayRobortMap";
}
private ModuleName _source;
private int _motionTimeOut = 10;
public void Init(ModuleName source)
{
_source = source;
}
public override Result Start(params object[] objs)
{
Reset();
if (_source == ModuleName.LoadLock || _source == ModuleName.UnLoad)
{
return Result.DONE;
}
if (_source == ModuleName.CassBL)
{
//检测凸片Sensor和有无Sensor
if (_cassBLWaferConvex.Value)
{
EV.PostWarningLog(Module, $"Can not map,{_source} check wafer convex");
return Result.FAIL;
}
if (!_cassBL6Inch.Value)
{
EV.PostWarningLog(Module, $"Can not map,{_source} sensor check no cassette");
return Result.FAIL;
}
}
_motionTimeOut = SC.GetConfigItem($"{ModuleName.TrayRobot}.MotionTimeout").IntValue;
return Result.RUN;
}
public override Result Monitor()
{
try
{
CheckRobotReady((int)RoutineStep.CheckRobotReady, WaferRobot, _motionTimeOut); //判断机械手当前是否空闲
Map((int)RoutineStep.RobotMap, TrayRobot, _source, _motionTimeOut); //机械手吸住,收回
}
catch (RoutineBreakException)
{
return Result.RUN;
}
catch (RoutineFaildException ex)
{
LOG.Error(ex.ToString());
return Result.FAIL;
}
Notify($"Finish");
return Result.DONE;
}
}
}