|
@@ -894,6 +894,7 @@ namespace Venus_RT.Modules
|
|
|
private Dictionary<ModuleName, ModuleTask> _dictModuleTask = new Dictionary<ModuleName, ModuleTask>();
|
|
|
private Queue<WaferInfo> _qeReturnWafers = new Queue<WaferInfo>();
|
|
|
private Queue<Guid> _qeWaitInWafers = new Queue<Guid>();
|
|
|
+ private Queue<ModuleName> _qeWaitCoolingLLs = new Queue<ModuleName>();
|
|
|
|
|
|
private Queue<List<MoveItem>> _efemSchdActions = new Queue<List<MoveItem>>();
|
|
|
private Queue<List<MoveItem>> _tmSchdActions = new Queue<List<MoveItem>>();
|
|
@@ -1561,6 +1562,7 @@ namespace Venus_RT.Modules
|
|
|
LP2InUseRecipes.Clear();
|
|
|
LP3InUseRecipes.Clear();
|
|
|
_qePollingJobs.Clear();
|
|
|
+ _qeWaitCoolingLLs.Clear();
|
|
|
_cycleState = RState.End;
|
|
|
}
|
|
|
|
|
@@ -1666,14 +1668,20 @@ namespace Venus_RT.Modules
|
|
|
if (!wafer.IsEmpty)
|
|
|
systemWaferCount++;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
+
|
|
|
if (systemWaferCount == 0)
|
|
|
return RState.End;
|
|
|
|
|
|
+ if(_qeWaitCoolingLLs.Count > 0 && _dictModuleTask[_qeWaitCoolingLLs.First()].IsIdle)
|
|
|
+ {
|
|
|
+ if ((_dictModuleTask[_qeWaitCoolingLLs.First()] as LoadlockTask).Cooling())
|
|
|
+ {
|
|
|
+ _qeWaitCoolingLLs.Dequeue();
|
|
|
+ return RState.Running;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
ReturnVacWafers();
|
|
|
ReturnAtmWafers();
|
|
|
|
|
@@ -4778,7 +4786,7 @@ namespace Venus_RT.Modules
|
|
|
return;
|
|
|
|
|
|
var hands = GetTMFreeHand();
|
|
|
- var lls = _dictModuleTask.Where(mod => ModuleHelper.IsLoadLock(mod.Key) && !IsLLReservedByEFEM(mod.Key) && mod.Value.Scheduler.IsIdle && mod.Value.Scheduler.IsInclude && GetLLWaferExistance(mod.Key).emptySlots.Count > 0).OrderByDescending(mod => GetLLReadyInOutSlots(mod.Key).emptySlot.Count);
|
|
|
+ var lls = _dictModuleTask.Where(mod => ModuleHelper.IsLoadLock(mod.Key) && !IsLLReservedByEFEM(mod.Key) && !_qeWaitCoolingLLs.Contains(mod.Key) && mod.Value.Scheduler.IsIdle && mod.Value.Scheduler.IsInclude && GetLLWaferExistance(mod.Key).emptySlots.Count > 0).OrderByDescending(mod => GetLLReadyInOutSlots(mod.Key).emptySlot.Count);
|
|
|
if (lls.Count() > 0)
|
|
|
{
|
|
|
|
|
@@ -4862,7 +4870,8 @@ namespace Venus_RT.Modules
|
|
|
}
|
|
|
|
|
|
|
|
|
- var lls = _dictModuleTask.Where(mod => ModuleHelper.IsLoadLock(mod.Key) && !IsLLReservedByTM(mod.Key) && mod.Value.Scheduler.IsIdle && GetLLWaferExistance(mod.Key).wafers.Count > 0).OrderByDescending(mod => GetLLWaferExistance(mod.Key).wafers.Count);
|
|
|
+ var lls = _dictModuleTask.Where(mod => ModuleHelper.IsLoadLock(mod.Key) && !IsLLReservedByTM(mod.Key) && !_qeWaitCoolingLLs.Contains(mod.Key) && mod.Value.Scheduler.IsIdle && GetLLWaferExistance(mod.Key).wafers.Count > 0).OrderByDescending(mod => GetLLWaferExistance(mod.Key).wafers.Count);
|
|
|
+
|
|
|
if (lls.Count() > 0)
|
|
|
{
|
|
|
int returnCount = 0;
|
|
@@ -4931,9 +4940,15 @@ namespace Venus_RT.Modules
|
|
|
|
|
|
var nextModule = nextActions.First().Module;
|
|
|
|
|
|
- if (ModuleHelper.IsLoadLock(nextModule) && !_dictModuleTask[nextModule].IsIdle && _dictModuleTask[nextModule].Status != ModuleStatus.StartCooling)
|
|
|
+ if (ModuleHelper.IsLoadLock(nextModule) && !_dictModuleTask[nextModule].IsIdle)
|
|
|
return;
|
|
|
|
|
|
+ var llActions = _curTmAction.Find(ac => ModuleHelper.IsLoadLock(ac.DestinationModule));
|
|
|
+ if(llActions != null && !_qeWaitCoolingLLs.Contains(llActions.DestinationModule) && !RouteManager.IsATMMode)
|
|
|
+ {
|
|
|
+ _qeWaitCoolingLLs.Enqueue(llActions.DestinationModule);
|
|
|
+ }
|
|
|
+
|
|
|
_curTmAction = _tmSchdActions.Dequeue();
|
|
|
|
|
|
tmRobot.SendMoveItems(_curTmAction.ToArray());
|
|
@@ -4941,6 +4956,12 @@ namespace Venus_RT.Modules
|
|
|
}
|
|
|
else if (_curTmAction.Count >= 0 && isReturnActionsDone(_curTmAction))
|
|
|
{
|
|
|
+ var llActions = _curTmAction.Find(ac => ModuleHelper.IsLoadLock(ac.DestinationModule));
|
|
|
+ if (llActions != null && !_qeWaitCoolingLLs.Contains(llActions.DestinationModule) && !RouteManager.IsATMMode)
|
|
|
+ {
|
|
|
+ _qeWaitCoolingLLs.Enqueue(llActions.DestinationModule);
|
|
|
+ }
|
|
|
+
|
|
|
_curTmAction.Clear();
|
|
|
}
|
|
|
}
|