| 
															
																@@ -203,6 +203,11 @@ namespace Venus_RT.Modules 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         StartAlign, 
															 | 
															
															 | 
															
																         StartAlign, 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         Aligning, 
															 | 
															
															 | 
															
																         Aligning, 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        // PreHeating 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        WaitPreHeating, 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        StartPreHeating, 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        PreHeating, 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         // Loadlock Status 
															 | 
															
															 | 
															
																         // Loadlock Status 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         ExchangeWaferWithEFEM, 
															 | 
															
															 | 
															
																         ExchangeWaferWithEFEM, 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         ExchangeWaferWithTM, 
															 | 
															
															 | 
															
																         ExchangeWaferWithTM, 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -301,7 +306,33 @@ namespace Venus_RT.Modules 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																         public override int TimeToReady 
															 | 
															
															 | 
															
																         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; 
															 | 
															
															 | 
															
																         private WaferTask _wafer; 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1412,7 +1443,7 @@ namespace Venus_RT.Modules 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                 foreach (var pm in PMs) 
															 | 
															
															 | 
															
																                                 foreach (var pm in PMs) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                 { 
															 | 
															
															 | 
															
																                                 { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                     var pmTask = _dictModuleTask[pm] as PMTask; 
															 | 
															
															 | 
															
																                                     var pmTask = _dictModuleTask[pm] as PMTask; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                                    if(pmTask != null) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                                    if(pmTask != null && pmTask.Scheduler.IsOnline) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                     { 
															 | 
															
															 | 
															
																                                     { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                         pmTask.InvokePreJobClean(cj.PreJobClean); 
															 | 
															
															 | 
															
																                                         pmTask.InvokePreJobClean(cj.PreJobClean); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                     } 
															 | 
															
															 | 
															
																                                     } 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1445,7 +1476,7 @@ namespace Venus_RT.Modules 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                 foreach (var pm in PMs) 
															 | 
															
															 | 
															
																                                 foreach (var pm in PMs) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                 { 
															 | 
															
															 | 
															
																                                 { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                     var pmTask = _dictModuleTask[pm] as PMTask; 
															 | 
															
															 | 
															
																                                     var pmTask = _dictModuleTask[pm] as PMTask; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                                    if (pmTask != null) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                                    if (pmTask != null && pmTask.Scheduler.IsOnline) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                     { 
															 | 
															
															 | 
															
																                                     { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                         pmTask.InvokePostJobClean(cj.PostJobClean); 
															 | 
															
															 | 
															
																                                         pmTask.InvokePostJobClean(cj.PostJobClean); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                     } 
															 | 
															
															 | 
															
																                                     } 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1711,7 +1742,7 @@ namespace Venus_RT.Modules 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             foreach(var pm in pms) 
															 | 
															
															 | 
															
																             foreach(var pm in pms) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             { 
															 | 
															
															 | 
															
																             { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 var pmTask = _dictModuleTask[pm] as PMTask; 
															 | 
															
															 | 
															
																                 var pmTask = _dictModuleTask[pm] as PMTask; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                if (!pmTask.IsPreJobCleanDone()) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                if (pmTask.Scheduler.IsOnline && !pmTask.IsPreJobCleanDone()) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     return false; 
															 | 
															
															 | 
															
																                     return false; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             } 
															 | 
															
															 | 
															
																             } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1724,7 +1755,7 @@ namespace Venus_RT.Modules 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             foreach (var pm in pms) 
															 | 
															
															 | 
															
																             foreach (var pm in pms) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             { 
															 | 
															
															 | 
															
																             { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 var pmTask = _dictModuleTask[pm] as PMTask; 
															 | 
															
															 | 
															
																                 var pmTask = _dictModuleTask[pm] as PMTask; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                if (!pmTask.IsPostJobCleanDone()) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                if (pmTask.Scheduler.IsOnline && !pmTask.IsPostJobCleanDone()) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     return false; 
															 | 
															
															 | 
															
																                     return false; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             } 
															 | 
															
															 | 
															
																             } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -2567,7 +2598,7 @@ namespace Venus_RT.Modules 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     { 
															 | 
															
															 | 
															
																                     { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         if (ModuleHelper.IsPm(wafer.destMod)) 
															 | 
															
															 | 
															
																                         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.currentMod == wafer.destMod) && 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                 !_lstWaferTasks.Exists(waferT => waferT.routedMod == wafer.destMod)) 
															 | 
															
															 | 
															
																                                 !_lstWaferTasks.Exists(waferT => waferT.routedMod == wafer.destMod)) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                             { 
															 | 
															
															 | 
															
																                             { 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -2639,7 +2670,7 @@ namespace Venus_RT.Modules 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         // try to return one wafer 
															 | 
															
															 | 
															
																                         // try to return one wafer 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         if (!IsLLReservedByEFEM(outLL) && outLLWaferStatus.emptySlot.Count > 0) 
															 | 
															
															 | 
															
																                         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) 
															 | 
															
															 | 
															
																                             if (reayReturnWafer != null) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                             { 
															 | 
															
															 | 
															
																                             { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                                 reayReturnWafer.RouteTo(outLL, outLLWaferStatus.emptySlot[0]); 
															 | 
															
															 | 
															
																                                 reayReturnWafer.RouteTo(outLL, outLLWaferStatus.emptySlot[0]); 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -2652,8 +2683,8 @@ namespace Venus_RT.Modules 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 } 
															 | 
															
															 | 
															
																                 } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 else // no wafer on robot arm 
															 | 
															
															 | 
															
																                 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) 
															 | 
															
															 | 
															
																                     if(_tmRobotSingleArmOption != 0) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     { 
															 | 
															
															 | 
															
																                     { 
															 |