|
@@ -2517,7 +2517,10 @@ namespace Venus_RT.Modules
|
|
|
if (outLLWaferStatus.outSlot.Count > 0 && outLLModule.ReayForEfemInTime(10))
|
|
|
{
|
|
|
if (ExchangeWaferWithLL(outLL))
|
|
|
+ {
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, outLL, $"{outLL} will be ready in {outLLModule.TimeToReady}");
|
|
|
return;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (needAlign)
|
|
@@ -2526,7 +2529,10 @@ namespace Venus_RT.Modules
|
|
|
(inLLModule.ReayForEfemInTime(20) && Math.Min(validHands, inLLWaferStatus.emptySlot.Count) > atmWaferCount))
|
|
|
{
|
|
|
if (ForwardATMWafers(inLL))
|
|
|
+ {
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, inLL, $"{inLL} will be ready in {inLLModule.TimeToReady}");
|
|
|
return;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -2534,7 +2540,10 @@ namespace Venus_RT.Modules
|
|
|
if (inLLModule.ReayForEfemInTime(20) && inLLWaferStatus.emptySlot.Count > efemRobotWafers.Count && ((outLLModule.TimeToReady - inLLModule.TimeToReady > 10) || !outLLModule.ReayForEfemInTime(30) || outLLWaferStatus.emptySlot.Count < efemRobotWafers.Count))
|
|
|
{
|
|
|
if (ForwardATMWafers(inLL))
|
|
|
+ {
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, inLL, $"{inLL} will be ready in {inLLModule.TimeToReady}");
|
|
|
return;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2542,7 +2551,10 @@ namespace Venus_RT.Modules
|
|
|
(Math.Min(validHands, inLLWaferStatus.emptySlot.Count) == atmWaferCount || _qeWaitInWafers.Count == 0))
|
|
|
{
|
|
|
if (ExchangeWaferWithLL(inLL))
|
|
|
+ {
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, inLL, $"{inLL} will be ready in {inLLModule.TimeToReady}");
|
|
|
return;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -3193,10 +3205,9 @@ namespace Venus_RT.Modules
|
|
|
|
|
|
if(robotWafers.Count == 0)
|
|
|
{
|
|
|
- // keep out loadlock readyForTM State after put one wafer and wait for another out wafer
|
|
|
- var readyOutPMs = _dictModuleTask.Where(mod => ModuleHelper.IsPm(mod.Key) && mod.Value.HasWafer && mod.Value.TimeToReady < 20).OrderBy(mod => mod.Value.TimeToReady).ToList();
|
|
|
- if (readyOutPMs.Count > 0 && outLLModule.ReayForTMInTime(30) && outLLWaferStatus.emptySlot.Count > 0)
|
|
|
+ if(_dictModuleTask.Count(mod => ModuleHelper.IsPm(mod.Key) && mod.Value.HasWafer && mod.Value.TimeToReady < 5) > 0 && outLLModule.ReayForTMInTime(30) && outLLWaferStatus.emptySlot.Count > 0)
|
|
|
{
|
|
|
+ var readyOutPMs = _dictModuleTask.Where(mod => ModuleHelper.IsPm(mod.Key) && mod.Value.HasWafer && mod.Value.TimeToReady < 25).OrderBy(mod => mod.Value.TimeToReady).ToList();
|
|
|
var placeActions = new List<MoveItem>();
|
|
|
int pickCount = 0;
|
|
|
foreach (var pm in readyOutPMs)
|
|
@@ -3207,11 +3218,13 @@ namespace Venus_RT.Modules
|
|
|
_tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(pm.Key, 0, ModuleName.TMRobot, (int)freeHands[pickCount], freeHands[pickCount]) });
|
|
|
placeActions.Add(new MoveItem(ModuleName.TMRobot, (int)freeHands[pickCount], outLL, outLLWaferStatus.emptySlot[pickCount], freeHands[pickCount]));
|
|
|
pickCount++;
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, pm.Key, $"{pm.Key} will be ready in {pm.Value.TimeToReady} seconds");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (pickCount > 0)
|
|
|
{
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, outLL, $"{outLL} will be ready in {outLLModule.TimeToReady} seconds");
|
|
|
_tmSchdActions.Enqueue(placeActions);
|
|
|
return;
|
|
|
}
|
|
@@ -3232,6 +3245,7 @@ namespace Venus_RT.Modules
|
|
|
|
|
|
if(pickActions.Count > 0)
|
|
|
{
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, inLL, $"{inLL} will be ready in {inLLModule.TimeToReady} seconds");
|
|
|
_tmSchdActions.Enqueue(pickActions);
|
|
|
return;
|
|
|
}
|
|
@@ -3248,7 +3262,7 @@ namespace Venus_RT.Modules
|
|
|
if (_dictModuleTask[robotWafer.destMod].HasWafer)
|
|
|
{
|
|
|
// PM Swap
|
|
|
- if(freeHands.Count > 0)
|
|
|
+ if (freeHands.Count > 0)
|
|
|
{
|
|
|
var pmActions = new List<MoveItem>
|
|
|
{
|
|
@@ -3256,11 +3270,13 @@ namespace Venus_RT.Modules
|
|
|
new MoveItem(ModuleName.TMRobot, robotWafer.currentSlot, robotWafer.destMod, 0, (Hand)robotWafer.currentSlot)
|
|
|
};
|
|
|
_tmSchdActions.Enqueue(pmActions);
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, robotWafer.destMod, $"{robotWafer.destMod} will be ready in {_dictModuleTask[robotWafer.destMod].TimeToReady} seconds");
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, robotWafer.destMod, $"{robotWafer.destMod} will be ready in {_dictModuleTask[robotWafer.destMod].TimeToReady} seconds");
|
|
|
_tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(ModuleName.TMRobot, robotWafer.currentSlot, robotWafer.destMod, 0, (Hand)robotWafer.currentSlot) });
|
|
|
return;
|
|
|
}
|
|
@@ -3273,6 +3289,8 @@ namespace Venus_RT.Modules
|
|
|
var readyOutWafer = _lstWaferTasks.Find(wt => ModuleHelper.IsPm(wt.currentMod) && ModuleHelper.IsLoadPort(wt.destMod));
|
|
|
if (readyOutWafer != null && _dictModuleTask[readyOutWafer.currentMod].TimeToReady < 5)
|
|
|
{
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, readyOutWafer.currentMod, $"{readyOutWafer.currentMod} will be ready in {_dictModuleTask[readyOutWafer.currentMod].TimeToReady} seconds");
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, outLL, $"{outLL} will be ready in {outLLModule.TimeToReady} seconds");
|
|
|
_tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(readyOutWafer.currentMod, 0, ModuleName.TMRobot, (int)freeHands[0], freeHands[0]) });
|
|
|
_tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(ModuleName.TMRobot, (int)freeHands[0], outLL, outLLWaferStatus.emptySlot[0], freeHands[0]) });
|
|
|
return;
|
|
@@ -3286,6 +3304,8 @@ namespace Venus_RT.Modules
|
|
|
{
|
|
|
if (!_dictModuleTask[inWafer.destMod].HasWafer && _dictModuleTask[inWafer.destMod].TimeToReady < 10)
|
|
|
{
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, inWafer.destMod, $"{inWafer.destMod} will be ready in {_dictModuleTask[inWafer.destMod].TimeToReady} seconds");
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, inLL, $"{inLL} will be ready in {inLLModule.TimeToReady} seconds");
|
|
|
_tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(inLL, inWafer.currentSlot, ModuleName.TMRobot, (int)freeHands[0], freeHands[0]) });
|
|
|
_tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(ModuleName.TMRobot, (int)freeHands[0], inWafer.destMod, 0, freeHands[0]) });
|
|
|
return;
|
|
@@ -3320,12 +3340,15 @@ namespace Venus_RT.Modules
|
|
|
new MoveItem(ModuleName.TMRobot, 0, outLL, 0, Hand.Blade1),
|
|
|
new MoveItem(ModuleName.TMRobot, 1, outLL, 1, Hand.Blade2)
|
|
|
};
|
|
|
+
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, outLL, $"{outLL} will be ready in {outLLModule.TimeToReady} seconds");
|
|
|
_tmSchdActions.Enqueue(doublePlace);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if(outLLWaferStatus.emptySlot.Count > 0)
|
|
|
{
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, outLL, $"{outLL} will be ready in {outLLModule.TimeToReady} seconds");
|
|
|
_tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(ModuleName.TMRobot, robotWafer.currentSlot, outLL, outLLWaferStatus.emptySlot[0], (Hand)robotWafer.currentSlot) });
|
|
|
return;
|
|
|
}
|
|
@@ -3342,6 +3365,8 @@ namespace Venus_RT.Modules
|
|
|
var inWafer = _lstWaferTasks.Find(wt => wt.currentMod == inLL && wt.currentSlot == inLLWaferStatus.inSlot.First());
|
|
|
if(inWafer != null && !_dictModuleTask[inWafer.destMod].HasWafer && _dictModuleTask[inWafer.destMod].TimeToReady < 20)
|
|
|
{
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, inWafer.destMod, $"{inWafer.destMod} will be ready in {_dictModuleTask[inWafer.destMod].TimeToReady} seconds");
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, inLL, $"{inLL} will be ready in {inLLModule.TimeToReady} seconds");
|
|
|
_tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(inLL, inLLWaferStatus.inSlot.First(), ModuleName.TMRobot, (int)freeHands[0], freeHands[0])});
|
|
|
_tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(ModuleName.TMRobot, (int)freeHands[0], inWafer.destMod, 0, freeHands[0]) });
|
|
|
return;
|
|
@@ -3355,6 +3380,8 @@ namespace Venus_RT.Modules
|
|
|
var readyReturnPMs = _dictModuleTask.Where(mod => ModuleHelper.IsPm(mod.Key) && mod.Value.HasWafer && mod.Value.TimeToReady < 5).OrderBy(mod => mod.Value.TimeToReady).ToList();
|
|
|
if(readyReturnPMs.Count > 0)
|
|
|
{
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, readyReturnPMs.First().Key, $"{readyReturnPMs.First().Key} will be ready in {readyReturnPMs.First().Value.TimeToReady} seconds");
|
|
|
+ LOG.Write(eEvent.INFO_TROUGHPUT_ENHANCE_TRACE, outLL, $"{outLL} will be ready in {outLLModule.TimeToReady} seconds");
|
|
|
_tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(readyReturnPMs.First().Key, 0, ModuleName.TMRobot, (int)freeHands[0], freeHands[0]) });
|
|
|
_tmSchdActions.Enqueue(new List<MoveItem> { new MoveItem(ModuleName.TMRobot, (int)freeHands[0], outLL, outLLWaferStatus.emptySlot.First(), freeHands[0]) });
|
|
|
return;
|