Browse Source

fix the Loadlock path bug while fixed slot mode.

sangwq 1 year ago
parent
commit
e8ae7ee302
1 changed files with 8 additions and 8 deletions
  1. 8 8
      Venus/Venus_RT/Modules/SystemDispatcher.cs

+ 8 - 8
Venus/Venus_RT/Modules/SystemDispatcher.cs

@@ -3399,14 +3399,14 @@ namespace Venus_RT.Modules
 
 
                     // 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 readyReturnWafers = _lstWaferTasks.Where(wt => ModuleHelper.IsPm(wt.currentMod) && ModuleHelper.IsLoadPort(wt.destMod) && _dictModuleTask[wt.currentMod].TimeToReady <= 2);
+                    foreach(var pmWafer in readyReturnWafers)
                     {
-                        var readyLL = lls.Where(ll => GetLLFixedReadyInOutSlots(ll.Key).tInSlot.Count > 0 && ll.Value.TimeToReady <= 2).OrderBy(ll => ll.Value.Scheduler.IsVac ? 0 : 1);
+                        var readyLL = lls.Where(ll => CanWaferGotoLL(pmWafer, ll.Key) && 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(pmWafer.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;
                         }
@@ -3618,14 +3618,14 @@ namespace Venus_RT.Modules
                         }
 
                         // 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 readyReturnWafers = _lstWaferTasks.Where(wt => ModuleHelper.IsPm(wt.currentMod) && ModuleHelper.IsLoadPort(wt.destMod) && _dictModuleTask[wt.currentMod].TimeToReady <= 2);
+                        foreach (var pmWafer in readyReturnWafers)
                         {
-                            var readyLL = lls.Where(ll => GetLLFixedReadyInOutSlots(ll.Key).tInSlot.Count > 0 && ll.Value.TimeToReady <= 2).OrderBy(ll => ll.Value.Scheduler.IsVac ? 0 : 1);
+                            var readyLL = lls.Where(ll => CanWaferGotoLL(pmWafer, ll.Key) && 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(pmWafer.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;
                             }