|
@@ -373,6 +373,11 @@ namespace Venus_RT.Modules
|
|
return _runingWaferTask.Key == wafer.waferId && _runingWaferTask.Value.Count > 0 && _runingWaferTask.Value.First().Key == RecipeJobType.Process;
|
|
return _runingWaferTask.Key == wafer.waferId && _runingWaferTask.Value.Count > 0 && _runingWaferTask.Value.First().Key == RecipeJobType.Process;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public bool IsAllJobCompleted()
|
|
|
|
+ {
|
|
|
|
+ return Status == ModuleStatus.Idle && (_runingWaferTask.Key == Guid.Empty || _runingWaferTask.Value.Count == 0) && _pendingWaferTasks.Count == 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
public override void ResetTask()
|
|
public override void ResetTask()
|
|
{
|
|
{
|
|
base.ResetTask();
|
|
base.ResetTask();
|
|
@@ -1646,27 +1651,42 @@ namespace Venus_RT.Modules
|
|
|
|
|
|
if (IsAllProcessJobComplete(runingjob))
|
|
if (IsAllProcessJobComplete(runingjob))
|
|
{
|
|
{
|
|
- // subscribe clean task
|
|
|
|
var PMs = GetWaitPreCleanPMsByCtrlJob(runingjob);
|
|
var PMs = GetWaitPreCleanPMsByCtrlJob(runingjob);
|
|
- foreach (var pm in PMs)
|
|
|
|
|
|
+ if (runingjob.JetState == EnumJetCtrlJobState.Processing)
|
|
{
|
|
{
|
|
- var pmTask = _dictModuleTask[pm] as VenusPMTask;
|
|
|
|
- if (pmTask != null && pmTask.Scheduler.IsOnline)
|
|
|
|
|
|
+ // subscribe clean task
|
|
|
|
+ foreach (var pm in PMs)
|
|
{
|
|
{
|
|
- pmTask.SubscribeLotCleanTask(runingjob, VenusPMTask.RecipeJobType.PostClean);
|
|
|
|
|
|
+ var pmTask = _dictModuleTask[pm] as VenusPMTask;
|
|
|
|
+ if (pmTask != null && pmTask.Scheduler.IsOnline)
|
|
|
|
+ {
|
|
|
|
+ pmTask.SubscribeLotCleanTask(runingjob, VenusPMTask.RecipeJobType.PostClean);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ runingjob.JetState = EnumJetCtrlJobState.PostJobClean;
|
|
}
|
|
}
|
|
|
|
+ else if (runingjob.JetState == EnumJetCtrlJobState.PostJobClean)
|
|
|
|
+ {
|
|
|
|
+ foreach (var pm in PMs)
|
|
|
|
+ {
|
|
|
|
+ var pmTask = _dictModuleTask[pm] as VenusPMTask;
|
|
|
|
+ if (pmTask != null && pmTask.Scheduler.IsOnline && !pmTask.IsAllJobCompleted())
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
- runingjob.SetState(EnumControlJobState.Completed);
|
|
|
|
- runingjob.EndTime = DateTime.Now;
|
|
|
|
|
|
+ runingjob.JetState = EnumJetCtrlJobState.Completed;
|
|
|
|
+ runingjob.SetState(EnumControlJobState.Completed);
|
|
|
|
+ runingjob.EndTime = DateTime.Now;
|
|
|
|
|
|
- _faCallback.JobFinished(runingjob, GetFirstProcessJob(runingjob));
|
|
|
|
- _dbCallback.LotFinished(runingjob);
|
|
|
|
|
|
+ _faCallback.JobFinished(runingjob, GetFirstProcessJob(runingjob));
|
|
|
|
+ _dbCallback.LotFinished(runingjob);
|
|
|
|
|
|
- if (!(_isCycleMode && _cycledCount < _cycleSetPoint))
|
|
|
|
- (Singleton<TransferModule>.Instance.GetScheduler(ModuleHelper.Converter(runingjob.Module)) as SchedulerLoadPort).NoteJobComplete();
|
|
|
|
|
|
+ if (!(_isCycleMode && _cycledCount < _cycleSetPoint))
|
|
|
|
+ (Singleton<TransferModule>.Instance.GetScheduler(ModuleHelper.Converter(runingjob.Module)) as SchedulerLoadPort).NoteJobComplete();
|
|
|
|
|
|
- _lpCycleCount[ModuleHelper.Converter(runingjob.Module)]++;
|
|
|
|
|
|
+ _lpCycleCount[ModuleHelper.Converter(runingjob.Module)]++;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1675,6 +1695,7 @@ namespace Venus_RT.Modules
|
|
{
|
|
{
|
|
if (runingJobs.Count == 0 || (runingJobs.Count == 1 && IsAllJobWaferProcessedOrProcessing(runingJobs.First())))
|
|
if (runingJobs.Count == 0 || (runingJobs.Count == 1 && IsAllJobWaferProcessedOrProcessing(runingJobs.First())))
|
|
{
|
|
{
|
|
|
|
+ pendingJobs.First().JetState = EnumJetCtrlJobState.Processing;
|
|
ActiveControlJob(pendingJobs.First());
|
|
ActiveControlJob(pendingJobs.First());
|
|
|
|
|
|
// subscribe clean task
|
|
// subscribe clean task
|
|
@@ -1750,9 +1771,11 @@ namespace Venus_RT.Modules
|
|
_lstWaferTasks.Clear();
|
|
_lstWaferTasks.Clear();
|
|
}
|
|
}
|
|
else
|
|
else
|
|
|
|
+ {
|
|
_cycleState = RState.End;
|
|
_cycleState = RState.End;
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
foreach (var cj in cjRemoveList)
|
|
foreach (var cj in cjRemoveList)
|