ソースを参照

fix the bug which pm wafer been transfer out without processed.

sangwq 1 年間 前
コミット
78ec8de62c
共有1 個のファイルを変更した40 個の追加9 個の削除を含む
  1. 40 9
      Venus/Venus_RT/Modules/SystemDispatcher.cs

+ 40 - 9
Venus/Venus_RT/Modules/SystemDispatcher.cs

@@ -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)
                     {