|
@@ -25,10 +25,12 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
{
|
|
|
private enum RecipeStep
|
|
|
{
|
|
|
+ LoopStart,
|
|
|
WaferHolderClampOn,
|
|
|
RunRecipe,
|
|
|
RunRecipeWait,
|
|
|
WaferHolderUnclampOn,
|
|
|
+ LoopEnd,
|
|
|
End
|
|
|
}
|
|
|
|
|
@@ -43,6 +45,14 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
|
|
|
private DepRecipe _recipe;
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ private int _cycle;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private int _currentCycle;
|
|
|
+
|
|
|
|
|
|
|
|
|
private string _side;
|
|
@@ -97,15 +107,34 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
|
|
|
public RState Monitor()
|
|
|
{
|
|
|
- Runner.Run(RecipeStep.WaferHolderClampOn, () => _device.WaferHolderClampOn("", null), () => _device.MetalDeviceData.WaferHolderClamp, _delay_1s)
|
|
|
- .Run(RecipeStep.RunRecipe, () => _runRecipeRoutine.Start(new object[] { _recipe, _side }) == RState.Running, _delay_1ms)
|
|
|
- .WaitWithStopCondition(RecipeStep.RunRecipeWait, () => CommonFunction.CheckRoutineEndState(_runRecipeRoutine), CheckRunRecipeStopStatus, ALL_DAY_MILLOSECONDS)
|
|
|
- .Run(RecipeStep.WaferHolderUnclampOn, () => _device.WaferHolderClampOff("", null), () => !_device.MetalDeviceData.WaferHolderClamp, _delay_1s)
|
|
|
+ Runner.LoopStart(RecipeStep.LoopStart, "Loop Start Cycle StandardHotRunRecipeRoutine", _cycle, NullFun, _delay_1ms)
|
|
|
+ .LoopRun(RecipeStep.WaferHolderClampOn, () => _device.WaferHolderClampOn("", null), () => _device.MetalDeviceData.WaferHolderClamp, _delay_1s)
|
|
|
+ .LoopRun(RecipeStep.RunRecipe, () => _runRecipeRoutine.Start(new object[] { _recipe, _side }) == RState.Running, _delay_1ms)
|
|
|
+ .LoopRunWithStopStatus(RecipeStep.RunRecipeWait, () => CommonFunction.CheckRoutineEndState(_runRecipeRoutine), CheckRunRecipeStopStatus, ALL_DAY_MILLOSECONDS)
|
|
|
+ .LoopRun(RecipeStep.WaferHolderUnclampOn, () => _device.WaferHolderClampOff("", null), () => !_device.MetalDeviceData.WaferHolderClamp, _delay_1s)
|
|
|
+ .LoopEnd(RecipeStep.LoopEnd, UpdateCycleCount, _delay_1ms)
|
|
|
.End(RecipeStep.End, NullFun, _delay_1ms);
|
|
|
|
|
|
return Runner.Status;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private bool UpdateCycleCount()
|
|
|
+ {
|
|
|
+ _currentCycle += 1;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public int GetCurrentCycle()
|
|
|
+ {
|
|
|
+ return _currentCycle;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
@@ -117,11 +146,17 @@ namespace CyberX8_RT.Modules.Metal
|
|
|
{
|
|
|
_side = objs[1].ToString();
|
|
|
}
|
|
|
+ if (objs.Length > 2)
|
|
|
+ {
|
|
|
+ _cycle = (int)objs[2];
|
|
|
+ }
|
|
|
_device = DEVICE.GetDevice<StandardHotMetalDevice>(Module);
|
|
|
if (!CheckPreCondition())
|
|
|
{
|
|
|
return RState.Failed;
|
|
|
}
|
|
|
+ _currentCycle = 0;
|
|
|
+ _runRecipeRoutine.clearLotTrack();
|
|
|
return Runner.Start(Module, "Start run recipe");
|
|
|
}
|
|
|
|