|
@@ -37,6 +37,7 @@ namespace Venus_RT.Modules.EFEM
|
|
|
|
|
|
Queue<MoveItem> _actionList = new Queue<MoveItem>();
|
|
|
MoveItem _currentAction;
|
|
|
+ private int _actionCount = 0;
|
|
|
|
|
|
public EfemSwapRoutine(EfemBase efem) : base(ModuleName.EfemRobot)
|
|
|
{
|
|
@@ -52,7 +53,11 @@ namespace Venus_RT.Modules.EFEM
|
|
|
return RState.Failed;
|
|
|
}
|
|
|
|
|
|
- _actionList = (Queue<MoveItem>)objs[0];
|
|
|
+ foreach (var item in (Queue<MoveItem>)objs[0])
|
|
|
+ {
|
|
|
+ _actionList.Enqueue(new MoveItem(item.SourceModule, item.SourceSlot, item.DestinationModule, item.DestinationSlot, item.RobotHand));
|
|
|
+ }
|
|
|
+
|
|
|
var firtItem = _actionList.Peek();
|
|
|
if (ModuleHelper.IsLoadLock(firtItem.SourceModule))
|
|
|
_targetModule = firtItem.SourceModule;
|
|
@@ -80,7 +85,7 @@ namespace Venus_RT.Modules.EFEM
|
|
|
|
|
|
|
|
|
_moveTimeout = SC.GetValue<int>($"EFEM.MotionTimeout") * 1000;
|
|
|
-
|
|
|
+ _actionCount = _actionList.Count;
|
|
|
return Runner.Start(Module, $"EFEM Swap with {_targetModule}");
|
|
|
}
|
|
|
|
|
@@ -89,7 +94,7 @@ namespace Venus_RT.Modules.EFEM
|
|
|
Runner.Wait((int)SwapStep.WaitModuleReady, () => _llModule.IsIdle, _delay_60s)
|
|
|
.Run((int)SwapStep.ModulePrepare, ModulePrepare, IsModulePrepareReady)
|
|
|
.Run((int)SwapStep.OpenSlitDoor, OpenSlitDoor, IsSlitDoorOpen)
|
|
|
- .LoopStart((int)SwapStep.MoveWafer, loopName(), _actionList.Count, MoveWafer)
|
|
|
+ .LoopStart((int)SwapStep.MoveWafer, loopName(), _actionCount, MoveWafer)
|
|
|
.LoopEnd((int)SwapStep.WaitMaferMoved, NullFun, WaitWaferMoved, _moveTimeout)
|
|
|
.Run((int)SwapStep.CloseSlitDoor, CloseSlitDoor, IsSlitDoorClosed)
|
|
|
.End((int)SwapStep.NotifyDone, NotifyLLDone, _delay_50ms);
|
|
@@ -152,6 +157,11 @@ namespace Venus_RT.Modules.EFEM
|
|
|
|
|
|
private bool MoveWafer()
|
|
|
{
|
|
|
+ if(_actionList.Count <= 0)
|
|
|
+ {
|
|
|
+ Runner.Stop("no action");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
_currentAction = _actionList.Dequeue();
|
|
|
|
|
|
if (!VerifyWaferExistence(_currentAction))
|