diff --git a/Modules/SicModules/PMs/PMModule.cs b/Modules/SicModules/PMs/PMModule.cs index ab7d9ba..f8a1491 100644 --- a/Modules/SicModules/PMs/PMModule.cs +++ b/Modules/SicModules/PMs/PMModule.cs @@ -325,6 +325,18 @@ namespace SicModules.PMs return true; } + public string GetWaferSequenceID() + { + WaferInfoRt waferInfo = WaferManager.Instance.GetWafer(ModuleHelper.Converter(Module), 0); + return waferInfo != null ? waferInfo.PPID : string.Empty; + } + + public string GetWaferLotID() + { + WaferInfoRt waferInfo = WaferManager.Instance.GetWafer(ModuleHelper.Converter(Module), 0); + return waferInfo != null ? waferInfo.LotId : string.Empty; + } + public void AbortRunProcess(out string reason) { _pmInterLock.SetPMPreProcessRunning(false, out reason); diff --git a/Modules/SicModules/PMs/RecipeExecutions/Process.cs b/Modules/SicModules/PMs/RecipeExecutions/Process.cs index 953e6ff..535b32d 100644 --- a/Modules/SicModules/PMs/RecipeExecutions/Process.cs +++ b/Modules/SicModules/PMs/RecipeExecutions/Process.cs @@ -230,7 +230,8 @@ namespace SicModules.PMs.RecipeExecutions PmDevice.RecipeRunningInfo.RecipeName); _dbCallback.RecipeUpdateStatus(PmDevice.RecipeRunningInfo.InnerId.ToString(), "InProcess"); - GemManager.Instance.Equipment?.TriggerEvent("PMRecipeStart", new string[] { "ChamberID", "RecipeID"}, new object[] {PmDevice.Module, PmDevice.RecipeRunningInfo.RecipeName}); + //手动工艺时LotID和SequenceID可能是string.Empty + GemManager.Instance.Equipment?.TriggerEvent("PMRecipeStart", new string[] { "ChamberID", "RecipeID","LotID","SequenceID"}, new object[] {PmDevice.Module, PmDevice.RecipeRunningInfo.RecipeName, PmDevice.GetWaferLotID(), PmDevice.GetWaferSequenceID()}); WaferManager.Instance.UpdateWaferProcessStatus(ModuleHelper.Converter(Module), 0, WaferProcessStatus.InProcess); @@ -702,24 +703,25 @@ namespace SicModules.PMs.RecipeExecutions break; case RecipeRunningState.RecipeCompleted: - { - //更新PM的Runtime - if (!_hasRecordRunTime) { - _hasRecordRunTime = true; - RuntimeDataRecorder.UpdateElapseTimePM(Module + " Process", - (int)(_recipeTimer.GetElapseTime() / 60000)); + //更新PM的Runtime + if (!_hasRecordRunTime) + { + _hasRecordRunTime = true; + RuntimeDataRecorder.UpdateElapseTimePM(Module + " Process", + (int)(_recipeTimer.GetElapseTime() / 60000)); + } + + _recipeTimer.Stop(); + Notify("Finished"); + GrowCheck(); + + //手动工艺时LotID和SequenceID可能是string.Empty + GemManager.Instance.Equipment?.TriggerEvent("PMRecipeComplete", new string[] { "ChamberID", "RecipeID", "LotID", "SequenceID" }, new object[] { PmDevice.Module, PmDevice.RecipeRunningInfo.RecipeName, PmDevice.GetWaferLotID(), PmDevice.GetWaferSequenceID() }); + + return Result.DONE; } - _recipeTimer.Stop(); - Notify("Finished"); - GrowCheck(); - - GemManager.Instance.Equipment?.TriggerEvent("PMRecipeComplete", new string[] { "ChamberID", "RecipeID" }, new object[] { PmDevice.Module, PmDevice.RecipeRunningInfo.RecipeName }); - - return Result.DONE; - } - case RecipeRunningState.Error: { //更新PM的Runtime @@ -832,7 +834,8 @@ namespace SicModules.PMs.RecipeExecutions PmDevice.RecipeRunningInfo.TotalTime = 0; PmDevice.RecipeRunningInfo.TotalElapseTime = 0; - GemManager.Instance.Equipment?.TriggerEvent("PMRecipeAbort", new string[] { "ChamberID", "RecipeID" }, new object[] { PmDevice.Module, PmDevice.RecipeRunningInfo.RecipeName }); + //手动工艺时LotID和SequenceID可能是string.Empty + GemManager.Instance.Equipment?.TriggerEvent("PMRecipeAbort", new string[] { "ChamberID", "RecipeID", "LotID", "SequenceID" }, new object[] { PmDevice.Module, PmDevice.RecipeRunningInfo.RecipeName, PmDevice.GetWaferLotID(), PmDevice.GetWaferSequenceID() }); //PMDevice.Rf.SetPowerOnOff(false, out _); //PMDevice.Microwave.SetPowerOnOff(false, out _); diff --git a/SicRT/Equipments/AutoTransfer.cs b/SicRT/Equipments/AutoTransfer.cs index 852212f..d291a9e 100644 --- a/SicRT/Equipments/AutoTransfer.cs +++ b/SicRT/Equipments/AutoTransfer.cs @@ -832,7 +832,8 @@ namespace SicRT.Modules { foreach (var cj in cjList) { - GemManager.Instance.Equipment?.TriggerEvent("JobAbort", new string[] { "LotID" }, new object[] { cj.LotName }); + string squenceID = cj.LotWafers != null ? cj.LotWafers[0].PPID : string.Empty; + GemManager.Instance.Equipment?.TriggerEvent("JobAbort", new string[] { "LotID", "SequenceID" }, new object[] { cj.LotName, squenceID }); } } } @@ -1004,7 +1005,8 @@ namespace SicRT.Modules cj.SetState(EnumControlJobState.Executing); - GemManager.Instance.Equipment?.TriggerEvent("JobStart", new string[] { "LotID" }, new object[] { cj.LotName }); + string squenceID = cj.LotWafers != null ? cj.LotWafers[0].PPID : string.Empty; + GemManager.Instance.Equipment?.TriggerEvent("JobStart", new string[] { "LotID","SequenceID"}, new object[] { cj.LotName, squenceID}); } } } @@ -1687,7 +1689,8 @@ namespace SicRT.Modules _loadWaferInfo.Remove(_load.GetWaferInfo(0).WaferInnerID.ToString()); - GemManager.Instance.Equipment?.TriggerEvent("JobComplete", new string[] { "LotID" }, new object[] { _load.GetWaferInfo(0).LotId }); + GemManager.Instance.Equipment?.TriggerEvent("JobComplete", new string[] { "LotID", "SequenceID" }, + new object[] { _load.GetWaferInfo(0).LotId,_load.GetWaferInfo(0).PPID }); return; } diff --git a/ThirdParty/MECF.Framework/MECF.Framework.Common.dll b/ThirdParty/MECF.Framework/MECF.Framework.Common.dll index e1a4c67..5746caa 100644 Binary files a/ThirdParty/MECF.Framework/MECF.Framework.Common.dll and b/ThirdParty/MECF.Framework/MECF.Framework.Common.dll differ diff --git a/ThirdParty/MECF.Framework/MECF.Framework.RT.Core.dll b/ThirdParty/MECF.Framework/MECF.Framework.RT.Core.dll index 5614dbb..5bb5352 100644 Binary files a/ThirdParty/MECF.Framework/MECF.Framework.RT.Core.dll and b/ThirdParty/MECF.Framework/MECF.Framework.RT.Core.dll differ diff --git a/ThirdParty/MECF.Framework/MECF.Framework.RT.EquipmentLibrary.dll b/ThirdParty/MECF.Framework/MECF.Framework.RT.EquipmentLibrary.dll index 0f8adfc..68de407 100644 Binary files a/ThirdParty/MECF.Framework/MECF.Framework.RT.EquipmentLibrary.dll and b/ThirdParty/MECF.Framework/MECF.Framework.RT.EquipmentLibrary.dll differ diff --git a/ThirdParty/MECF.Framework/MECF.Framework.Simulator.Core.dll b/ThirdParty/MECF.Framework/MECF.Framework.Simulator.Core.dll index 303a9ce..c259bf0 100644 Binary files a/ThirdParty/MECF.Framework/MECF.Framework.Simulator.Core.dll and b/ThirdParty/MECF.Framework/MECF.Framework.Simulator.Core.dll differ diff --git a/ThirdParty/MECF.Framework/MECF.Framework.UI.Client.dll b/ThirdParty/MECF.Framework/MECF.Framework.UI.Client.dll index 773d989..a64f379 100644 Binary files a/ThirdParty/MECF.Framework/MECF.Framework.UI.Client.dll and b/ThirdParty/MECF.Framework/MECF.Framework.UI.Client.dll differ diff --git a/ThirdParty/MECF.Framework/MECF.Framework.UI.Core.dll b/ThirdParty/MECF.Framework/MECF.Framework.UI.Core.dll index 291265c..f9dabfd 100644 Binary files a/ThirdParty/MECF.Framework/MECF.Framework.UI.Core.dll and b/ThirdParty/MECF.Framework/MECF.Framework.UI.Core.dll differ diff --git a/ThirdParty/MECF.Framework/Sicentury.Localization.dll b/ThirdParty/MECF.Framework/Sicentury.Localization.dll index 6b3094f..3e1cc99 100644 Binary files a/ThirdParty/MECF.Framework/Sicentury.Localization.dll and b/ThirdParty/MECF.Framework/Sicentury.Localization.dll differ diff --git a/ThirdParty/MECF.Framework/zh/Sicentury.Localization.resources.dll b/ThirdParty/MECF.Framework/zh/Sicentury.Localization.resources.dll index 40af902..2919c85 100644 Binary files a/ThirdParty/MECF.Framework/zh/Sicentury.Localization.resources.dll and b/ThirdParty/MECF.Framework/zh/Sicentury.Localization.resources.dll differ