Explorar o código

Fix the post clean not running bug.

sangwq hai 10 meses
pai
achega
09e8c5db30

+ 0 - 1
Venus/Venus_RT/Modules/Schedulers/SchedulerLoadPort.cs

@@ -145,7 +145,6 @@ namespace Venus_RT.Modules.Schedulers
 
         public void NoteJobComplete()
         {
-            _entity.NoteJobComplete(ModuleHelper.Converter(_module));
         }
     }
 }

+ 36 - 13
Venus/Venus_RT/Modules/VenusDispatcher.cs

@@ -373,6 +373,11 @@ namespace Venus_RT.Modules
             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()
         {
             base.ResetTask();
@@ -1646,27 +1651,42 @@ namespace Venus_RT.Modules
 
                 if (IsAllProcessJobComplete(runingjob))
                 {
-                    // subscribe clean task
                     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())))
                 {
+                    pendingJobs.First().JetState = EnumJetCtrlJobState.Processing;
                     ActiveControlJob(pendingJobs.First());
 
                     // subscribe clean task
@@ -1750,9 +1771,11 @@ namespace Venus_RT.Modules
                         _lstWaferTasks.Clear();
                     }
                     else
+                    {
                         _cycleState = RState.End;
+                    }
+                        
                 }
-
             }
 
             foreach (var cj in cjRemoveList)