| 
															
																@@ -32,7 +32,10 @@ namespace Venus_RT.Modules.PMs 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         public string CleanRecipeName { get; set; } 
															 | 
															
															 | 
															
																         public string CleanRecipeName { get; set; } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         public RecipeHead ProcessRecipeHead { get; set; } 
															 | 
															
															 | 
															
																         public RecipeHead ProcessRecipeHead { get; set; } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         public DateTime RecipeStartTime { get; private set; } 
															 | 
															
															 | 
															
																         public DateTime RecipeStartTime { get; private set; } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        public string WaferId { get; set; } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        public string SlotID { get; set; } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        public string LotID { get; set; } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        public string FullRecipeName { get; set; } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private readonly PumpDownRoutine _pumpDownRoutine; 
															 | 
															
															 | 
															
																         private readonly PumpDownRoutine _pumpDownRoutine; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private readonly ProcessHelper _processHelper; 
															 | 
															
															 | 
															
																         private readonly ProcessHelper _processHelper; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private bool _withWafer = true; 
															 | 
															
															 | 
															
																         private bool _withWafer = true; 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -358,7 +361,16 @@ namespace Venus_RT.Modules.PMs 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             var result = step.Run(); 
															 | 
															
															 | 
															
																             var result = step.Run(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if(result == RState.Failed) 
															 | 
															
															 | 
															
																             if(result == RState.Failed) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             { 
															 | 
															
															 | 
															
																             { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                ProcessDataRecorder.RecordPrecess(Guid.NewGuid().ToString(), RecipeStartTime, DateTime.Now, CurrentRunningRecipe, "Fail", "", _chamber.Name, "", ""); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.Completed); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                WaferInfo waferInfo = WaferManager.Instance.GetWafer(ModuleHelper.Converter(Module.ToString()), 0); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                if (!waferInfo.IsEmpty) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    WaferId = waferInfo.InnerId.ToString(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    SlotID = waferInfo.OriginSlot.ToString(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    LotID = waferInfo.ProcessJob == null || string.IsNullOrEmpty(waferInfo.ProcessJob.ControlJobName) ? "" : waferInfo.ProcessJob.ControlJobName; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    FullRecipeName = string.Format(@"{0}/{1}/{2}", ChuckRecipeName, ProcessRecipeName, DechuckRecipeName); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                ProcessDataRecorder.RecordPrecess(Guid.NewGuid().ToString(), RecipeStartTime, DateTime.Now, FullRecipeName, "Fail", WaferId, _chamber.Name, LotID, SlotID); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 UpdateWaferStatus(false); 
															 | 
															
															 | 
															
																                 UpdateWaferStatus(false); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 Runner.Stop($"Recipe:{CurrentRunningRecipe}, Step:{_currentStep + 1} Failed"); 
															 | 
															
															 | 
															
																                 Runner.Stop($"Recipe:{CurrentRunningRecipe}, Step:{_currentStep + 1} Failed"); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 FaEvent.FaPostAlarm(Module.ToString(), $"Recipe:{CurrentRunningRecipe}, Step:{_currentStep + 1} Failed"); 
															 | 
															
															 | 
															
																                 FaEvent.FaPostAlarm(Module.ToString(), $"Recipe:{CurrentRunningRecipe}, Step:{_currentStep + 1} Failed"); 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -424,16 +436,15 @@ namespace Venus_RT.Modules.PMs 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _chamber.OpenValve(ValveType.Guage, true); 
															 | 
															
															 | 
															
																             _chamber.OpenValve(ValveType.Guage, true); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _chamber.SetPVPostion(1000); 
															 | 
															
															 | 
															
																             _chamber.SetPVPostion(1000); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.Completed); 
															 | 
															
															 | 
															
																             WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.Completed); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            string waferId = "", slotID = "", lotID = "", recipename = ""; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             WaferInfo waferInfo = WaferManager.Instance.GetWafer(ModuleHelper.Converter(Module.ToString()), 0); 
															 | 
															
															 | 
															
																             WaferInfo waferInfo = WaferManager.Instance.GetWafer(ModuleHelper.Converter(Module.ToString()), 0); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if (!waferInfo.IsEmpty) 
															 | 
															
															 | 
															
																             if (!waferInfo.IsEmpty) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             { 
															 | 
															
															 | 
															
																             { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                waferId = waferInfo.InnerId.ToString(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                slotID = waferInfo.OriginSlot.ToString(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                lotID = waferInfo.ProcessJob == null || string.IsNullOrEmpty(waferInfo.ProcessJob.ControlJobName) ? "" : waferInfo.ProcessJob.ControlJobName; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                recipename = string.Format(@"{0}/{1}/{2}", ChuckRecipeName, ProcessRecipeName, DechuckRecipeName); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                WaferId = waferInfo.InnerId.ToString(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                SlotID = waferInfo.OriginSlot.ToString(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                LotID = waferInfo.ProcessJob == null || string.IsNullOrEmpty(waferInfo.ProcessJob.ControlJobName) ? "" : waferInfo.ProcessJob.ControlJobName; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                FullRecipeName = string.Format(@"{0}/{1}/{2}", ChuckRecipeName, ProcessRecipeName, DechuckRecipeName); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             } 
															 | 
															
															 | 
															
																             } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            ProcessDataRecorder.RecordPrecess(Guid.NewGuid().ToString(), RecipeStartTime, DateTime.Now, recipename,"", waferId, _chamber.Name, lotID, slotID); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            ProcessDataRecorder.RecordPrecess(Guid.NewGuid().ToString(), RecipeStartTime, DateTime.Now, FullRecipeName,"Success", WaferId, _chamber.Name, LotID, SlotID); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             return true; 
															 | 
															
															 | 
															
																             return true; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         } 
															 | 
															
															 | 
															
																         } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -441,11 +452,11 @@ namespace Venus_RT.Modules.PMs 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         { 
															 | 
															
															 | 
															
																         { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if(bDone == false) 
															 | 
															
															 | 
															
																             if(bDone == false) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             { 
															 | 
															
															 | 
															
																             { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                WaferManager.Instance.UpdateWaferProcessStatus(ModuleName.PMA, 0, EnumWaferProcessStatus.Failed); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.Failed); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 if(_currentRecipe.Header.Type == RecipeType.Chuck) 
															 | 
															
															 | 
															
																                 if(_currentRecipe.Header.Type == RecipeType.Chuck) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 { 
															 | 
															
															 | 
															
																                 { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     // set wafer chucked flag even if the chuck recipe failed. 
															 | 
															
															 | 
															
																                     // set wafer chucked flag even if the chuck recipe failed. 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                    WaferManager.Instance.UpdateWaferChuckStatus(ModuleName.PMA, 0, EnumWaferChuckStatus.Chucked); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    WaferManager.Instance.UpdateWaferChuckStatus(Module, 0, EnumWaferChuckStatus.Chucked); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 } 
															 | 
															
															 | 
															
																                 } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             } 
															 | 
															
															 | 
															
																             } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             switch(_currentRecipe.Header.Type) 
															 | 
															
															 | 
															
																             switch(_currentRecipe.Header.Type) 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -453,19 +464,26 @@ namespace Venus_RT.Modules.PMs 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 case RecipeType.Process: 
															 | 
															
															 | 
															
																                 case RecipeType.Process: 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     break; 
															 | 
															
															 | 
															
																                     break; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 case RecipeType.Chuck: 
															 | 
															
															 | 
															
																                 case RecipeType.Chuck: 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                    WaferManager.Instance.UpdateWaferChuckStatus(ModuleName.PMA, 0, EnumWaferChuckStatus.Chucked); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    WaferManager.Instance.UpdateWaferChuckStatus(Module, 0, EnumWaferChuckStatus.Chucked); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     break; 
															 | 
															
															 | 
															
																                     break; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 case RecipeType.DeChuck: 
															 | 
															
															 | 
															
																                 case RecipeType.DeChuck: 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                    WaferManager.Instance.UpdateWaferProcessStatus(ModuleName.PMA, 0, EnumWaferProcessStatus.Completed); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                    WaferManager.Instance.UpdateWaferChuckStatus(ModuleName.PMA, 0, EnumWaferChuckStatus.Dechucked); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.Completed); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    WaferManager.Instance.UpdateWaferChuckStatus(Module, 0, EnumWaferChuckStatus.Dechucked); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     break; 
															 | 
															
															 | 
															
																                     break; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             } 
															 | 
															
															 | 
															
																             } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         } 
															 | 
															
															 | 
															
																         } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																         public void Abort() 
															 | 
															
															 | 
															
																         public void Abort() 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         { 
															 | 
															
															 | 
															
																         { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            ProcessDataRecorder.RecordPrecess(Guid.NewGuid().ToString(), RecipeStartTime, DateTime.Now, CurrentRunningRecipe, "Fail", "", _chamber.Name, "", ""); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            WaferInfo waferInfo = WaferManager.Instance.GetWafer(ModuleHelper.Converter(Module.ToString()), 0); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (!waferInfo.IsEmpty) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                WaferId = waferInfo.InnerId.ToString(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                SlotID = waferInfo.OriginSlot.ToString(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                LotID = waferInfo.ProcessJob == null || string.IsNullOrEmpty(waferInfo.ProcessJob.ControlJobName) ? "" : waferInfo.ProcessJob.ControlJobName; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                FullRecipeName = string.Format(@"{0}/{1}/{2}", ChuckRecipeName, ProcessRecipeName, DechuckRecipeName); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            ProcessDataRecorder.RecordPrecess(Guid.NewGuid().ToString(), RecipeStartTime, DateTime.Now, FullRecipeName, "Fail", WaferId, _chamber.Name, LotID, SlotID); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _chamber.GeneratorBiasPowerOn(false); 
															 | 
															
															 | 
															
																             _chamber.GeneratorBiasPowerOn(false); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _chamber.GeneratorPowerOn(false); 
															 | 
															
															 | 
															
																             _chamber.GeneratorPowerOn(false); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _chamber.TurnPendulumValve(false); 
															 | 
															
															 | 
															
																             _chamber.TurnPendulumValve(false); 
															 |