|
@@ -3396,6 +3396,40 @@ namespace Venus_RT.Modules
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ // try to return a wafer
|
|
|
+ var readyReturnWafer = _lstWaferTasks.Find(wt => ModuleHelper.IsPm(wt.currentMod) && ModuleHelper.IsLoadPort(wt.destMod) && _dictModuleTask[wt.currentMod].TimeToReady <= 2);
|
|
|
+ if(readyReturnWafer != null)
|
|
|
+ {
|
|
|
+ var readyLL = lls.Where(ll => GetLLFixedReadyInOutSlots(ll.Key).tInSlot.Count > 0 && ll.Value.TimeToReady <= 2).OrderBy(ll => ll.Value.Scheduler.IsVac ? 0 : 1);
|
|
|
+ if(readyLL.Count() > 0)
|
|
|
+ {
|
|
|
+ var validHand = (Hand)(1 - robotWafers.First().currentSlot);
|
|
|
+ _tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(readyReturnWafer.currentMod, 0, ModuleName.TMRobot, (int)validHand, validHand) });
|
|
|
+ _tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(ModuleName.TMRobot, (int)validHand , readyLL.First().Key, GetLLFixedReadyInOutSlots(readyLL.First().Key).tInSlot.First(), validHand) });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // try to push in a wafer
|
|
|
+ var readyInLL = lls.Where(ll => GetLLFixedReadyInOutSlots(ll.Key).tOutSlot.Count > 0 && ll.Value.TimeToReady <= 2).OrderBy(ll => ll.Value.Scheduler.IsVac ? 0 : 1);
|
|
|
+ foreach(var ll in readyInLL)
|
|
|
+ {
|
|
|
+ var waferStatus = GetLLFixedReadyInOutSlots(ll.Key);
|
|
|
+ var wafer = _lstWaferTasks.Find(wt => wt.currentMod == ll.Key && wt.currentSlot == waferStatus.tOutSlot.First());
|
|
|
+ if( wafer != null &&
|
|
|
+ ModuleHelper.IsPm(wafer.destMod) &&
|
|
|
+ !_lstWaferTasks.Exists(wt => wt.currentMod == wafer.destMod) &&
|
|
|
+ _dictModuleTask[wafer.destMod].TimeToReady <= 2)
|
|
|
+ {
|
|
|
+ var validHand = (Hand)(1 - robotWafers.First().currentSlot);
|
|
|
+ _tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(wafer.currentMod, wafer.currentSlot, ModuleName.TMRobot, (int)validHand, validHand) });
|
|
|
+ _tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(ModuleName.TMRobot, (int)validHand, wafer.destMod, 0, validHand) });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
else if (robotWafers.Count() == 0)
|
|
|
{
|
|
@@ -3582,6 +3616,39 @@ namespace Venus_RT.Modules
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // try to return a wafer
|
|
|
+ var readyReturnWafer = _lstWaferTasks.Find(wt => ModuleHelper.IsPm(wt.currentMod) && ModuleHelper.IsLoadPort(wt.destMod) && _dictModuleTask[wt.currentMod].TimeToReady <= 2);
|
|
|
+ if (readyReturnWafer != null)
|
|
|
+ {
|
|
|
+ var readyLL = lls.Where(ll => GetLLFixedReadyInOutSlots(ll.Key).tInSlot.Count > 0 && ll.Value.TimeToReady <= 2).OrderBy(ll => ll.Value.Scheduler.IsVac ? 0 : 1);
|
|
|
+ if (readyLL.Count() > 0)
|
|
|
+ {
|
|
|
+ var validHand = (Hand)(1 - robotWafers.First().currentSlot);
|
|
|
+ _tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(readyReturnWafer.currentMod, 0, ModuleName.TMRobot, (int)validHand, validHand) });
|
|
|
+ _tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(ModuleName.TMRobot, (int)validHand, readyLL.First().Key, GetLLFixedReadyInOutSlots(readyLL.First().Key).tInSlot.First(), validHand) });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // try to push in a wafer
|
|
|
+ var readyInLL = lls.Where(ll => GetLLFixedReadyInOutSlots(ll.Key).tOutSlot.Count > 0 && ll.Value.TimeToReady <= 2).OrderBy(ll => ll.Value.Scheduler.IsVac ? 0 : 1);
|
|
|
+ foreach (var ll in readyInLL)
|
|
|
+ {
|
|
|
+ var waferStatus = GetLLFixedReadyInOutSlots(ll.Key);
|
|
|
+ var wafer = _lstWaferTasks.Find(wt => wt.currentMod == ll.Key && wt.currentSlot == waferStatus.tOutSlot.First());
|
|
|
+ if (wafer != null &&
|
|
|
+ ModuleHelper.IsPm(wafer.destMod) &&
|
|
|
+ !_lstWaferTasks.Exists(wt => wt.currentMod == wafer.destMod) &&
|
|
|
+ _dictModuleTask[wafer.destMod].TimeToReady <= 2)
|
|
|
+ {
|
|
|
+ var validHand = (Hand)(1 - robotWafers.First().currentSlot);
|
|
|
+ _tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(wafer.currentMod, wafer.currentSlot, ModuleName.TMRobot, (int)validHand, validHand) });
|
|
|
+ _tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(ModuleName.TMRobot, (int)validHand, wafer.destMod, 0, validHand) });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
else // robot empty
|