|
@@ -203,6 +203,11 @@ namespace Venus_RT.Modules
|
|
|
StartAlign,
|
|
|
Aligning,
|
|
|
|
|
|
+ // PreHeating
|
|
|
+ WaitPreHeating,
|
|
|
+ StartPreHeating,
|
|
|
+ PreHeating,
|
|
|
+
|
|
|
// Loadlock Status
|
|
|
ExchangeWaferWithEFEM,
|
|
|
ExchangeWaferWithTM,
|
|
@@ -301,7 +306,33 @@ namespace Venus_RT.Modules
|
|
|
|
|
|
public override int TimeToReady
|
|
|
{
|
|
|
- get { return Scheduler.IsAvailable ? 0 : (Scheduler.TimeToReady + 500) / 1000; }
|
|
|
+ get
|
|
|
+ {
|
|
|
+ switch(Status)
|
|
|
+ {
|
|
|
+ case ModuleStatus.Idle:
|
|
|
+ case ModuleStatus.Processing:
|
|
|
+ case ModuleStatus.IdleClean:
|
|
|
+ case ModuleStatus.PreJobClean:
|
|
|
+ {
|
|
|
+ return Scheduler.IsAvailable ? 0 : (Scheduler.TimeToReady + 500) / 1000;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case ModuleStatus.PostJobClean:
|
|
|
+ case ModuleStatus.WTWClean:
|
|
|
+ {
|
|
|
+ if(_pendingCleanTask.Count == 0)
|
|
|
+ {
|
|
|
+ return Scheduler.IsAvailable ? 0 : (Scheduler.TimeToReady + 500) / 1000;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case ModuleStatus.PreHeating:
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ return int.MaxValue;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private WaferTask _wafer;
|
|
@@ -1412,7 +1443,7 @@ namespace Venus_RT.Modules
|
|
|
foreach (var pm in PMs)
|
|
|
{
|
|
|
var pmTask = _dictModuleTask[pm] as PMTask;
|
|
|
- if(pmTask != null)
|
|
|
+ if(pmTask != null && pmTask.Scheduler.IsOnline)
|
|
|
{
|
|
|
pmTask.InvokePreJobClean(cj.PreJobClean);
|
|
|
}
|
|
@@ -1445,7 +1476,7 @@ namespace Venus_RT.Modules
|
|
|
foreach (var pm in PMs)
|
|
|
{
|
|
|
var pmTask = _dictModuleTask[pm] as PMTask;
|
|
|
- if (pmTask != null)
|
|
|
+ if (pmTask != null && pmTask.Scheduler.IsOnline)
|
|
|
{
|
|
|
pmTask.InvokePostJobClean(cj.PostJobClean);
|
|
|
}
|
|
@@ -1711,7 +1742,7 @@ namespace Venus_RT.Modules
|
|
|
foreach(var pm in pms)
|
|
|
{
|
|
|
var pmTask = _dictModuleTask[pm] as PMTask;
|
|
|
- if (!pmTask.IsPreJobCleanDone())
|
|
|
+ if (pmTask.Scheduler.IsOnline && !pmTask.IsPreJobCleanDone())
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -1724,7 +1755,7 @@ namespace Venus_RT.Modules
|
|
|
foreach (var pm in pms)
|
|
|
{
|
|
|
var pmTask = _dictModuleTask[pm] as PMTask;
|
|
|
- if (!pmTask.IsPostJobCleanDone())
|
|
|
+ if (pmTask.Scheduler.IsOnline && !pmTask.IsPostJobCleanDone())
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -2567,7 +2598,7 @@ namespace Venus_RT.Modules
|
|
|
{
|
|
|
if (ModuleHelper.IsPm(wafer.destMod))
|
|
|
{
|
|
|
- if (_dictModuleTask[wafer.destMod].TimeToReady == 0 &&
|
|
|
+ if (_dictModuleTask[wafer.destMod].TimeToReady <= 5 &&
|
|
|
!_lstWaferTasks.Exists(waferT => waferT.currentMod == wafer.destMod) &&
|
|
|
!_lstWaferTasks.Exists(waferT => waferT.routedMod == wafer.destMod))
|
|
|
{
|
|
@@ -2639,7 +2670,7 @@ namespace Venus_RT.Modules
|
|
|
// try to return one wafer
|
|
|
if (!IsLLReservedByEFEM(outLL) && outLLWaferStatus.emptySlot.Count > 0)
|
|
|
{
|
|
|
- var reayReturnWafer = _lstWaferTasks.Find(wt => ModuleHelper.IsPm(wt.currentMod) && ModuleHelper.IsLoadPort(wt.destMod) && _dictModuleTask[wt.currentMod].TimeToReady < 2);
|
|
|
+ var reayReturnWafer = _lstWaferTasks.Find(wt => ModuleHelper.IsPm(wt.currentMod) && ModuleHelper.IsLoadPort(wt.destMod) && _dictModuleTask[wt.currentMod].TimeToReady <= 2);
|
|
|
if (reayReturnWafer != null)
|
|
|
{
|
|
|
reayReturnWafer.RouteTo(outLL, outLLWaferStatus.emptySlot[0]);
|
|
@@ -2652,8 +2683,8 @@ namespace Venus_RT.Modules
|
|
|
}
|
|
|
else // no wafer on robot arm
|
|
|
{
|
|
|
- var readyInPms = _dictModuleTask.Where(mod => ModuleHelper.IsPm(mod.Key) && !_lstWaferTasks.Exists(wt => wt.currentMod == mod.Key) && mod.Value.Scheduler.IsOnline && mod.Value.TimeToReady < 15);
|
|
|
- var readyOutWafers = _lstWaferTasks.Where(wt => ModuleHelper.IsPm(wt.currentMod) && ModuleHelper.IsLoadPort(wt.destMod) && _dictModuleTask[wt.currentMod].TimeToReady < 2).ToList() ;
|
|
|
+ var readyInPms = _dictModuleTask.Where(mod => ModuleHelper.IsPm(mod.Key) && !_lstWaferTasks.Exists(wt => wt.currentMod == mod.Key) && mod.Value.Scheduler.IsOnline && mod.Value.TimeToReady <= 15);
|
|
|
+ var readyOutWafers = _lstWaferTasks.Where(wt => ModuleHelper.IsPm(wt.currentMod) && ModuleHelper.IsLoadPort(wt.destMod) && _dictModuleTask[wt.currentMod].TimeToReady <= 2).ToList() ;
|
|
|
|
|
|
if(_tmRobotSingleArmOption != 0)
|
|
|
{
|