2023-04-13 15:35:13 +08:00
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
using Aitex.Core.RT.Routine;
|
2023-03-03 15:42:13 +08:00
|
|
|
|
using Aitex.Core.RT.SCCore;
|
|
|
|
|
using MECF.Framework.Common.Equipment;
|
2023-04-13 15:35:13 +08:00
|
|
|
|
using SicModules.Aligners.Routines.Base;
|
2023-03-03 15:42:13 +08:00
|
|
|
|
|
2023-04-13 15:35:13 +08:00
|
|
|
|
namespace SicModules.Aligners.Routines
|
2023-03-03 15:42:13 +08:00
|
|
|
|
{
|
|
|
|
|
public class AlignerAlignRoutine :AlignerBaseRoutine
|
|
|
|
|
{
|
|
|
|
|
enum RoutineStep
|
|
|
|
|
{
|
|
|
|
|
CheckWafer,
|
|
|
|
|
OpenVacuum,
|
|
|
|
|
MoveToMeasure,
|
|
|
|
|
Aligner,
|
|
|
|
|
CloseVacuum,
|
|
|
|
|
TimeDelay1,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Stopwatch _swTimer = new Stopwatch();
|
|
|
|
|
private int _alignerTimeOut = 60;
|
|
|
|
|
|
|
|
|
|
public AlignerAlignRoutine()
|
|
|
|
|
{
|
|
|
|
|
Module = ModuleName.Aligner.ToString();
|
|
|
|
|
Name = "Align";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override Result Start(params object[] objs)
|
|
|
|
|
{
|
|
|
|
|
Reset();
|
|
|
|
|
_swTimer.Restart();
|
|
|
|
|
_alignerTimeOut= SC.GetValue<int>("HiWinAligner.AlignerTimeout");
|
|
|
|
|
Notify("Start");
|
|
|
|
|
return Result.RUN;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override Result Monitor()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (SC.GetValue<bool>($"System.IsSimulatorMode"))
|
|
|
|
|
{
|
|
|
|
|
TimeDelay((int)RoutineStep.TimeDelay1, 3);
|
|
|
|
|
return Result.DONE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CheckHaveWafer((int)RoutineStep.CheckWafer, 10);
|
|
|
|
|
|
|
|
|
|
OpenVacuum((int)RoutineStep.OpenVacuum, 3);
|
|
|
|
|
|
|
|
|
|
//移动到测量中心
|
|
|
|
|
AlignerMoveToMeasure((int)RoutineStep.MoveToMeasure, 20);
|
|
|
|
|
|
|
|
|
|
DoAliger((int)RoutineStep.Aligner, _alignerTimeOut);
|
|
|
|
|
|
|
|
|
|
CloseVacuum((int)RoutineStep.CloseVacuum, 3);
|
|
|
|
|
}
|
|
|
|
|
catch (RoutineBreakException)
|
|
|
|
|
{
|
|
|
|
|
return Result.RUN;
|
|
|
|
|
}
|
|
|
|
|
catch (RoutineFaildException)
|
|
|
|
|
{
|
|
|
|
|
return Result.FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Notify($"Finished ! Elapsed time: {(int)(_swTimer.ElapsedMilliseconds / 1000)} s");
|
|
|
|
|
return Result.DONE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|