Bladeren bron

keep on enhance throughput.

sangwq 9 maanden geleden
bovenliggende
commit
a17bb0b227
1 gewijzigde bestanden met toevoegingen van 31 en 4 verwijderingen
  1. 31 4
      Venus/Venus_RT/Modules/SystemDispatcher.cs

+ 31 - 4
Venus/Venus_RT/Modules/SystemDispatcher.cs

@@ -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;