瀏覽代碼

update 定义各个command事件及其方法

jiangjy 1 周之前
父節點
當前提交
2d69d21742

+ 4 - 4
FrameworkLocal/Common/FAServices/DataVariables.cs

@@ -63,6 +63,7 @@ namespace MECF.Framework.Common.FAServices
         public const string SubstLocState = "SubstLocState";
         public const string SubstProcState = "SubstProcState";
         public const string PrvSubstProcState = "PrvSubstProcState";
+        public const string RecipeName = "RecipeName";
 
 
         #region 自定义DVID,在此增加完后需更新DataNameEnum和DataVariablesDictionary
@@ -101,7 +102,7 @@ namespace MECF.Framework.Common.FAServices
         public const string PJId = "PJId";
         public const string CallRecipeID = "CallRecipeID";
         public const string StepId = "StepId";
-        public const string NewRecipeStepNumber = "NewRecipeStepNumber";
+
         public const string RecID = "RecID";
 
 
@@ -205,8 +206,7 @@ namespace MECF.Framework.Common.FAServices
 
             CallRecipeID = 3523,
             StepId = 3524,
-            NewRecipeStepNumber = 3525,
-
+            RecipeName=3525,
 
             #endregion
 
@@ -296,7 +296,7 @@ namespace MECF.Framework.Common.FAServices
             {PPStepChange, new VIDItem() {Name = PPStepChange, Index = (int) DataName.PPStepChange,DataType = "String",Description = "BoatThickness"}},
             {CallRecipeID, new VIDItem() {Name = CallRecipeID, Index = (int) DataName.CallRecipeID,DataType = "String",Description = "CallRecipeID"}},
             {StepId, new VIDItem() {Name = StepId, Index = (int) DataName.StepId,DataType = "String",Description = "StepId"}},
-            {NewRecipeStepNumber, new VIDItem() {Name = NewRecipeStepNumber, Index = (int) DataName.NewRecipeStepNumber,DataType = "String",Description = "NewRecipeStepNumber"}},
+            {RecipeName, new VIDItem() {Name = RecipeName, Index = (int) DataName.RecipeName,DataType = "String",Description = "RecipeName"}},
 
             {ProcessWaferIdList, new VIDItem() {Name = ProcessWaferIdList, Index = (int) DataName.ProcessWaferIdList,DataType = "List",Description = "List of process waferID.\r\nL, n\r\nL, 3\r\n<waferID> \r\n<TimeIn>\r\n<TimeOut>"}},
             {ProcessLotIdList, new VIDItem() {Name = ProcessLotIdList, Index = (int) DataName.ProcessLotIdList,DataType = "List",Description = "List of process LotId.\r\nL, n\r\nL, 3\r\n<ProcessLotIdList> \r\n<TimeIn>\r\n<TimeOut>"}},

+ 106 - 33
FrameworkLocal/Common/FAServices/UniversalEvents.cs

@@ -59,16 +59,7 @@ namespace MECF.Framework.Common.FAServices
         public const string RecipeStepEnd = "RecipeStepEnd";
         public const string RecipeFailed = "RecipeFailed";
 
-        public const string RecipeStop = "RecipeStop";
-        public const string RecipeHold = "RecipeHold";
-        public const string RecipeRelease = "RecipeRelease";
-        public const string RecipeJumpStep = "RecipeJumpStep";
-        public const string RecipeStepSkip = "RecipeStepSkip";
-        public const string RecipeJumpEnd = "RecipeJumpEnd";
-        public const string RecipeAbort = "RecipeAbort";
-        public const string CallAlarmRecipe = "CallAlarmRecipe";
-        public const string CallAbortRecipe = "CallAbortRecipe";
-        public const string RunResetRecipe = "RunResetRecipe";
+
 
         public const string CarrierInEnd = "CarrierInEnd";
         public const string CarrierInStart = "CarrierInStart";
@@ -85,6 +76,37 @@ namespace MECF.Framework.Common.FAServices
         public const string SideDummyStateWarning = "SideDummyStateWarning";
         public const string ExtraDummyStateWarning = "ExtraDummyStateWarning";
 
+        public const string AlarmConditionTriggerReset = "AlarmConditionTriggerReset";
+        public const string AlarmConditionTriggerEnd = "AlarmConditionTriggerEnd";
+        public const string AlarmConditionTriggerHold = "AlarmConditionTriggerHold";
+        public const string AlarmConditionTriggerJumpStep = "AlarmConditionTriggerJumpStep";
+        public const string AlarmConditionTriggerCallAlarmRecipe = "AlarmConditionTriggerCallAlarmRecipe";
+        public const string AlarmConditionTriggerCallAbortRecipe = "AlarmConditionTriggerCallAbortRecipe";
+        public const string RecipeAbnormalEnd = "RecipeAbnormalEnd";
+
+
+        public const string LeakCheckTriggerReset = "LeakCheckTriggerReset";
+        public const string LeakCheckTriggerEnd = "LeakCheckTriggerEnd";
+        public const string LeakCheckTriggerHold = "LeakCheckTriggerHold";
+        public const string LeakCheckTriggerJumpStep = "LeakCheckTriggerJumpStep";
+        public const string LeakCheckTriggerCallAlarmRecipe = "LeakCheckTriggerCallAlarmRecipe";
+        public const string LeakCheckTriggerCallAbortRecipe = "LeakCheckTriggerCallAbortRecipe";
+
+
+        public const string ManualTriggerRecipeHold = "ManualTriggerRecipeHold";
+        public const string ManualTriggerRecipeRelease = "ManualTriggerRecipeRelease";
+        public const string ManualTriggerRecipeSkip = "ManualTriggerRecipeSkip";
+        public const string ManualTriggerRecipeJump = "ManualTriggerRecipeJump";
+        public const string ManualTriggerRecipeAbort = "ManualTriggerRecipeAbort";
+
+        public const string RecipeTriggerReset = "RecipeTriggerReset";
+        public const string RecipeTriggerEnd = "RecipeTriggerEnd";
+        public const string RecipeTriggerHold = "RecipeTriggerHold";
+        public const string RecipeTriggerLeakCheck = "RecipeTriggerLeakCheck";
+        public const string RecipeTriggerJumpStep = "RecipeTriggerJumpStep";
+        public const string RecipeTriggerCallSubRecipe = "RecipeTriggerCallSubRecipe";
+
+
         /// <summary>
         /// 定义Gem200事件的ID
         /// </summary>
@@ -164,17 +186,39 @@ namespace MECF.Framework.Common.FAServices
             ExtraDummyStateWarning = 2029,
 
 
-            RecipeHold = 2040,
-            RecipeRelease = 2041,
-            RecipeStop = 2042,
-            RecipeJumpStep = 2043,
-            RecipeAbort = 2044,
-            RecipeSkip = 2045,
-            RecipeJumpEnd = 2046,
-            CallAlarmRecipe = 2047,
-            CallAbortRecipe = 2048,
-            RunResetRecipe = 2049,
-            RecipeStepSkip = 2050,
+            AlarmConditionTriggerReset = 2030,
+            AlarmConditionTriggerEnd = 2031,
+            AlarmConditionTriggerHold = 2032,
+            AlarmConditionTriggerJumpStep = 2033,
+            AlarmConditionTriggerCallAlarmRecipe = 2034,
+            AlarmConditionTriggerCallAbortRecipe = 2035,
+
+            LeakCheckTriggerReset = 2040,
+            LeakCheckTriggerEnd = 2041,
+            LeakCheckTriggerHold = 2042,
+            LeakCheckTriggerJumpStep = 2043,
+            LeakCheckTriggerCallAlarmRecipe = 2044,
+            LeakCheckTriggerCallAbortRecipe = 2045,
+
+            ManualTriggerRecipeHold = 2050,
+            ManualTriggerRecipeRelease = 2051,
+            ManualTriggerRecipeSkip = 2052,
+            ManualTriggerRecipeJump = 2053,
+            ManualTriggerRecipeAbort = 2054,
+
+            RecipeTriggerReset = 2060,
+            RecipeTriggerEnd = 2061,
+            RecipeTriggerHold = 2062,
+            RecipeTriggerLeakCheck = 2063,
+            RecipeTriggerJumpStep = 2064,
+            RecipeTriggerCallSubRecipe = 2065,
+
+
+            RecipeAbnormalEnd = 2066,
+
+
+
+
         }
 
         /// <summary>
@@ -244,7 +288,7 @@ namespace MECF.Framework.Common.FAServices
             {RecipeStepEnd, new VIDItem() {Name = RecipeStepEnd, Index = (int)EventName.RecipeStepEnd, LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.StationName, (int)DataVariables.DataName.RecipeStepNumber, (int)DataVariables.DataName.SlotID}}},
             {RecipeFailed, new VIDItem() {Name = RecipeFailed, Index = (int)EventName.RecipeFailed,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.PortID,(int)DataVariables.DataName.StationName,(int)DataVariables.DataName.SlotID}}},
 
-        
+
 
 
             {ChargeStart, new VIDItem() {Name = ChargeStart, Index = (int)EventName.ChargeStart,  LinkableVid = new[] {(int)DataVariables.DataName.PRJobID, (int)DataVariables.DataName.Clock}}},
@@ -283,21 +327,50 @@ namespace MECF.Framework.Common.FAServices
                 (int)DataVariables.DataName.EventName,
             }}},
 
-            {RecipeHold, new VIDItem() {Name = RecipeHold, Index = (int)EventName.RecipeHold,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber}}},
-            {RecipeStop, new VIDItem() {Name = RecipeStop, Index = (int)EventName.RecipeStop,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.NewRecipeStepNumber}}},
-            {RecipeRelease, new VIDItem() {Name = RecipeRelease, Index = (int)EventName.RecipeRelease,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.NewRecipeStepNumber}}},
-            {RecipeStepSkip, new VIDItem() {Name = RecipeStepSkip, Index = (int)EventName.RecipeStepSkip,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.NewRecipeStepNumber}}},
 
-            {RecipeJumpStep, new VIDItem() {Name = RecipeJumpStep, Index = (int)EventName.RecipeJumpStep,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.NewRecipeStepNumber, (int)DataVariables.DataName.StepId}}},
-            {RecipeAbort, new VIDItem() {Name = RecipeAbort, Index = (int)EventName.RecipeAbort,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.NewRecipeStepNumber}}},
-            {RecipeJumpEnd, new VIDItem() {Name = RecipeJumpEnd, Index = (int)EventName.RecipeJumpEnd,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.NewRecipeStepNumber, (int)DataVariables.DataName.StepId}}},
+            {AlarmConditionTriggerReset, new VIDItem() {Name = AlarmConditionTriggerReset, Index = (int)EventName.AlarmConditionTriggerReset,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.RecipeName}}},
+            {AlarmConditionTriggerEnd, new VIDItem() {Name = AlarmConditionTriggerEnd, Index = (int)EventName.AlarmConditionTriggerEnd,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber}}},
+            {AlarmConditionTriggerHold, new VIDItem() {Name = AlarmConditionTriggerHold, Index = (int)EventName.AlarmConditionTriggerHold,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber}}},
+            {AlarmConditionTriggerJumpStep, new VIDItem() {Name = AlarmConditionTriggerJumpStep, Index = (int)EventName.AlarmConditionTriggerJumpStep,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.StepId}}},
+            {AlarmConditionTriggerCallAlarmRecipe, new VIDItem() {Name = AlarmConditionTriggerCallAlarmRecipe, Index = (int)EventName.AlarmConditionTriggerCallAlarmRecipe,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.RecipeName}}},
+            {AlarmConditionTriggerCallAbortRecipe, new VIDItem() {Name = AlarmConditionTriggerCallAbortRecipe, Index = (int)EventName.AlarmConditionTriggerCallAbortRecipe,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.RecipeName}}},
+
+
+            {LeakCheckTriggerReset, new VIDItem() {Name = LeakCheckTriggerReset, Index = (int)EventName.LeakCheckTriggerReset,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.RecipeName}}},
+            {LeakCheckTriggerEnd, new VIDItem() {Name = LeakCheckTriggerEnd, Index = (int)EventName.LeakCheckTriggerEnd,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber}}},
+            {LeakCheckTriggerHold, new VIDItem() {Name = LeakCheckTriggerHold, Index = (int)EventName.LeakCheckTriggerHold,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber}}},
+            {LeakCheckTriggerJumpStep, new VIDItem() {Name = LeakCheckTriggerJumpStep, Index = (int)EventName.LeakCheckTriggerJumpStep,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.StepId}}},
+            {LeakCheckTriggerCallAlarmRecipe, new VIDItem() {Name = LeakCheckTriggerCallAlarmRecipe, Index = (int)EventName.LeakCheckTriggerCallAlarmRecipe,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.RecipeName}}},
+            {LeakCheckTriggerCallAbortRecipe, new VIDItem() {Name = LeakCheckTriggerCallAbortRecipe, Index = (int)EventName.LeakCheckTriggerCallAbortRecipe,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.RecipeName}}},
+
 
-            {CallAlarmRecipe, new VIDItem() {Name = CallAlarmRecipe, Index = (int)EventName.CallAlarmRecipe,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.NewRecipeStepNumber, (int)DataVariables.DataName.CallRecipeID}}},
-            {CallAbortRecipe, new VIDItem() {Name = CallAbortRecipe, Index = (int)EventName.CallAbortRecipe,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.NewRecipeStepNumber, (int)DataVariables.DataName.CallRecipeID}}},
-            {RunResetRecipe, new VIDItem() {Name = RunResetRecipe, Index = (int)EventName.RunResetRecipe,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.NewRecipeStepNumber, (int)DataVariables.DataName.CallRecipeID }}},
+            {ManualTriggerRecipeHold, new VIDItem() {Name = ManualTriggerRecipeHold, Index = (int)EventName.ManualTriggerRecipeHold,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber}}},
+            {ManualTriggerRecipeRelease, new VIDItem() {Name = ManualTriggerRecipeRelease, Index = (int)EventName.ManualTriggerRecipeRelease,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber}}},
+            {ManualTriggerRecipeSkip, new VIDItem() {Name = ManualTriggerRecipeSkip, Index = (int)EventName.ManualTriggerRecipeSkip,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber}}},
+            {ManualTriggerRecipeJump, new VIDItem() {Name = ManualTriggerRecipeJump, Index = (int)EventName.ManualTriggerRecipeJump,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.StepId}}},
+            {ManualTriggerRecipeAbort, new VIDItem() {Name = ManualTriggerRecipeAbort, Index = (int)EventName.ManualTriggerRecipeAbort,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.RecipeName}}},
 
 
-        };
+            {RecipeTriggerReset, new VIDItem() {Name = RecipeTriggerReset, Index = (int)EventName.RecipeTriggerReset,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.RecipeName}}},
+            {RecipeTriggerEnd, new VIDItem() {Name = RecipeTriggerEnd, Index = (int)EventName.RecipeTriggerEnd,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber}}},
+            {RecipeTriggerHold, new VIDItem() {Name = RecipeTriggerHold, Index = (int)EventName.RecipeTriggerHold,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber}}},
+            {RecipeTriggerLeakCheck, new VIDItem() {Name = RecipeTriggerLeakCheck, Index = (int)EventName.RecipeTriggerLeakCheck,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber}}},
+            {RecipeTriggerJumpStep, new VIDItem() {Name = RecipeTriggerJumpStep, Index = (int)EventName.RecipeTriggerJumpStep,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.StepId}}},
+            {RecipeTriggerCallSubRecipe, new VIDItem() {Name = RecipeTriggerCallSubRecipe, Index = (int)EventName.RecipeTriggerCallSubRecipe,  LinkableVid = new[] {(int)DataVariables.DataName.RecipeID,(int)DataVariables.DataName.RecipeStepNumber,(int)DataVariables.DataName.RecipeName}}},
+
+
+                  {RecipeAbnormalEnd, new VIDItem() {Name = RecipeAbnormalEnd, Index = (int)EventName.RecipeAbnormalEnd,
+                LinkableVid = new[] {
+                    (int)DataVariables.DataName.RecipeID,
+                    (int)DataVariables.DataName.PortID,
+                    (int)DataVariables.DataName.StationName,
+                    (int)DataVariables.DataName.SlotID,
+                    (int)DataVariables.DataName.ProcessWaferIdList,
+                    (int)DataVariables.DataName.ProcessCarrierIDList,
+                    (int)DataVariables.DataName.ProcessLotIdList,
+                }}},
+
+    };
 
     }
 }

+ 0 - 4
Furnace/FurnaceRT/Equipments/PMs/PMAlarmCondition.cs

@@ -984,7 +984,6 @@ namespace FurnaceRT.Equipments.PMs
                         log = $"{log} ,sensorName={sensorName}";
 
 
-                    _processRoutine.FACallBack(UniversalEvents.RunResetRecipe, Module, RecipeRunningInfo.RecipeName, RecipeRunningInfo.StepNumber.ToString(), recipe);
                     LOG.Write(log);
                     break;
                 case "End":
@@ -996,7 +995,6 @@ namespace FurnaceRT.Equipments.PMs
                         //因为要跳到执行最后一步,所以stepNumber需要减一
                         _processRoutine.JumpCurrentRecipeStep(RecipeRunningInfo.RecipeStepList.Count - 1, RecipeRunningInfo.RecipeStepList[RecipeRunningInfo.RecipeStepList.Count - 1].StepName);
 
-                        _processRoutine.FACallBack(UniversalEvents.RecipeJumpEnd, Module, RecipeRunningInfo.RecipeName, RecipeRunningInfo.StepNumber.ToString(), $"{RecipeRunningInfo.RecipeStepList.Count - 1}");
 
                     }
                     else
@@ -1102,7 +1100,6 @@ namespace FurnaceRT.Equipments.PMs
                             recipeType = "Alarm";
                             recipeTable = paras[0].Replace("CALL", "").Replace(" ", "").Replace(":", "").Replace(":", "");
                             CheckToPostMessage((int)MSG.RunOtherRecipe, recipe, recipeType, recipeTable);
-                            _processRoutine.FACallBack(UniversalEvents.CallAlarmRecipe, Module, RecipeRunningInfo.RecipeName, RecipeRunningInfo.StepNumber.ToString(), $"{recipe}");
 
                             LOG.Write($"Alarm condition: command={command} recipe={recipe}");
                         }
@@ -1120,7 +1117,6 @@ namespace FurnaceRT.Equipments.PMs
                             recipeType = "Abort";
                             recipeTable = paras[0].Replace("ABORT", "").Replace(" ", "").Replace(":", "").Replace(":", "");
                             CheckToPostMessage((int)MSG.RunOtherRecipe, recipe, recipeType, recipeTable);
-                            _processRoutine.FACallBack(UniversalEvents.CallAbortRecipe, Module, RecipeRunningInfo.RecipeName, RecipeRunningInfo.StepNumber.ToString(), $"{recipe}");
                             LOG.Write($"Alarm condition: command={command} recipe={recipe}");
                         }
                     }

+ 0 - 4
Furnace/FurnaceRT/Equipments/PMs/PMModule.cs

@@ -1337,7 +1337,6 @@ namespace FurnaceRT.Equipments.PMs
                 {
                     PostMsg(MSG.Error);
                     ExecuteAbortRecipeFailAlarm.Set($"Load abort recipe {recipeName} failed, {reason}");
-                    _processRoutine.FACallBack(UniversalEvents.RecipeAbort, Module, RecipeRunningInfo.RecipeName, _processRoutine._currentStepNumber.ToString());
 
                     return false;
                 }
@@ -1354,7 +1353,6 @@ namespace FurnaceRT.Equipments.PMs
                     if (!RecipeParser.ParseTables(_recipeRunningInfo.Head.AbortRecipe, Module, out var recipeData, out reason, "Abort"))
                     {
                         ExecuteAbortRecipeFailAlarm.Set($"Load abort recipe {recipeName} failed, {reason}");
-                        _processRoutine.FACallBack(UniversalEvents.RecipeAbort, Module, RecipeRunningInfo.RecipeName, _processRoutine._currentStepNumber.ToString());
 
                         return false;
                     }
@@ -1372,7 +1370,6 @@ namespace FurnaceRT.Equipments.PMs
             {
                 if (!RecipeParser.ParseTables(SC.GetStringValue("System.Recipe.Abort Recipe"), Module, out var recipeData, out reason, "Abort"))
                 {
-                    _processRoutine.FACallBack(UniversalEvents.RecipeAbort, Module, RecipeRunningInfo.RecipeName, _processRoutine._currentStepNumber.ToString());
 
                     ExecuteAbortRecipeFailAlarm.Set($"Load abort recipe {recipeName} failed, {reason}");
                     return false;
@@ -1384,7 +1381,6 @@ namespace FurnaceRT.Equipments.PMs
                 }
 
             }
-            _processRoutine.FACallBack(UniversalEvents.RecipeAbort, Module, RecipeRunningInfo.RecipeName, _processRoutine._currentStepNumber.ToString());
 
             RecipeExecEntryEnumValue = RecipeExecEntryEnum.AbortRecipeTrigger;
             CheckToPostMessage((int)MSG.RunOtherRecipe, recipeName, recipeType, recipeTable);

+ 24 - 29
Furnace/FurnaceRT/Equipments/PMs/RecipeExecutions/Process.cs

@@ -791,7 +791,6 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
                                 _state = RecipeRunningState.Paused;
                                 var step = IsSubReciep ? _currentSubRecipeStepNumber + 1 : _currentStepNumber;
 
-                                _faCallback.RecipeHold(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName, step.ToString());
                                 break;
                             }
 
@@ -1210,7 +1209,6 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
 
             Task.Delay(300).ContinueWith((a) =>
             {
-                _faCallback.RecipeRelease(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName, step.ToString());
             });
         }
 
@@ -1234,12 +1232,10 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
             if (IsSubReciep)
             {
                 ResetLoop(PMModule.RecipeRunningInfo.RecipeStepList[_currentStepNumber].SubRecipeSteps, _currentSubRecipeStepNumber);
-                _faCallback.RecipeStepSkip(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName, _currentSubRecipeStepNumber.ToString());
             }
             else
             {
                 ResetLoop(PMModule.RecipeRunningInfo.RecipeStepList, _currentStepNumber);
-                _faCallback.RecipeStepSkip(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName, _currentStepNumber.ToString());
 
             }
         }
@@ -1286,36 +1282,35 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
         }
         public void FACallBack(string recipeAction, string module, string recipeName, string recipeStep, string jumpStpeId = "", string otherRecipeName = "")
         {
-            if (recipeAction == UniversalEvents.RecipeAbort)
-            {
-                _faCallback.RecipeAbort(module, recipeName, recipeStep);
-            }
-            if (recipeAction == UniversalEvents.RecipeJumpStep)
-            {
-                _faCallback.RecipeJumpStep(module, recipeName, recipeStep, jumpStpeId);
-            }
-            if (recipeAction == UniversalEvents.RecipeJumpEnd)
-            {
-                _faCallback.RecipeJumpEnd(module, recipeName, recipeStep, jumpStpeId);
-            }
-            if (recipeAction == UniversalEvents.CallAlarmRecipe)
-            {
-                _faCallback.RecipeCallAlarmRecipe(module, recipeName, recipeStep, otherRecipeName);
-            }
-            if (recipeAction == UniversalEvents.CallAbortRecipe)
-            {
-                _faCallback.RecipeCallAbortRecipe(module, recipeName, recipeStep, otherRecipeName);
-            }
-            if (recipeAction == UniversalEvents.RunResetRecipe)
-            {
-                _faCallback.RecipeRunResetRecipe(module, recipeName, recipeStep, otherRecipeName);
-            }
+            //if (recipeAction == UniversalEvents.RecipeAbort)
+            //{
+            //    _faCallback.RecipeAbort(module, recipeName, recipeStep);
+            //}
+            //if (recipeAction == UniversalEvents.RecipeJumpStep)
+            //{
+            //    _faCallback.RecipeJumpStep(module, recipeName, recipeStep, jumpStpeId);
+            //}
+            //if (recipeAction == UniversalEvents.RecipeJumpEnd)
+            //{
+            //    _faCallback.RecipeJumpEnd(module, recipeName, recipeStep, jumpStpeId);
+            //}
+            //if (recipeAction == UniversalEvents.CallAlarmRecipe)
+            //{
+            //    _faCallback.RecipeCallAlarmRecipe(module, recipeName, recipeStep, otherRecipeName);
+            //}
+            //if (recipeAction == UniversalEvents.CallAbortRecipe)
+            //{
+            //    _faCallback.RecipeCallAbortRecipe(module, recipeName, recipeStep, otherRecipeName);
+            //}
+            //if (recipeAction == UniversalEvents.RunResetRecipe)
+            //{
+            //    _faCallback.RecipeRunResetRecipe(module, recipeName, recipeStep, otherRecipeName);
+            //}
         }
         public void JumpCurrentRecipeStep(int stepNumber, string stepName, bool isAlarmConditionCall = false)
         {
             PMModule.StopLeakCheckTimer();
             LOG.Write($"Jump to step stepNumber={stepNumber} stepName={stepName}, currentStepNumber={_currentStepNumber}");
-            _faCallback.RecipeJumpStep(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName, stepNumber.ToString(), _currentStepNumber.ToString());
             if (_state == RecipeRunningState.ConditionWait || _state == RecipeRunningState.TimeWait ||
                 _state == RecipeRunningState.Paused || _state == RecipeRunningState.ExecStep)
             {

+ 220 - 44
Furnace/FurnaceRT/Equipments/PMs/RecipeFACallback.cs

@@ -65,6 +65,32 @@ namespace FurnaceRT.Equipments.PMs
             EV.Subscribe(new EventItem("Event", PM1RecipeStepEnd, PM1RecipeStepEnd));
             EV.Subscribe(new EventItem("Event", PM1RecipeFailed, PM1RecipeFailed));
 
+            EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeAbnormalEnd, $"RecipeAbnormalEnd"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.AlarmConditionTriggerReset, $"AlarmConditionTriggerReset"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.AlarmConditionTriggerEnd, $"AlarmConditionTriggerEnd"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.AlarmConditionTriggerHold, $"AlarmConditionTriggerHold"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.AlarmConditionTriggerJumpStep, $"AlarmConditionTriggerJumpStep"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.AlarmConditionTriggerCallAlarmRecipe, $"AlarmConditionTriggerCallAlarmRecipe"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.AlarmConditionTriggerCallAbortRecipe, $"AlarmConditionTriggerCallAbortRecipe"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.LeakCheckTriggerReset, $"LeakCheckTriggerReset"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.LeakCheckTriggerEnd, $"LeakCheckTriggerEnd"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.LeakCheckTriggerHold, $"LeakCheckTriggerHold"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.LeakCheckTriggerJumpStep, $"LeakCheckTriggerJumpStep"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.LeakCheckTriggerCallAlarmRecipe, $"LeakCheckTriggerCallAlarmRecipe"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.LeakCheckTriggerCallAbortRecipe, $"LeakCheckTriggerCallAbortRecipe"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.ManualTriggerRecipeHold, $"ManualTriggerRecipeHold"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.ManualTriggerRecipeRelease, $"ManualTriggerRecipeRelease"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.ManualTriggerRecipeSkip, $"ManualTriggerRecipeSkip"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.ManualTriggerRecipeJump, $"ManualTriggerRecipeJump"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.ManualTriggerRecipeAbort, $"ManualTriggerRecipeAbort"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeTriggerReset, $"RecipeTriggerReset"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeTriggerEnd, $"RecipeTriggerEnd"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeTriggerHold, $"RecipeTriggerHold"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeTriggerLeakCheck, $"RecipeTriggerLeakCheck"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeTriggerJumpStep, $"RecipeTriggerJumpStep"));
+            EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeTriggerCallSubRecipe, $"RecipeTriggerCallSubRecipe"));
+
+
             //EV.Subscribe(new EventItem("Event", PM2RecipeStart, PM2RecipeStart));
             //EV.Subscribe(new EventItem("Event", PM2RecipeComplete, PM2RecipeComplete));
             //EV.Subscribe(new EventItem("Event", PM2RecipeStepStart, PM2RecipeStepStart));
@@ -122,16 +148,17 @@ namespace FurnaceRT.Equipments.PMs
             {
                 {DVIDName.RecipeID,  recipeName},
                 {DVIDName.StationName,  module},
-                {"ProcessWaferIdList",  _fdcwaferList},
-                {"ProcessCarrierIDList",  _fdccridlst},
-                {"ProcessLotIdList",  _fdcLotIds},
+                {DataVariables.ProcessWaferIdList,  module},
+                {DataVariables.ProcessWaferIdList,  _fdcwaferList},
+                {DataVariables.ProcessCarrierIDList,  _fdccridlst},
+                {DataVariables.ProcessLotIdList,  _fdcLotIds},
             });
         }
 
         public void RecipeFailed(string module, string recipeName)
         {
             ModuleName moduleName = ModuleHelper.Converter(module);
-            EV.Notify(PMRecipeFailed[moduleName], new SerializableDictionary<string, string>()
+            EV.Notify(PMRecipeFailed[moduleName], new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
                 {DVIDName.StationName,  module},
@@ -186,16 +213,16 @@ namespace FurnaceRT.Equipments.PMs
             {
                 {DVIDName.RecipeID,  recipeName},
                 {DVIDName.StationName,  module},
-                {"ProcessWaferIdList",  _fdcwaferList},
-                {"ProcessCarrierIDList",  _fdccridlst},
-                {"ProcessLotIdList",  _fdcLotIds},
+                {DataVariables.ProcessWaferIdList,  _fdcwaferList},
+                {DataVariables.ProcessCarrierIDList,  _fdccridlst},
+                {DataVariables.ProcessLotIdList,  _fdcLotIds},
             });
         }
 
         public void RecipeStepEnd(string module, string recipeName, int stepNumber)
         {
             ModuleName moduleName = ModuleHelper.Converter(module);
-            EV.Notify(PMRecipeStepEnd[moduleName], new SerializableDictionary<string, string>()
+            EV.Notify(PMRecipeStepEnd[moduleName], new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
                 {DVIDName.StationName,  module},
@@ -206,104 +233,253 @@ namespace FurnaceRT.Equipments.PMs
         public void RecipeStepStart(string module, string recipeName, int stepNumber)
         {
             ModuleName moduleName = ModuleHelper.Converter(module);
-            EV.Notify(PMRecipeStepStart[moduleName], new SerializableDictionary<string, string>()
+            EV.Notify(PMRecipeStepStart[moduleName], new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
                 {DVIDName.StationName,  module},
                 {DVIDName.RecipeStepNumber,  (stepNumber+1).ToString()},
             });
         }
+        #region 子事件上报
 
+        public void AlarmConditionTriggerReset(string module, string recipeName, int stepNumber, string otherRecipeName)
+        {
+            EV.Notify(UniversalEvents.AlarmConditionTriggerReset, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+                {DVIDName.RecipeName, otherRecipeName},
+            });
+        }
+        public void AlarmConditionTriggerEnd(string module, string recipeName, int stepNumber)
+        {
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.AlarmConditionTriggerEnd, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+            });
+        }
+        public void AlarmConditionTriggerHold(string module, string recipeName, int stepNumber)
+        {
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.AlarmConditionTriggerHold, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+            });
+        }
+        public void AlarmConditionTriggerJumpStep(string module, string recipeName, int stepNumber, int stepId)
+        {
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.AlarmConditionTriggerJumpStep, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+                {DataVariables.StepId, stepId},
+            });
+        }
+        public void AlarmConditionTriggerCallAlarmRecipe(string module, string recipeName, int stepNumber, string otherRecipeName)
+        {
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.AlarmConditionTriggerCallAlarmRecipe, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+                {DVIDName.RecipeName, otherRecipeName},
+            });
+        }
+        public void AlarmConditionTriggerCallAbortRecipe(string module, string recipeName, int stepNumber, string otherRecipeName)
+        {
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.AlarmConditionTriggerCallAbortRecipe, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+                {DVIDName.RecipeName, otherRecipeName},
+            });
+        }
 
-        public void RecipeHold(string module, string recipeName, string recipeStep)
+        public void LeakCheckTriggerReset(string module, string recipeName, int stepNumber, string otherRecipeName)
         {
-            EV.Notify(UniversalEvents.RecipeHold, new SerializableDictionary<string, string>()
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.LeakCheckTriggerReset, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+            });
+        }
+        public void LeakCheckTriggerEnd(string module, string recipeName, int stepNumber, string otherRecipeName)
+        {
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.LeakCheckTriggerEnd, new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
-                {"RecID",  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
             });
         }
-        public void RecipeRelease(string module, string recipeName, string recipeStep)
+        public void LeakCheckTriggerHold(string module, string recipeName, int stepNumber, string otherRecipeName)
         {
-            EV.Notify(UniversalEvents.RecipeRelease, new SerializableDictionary<string, string>()
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.LeakCheckTriggerHold, new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
-                    {DataName.NewRecipeStepNumber.ToString(),  recipeStep},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
             });
         }
-        public void RecipeStepSkip(string module, string recipeName, string recipeStep)
+        public void LeakCheckTriggerJumpStep(string module, string recipeName, int stepNumber, int stepId)
         {
-            EV.Notify(UniversalEvents.RecipeStepSkip, new SerializableDictionary<string, string>()
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.LeakCheckTriggerJumpStep, new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
-            {DataName.NewRecipeStepNumber.ToString(),  recipeStep},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+                {DataVariables.StepId, stepId},
             });
         }
 
-        public void RecipeStop(string module, string recipeName, string recipeStep)
+        public void LeakCheckTriggerCallAlarmRecipe(string module, string recipeName, int stepNumber, string otherRecipeName)
         {
-            EV.Notify(UniversalEvents.RecipeStop, new SerializableDictionary<string, string>()
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.LeakCheckTriggerCallAlarmRecipe, new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
-            {DataName.NewRecipeStepNumber.ToString(),  recipeStep},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+                {DVIDName.RecipeName, otherRecipeName},
             });
         }
 
-        public void RecipeJumpStep(string module, string recipeName, string recipeStep, string jumpStpeId)
+        public void LeakCheckTriggerCallAbortRecipe(string module, string recipeName, int stepNumber, string otherRecipeName)
         {
-            EV.Notify(UniversalEvents.RecipeJumpStep, new SerializableDictionary<string, string>()
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.LeakCheckTriggerCallAbortRecipe, new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
-             {DataName.NewRecipeStepNumber.ToString(),  recipeStep},
-                {DataName.StepId.ToString(),  jumpStpeId},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+                {DVIDName.RecipeName, otherRecipeName},
             });
         }
-        public void RecipeAbort(string module, string recipeName, string recipeStep)
+        public void ManualTriggerRecipeHold(string module, string recipeName, int stepNumber, string otherRecipeName)
         {
-            EV.Notify(UniversalEvents.RecipeAbort, new SerializableDictionary<string, string>()
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.ManualTriggerRecipeHold, new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
-                   {DataName.NewRecipeStepNumber.ToString(),  recipeStep},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
             });
         }
 
-        public void RecipeJumpEnd(string module, string recipeName, string recipeStep, string jumpStpeId)
+        public void ManualTriggerRecipeRelease(string module, string recipeName, int stepNumber, string otherRecipeName)
         {
-            EV.Notify(UniversalEvents.RecipeJumpEnd, new SerializableDictionary<string, string>()
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.ManualTriggerRecipeRelease, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+            });
+        }
+        public void ManualTriggerRecipeSkip(string module, string recipeName, int stepNumber, string otherRecipeName)
+        {
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.ManualTriggerRecipeSkip, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+            });
+        }
+        public void ManualTriggerRecipeJump(string module, string recipeName, int stepNumber, int stepId)
+        {
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.ManualTriggerRecipeJump, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+                {DataVariables.StepId, stepId},
+            });
+        }
+        public void ManualTriggerRecipeAbort(string module, string recipeName, int stepNumber, string otherRecipeName)
+        {
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.ManualTriggerRecipeAbort, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+                {DVIDName.RecipeName, otherRecipeName},
+            });
+        }
+
+        public void RecipeTriggerReset(string module, string recipeName, int stepNumber, string otherRecipeName)
+        {
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.RecipeTriggerReset, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+                {DVIDName.RecipeName, otherRecipeName},
+            });
+        }
+        public void RecipeTriggerEnd(string module, string recipeName, int stepNumber, string otherRecipeName)
+        {
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.RecipeTriggerEnd, new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
-             {DataName.NewRecipeStepNumber.ToString(),  recipeStep},
-                {DataName.StepId.ToString(),  jumpStpeId},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
             });
         }
 
-        public void RecipeCallAlarmRecipe(string module, string recipeName, string recipeStep, string otherRecipeName)
+        public void RecipeTriggerHold(string module, string recipeName, int stepNumber, string otherRecipeName)
+        {
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.RecipeTriggerHold, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+            });
+        }
+        public void RecipeTriggerLeakCheck(string module, string recipeName, int stepNumber, string otherRecipeName)
         {
-            EV.Notify(UniversalEvents.CallAlarmRecipe, new SerializableDictionary<string, string>()
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.RecipeTriggerLeakCheck, new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
-              {DataName.NewRecipeStepNumber.ToString(),  recipeStep},
-                {DataName.CallRecipeID.ToString(),  otherRecipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
             });
         }
-        public void RecipeCallAbortRecipe(string module, string recipeName, string recipeStep, string otherRecipeName)
+        public void RecipeTriggerJumpStep(string module, string recipeName, int stepNumber, int stepId)
         {
-            EV.Notify(UniversalEvents.CallAbortRecipe, new SerializableDictionary<string, string>()
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.RecipeTriggerJumpStep, new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
-             {DataName.NewRecipeStepNumber.ToString(),  recipeStep},
-                 {DataName.CallRecipeID.ToString(),  otherRecipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+                 {DataVariables.StepId, stepId},
             });
         }
-        public void RecipeRunResetRecipe(string module, string recipeName, string recipeStep, string otherRecipeName)
+
+        public void RecipeTriggerCallSubRecipe(string module, string recipeName, int stepNumber, string otherRecipeName)
         {
-            EV.Notify(UniversalEvents.RunResetRecipe, new SerializableDictionary<string, string>()
+            ModuleName moduleName = ModuleHelper.Converter(module);
+            EV.Notify(UniversalEvents.RecipeTriggerCallSubRecipe, new SerializableDictionary<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
-                {DataName.NewRecipeStepNumber.ToString(),  recipeStep},
-             {DataName.CallRecipeID.ToString(),  otherRecipeName},
+                {DVIDName.RecipeStepNumber, stepNumber.ToString()},
+                {DVIDName.RecipeName, otherRecipeName},
             });
         }
+        public void RecipeAbnormalEnd(string module, string recipeName, int stepNumber)
+        {
+            EV.Notify(UniversalEvents.RecipeAbnormalEnd, new SerializableDictionary<string, object>()
+            {
+                {DVIDName.RecipeID,  recipeName },
+                { DataVariables.ProcessWaferIdList,  ""},
+                { DataVariables.ProcessCarrierIDList,  ""},
+                { DataVariables.ProcessLotIdList,  ""},
+            });
+        }
+
+        #endregion
+
     }
 }
 

+ 1 - 11
Furnace/FurnaceRT/Equipments/Schedulers/SchedulerFACallback.cs

@@ -98,17 +98,7 @@ namespace FurnaceRT.Equipments.Schedulers
                 EV.Subscribe(new EventItem("Event", UniversalEvents.SideDummyStateWarning, $"SideDummyStateWarning"));
                 EV.Subscribe(new EventItem("Event", UniversalEvents.ExtraDummyStateWarning, $"ExtraDummyStateWarning"));
 
-                EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeStop, $"RecipeStop"));
-                EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeHold, $"RecipeHold"));
-                EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeRelease, $"RecipeRelease"));
-                EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeJumpStep, $"RecipeJumpStep"));
-                EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeJumpEnd, $"RecipeJumpEnd"));
-                EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeAbort, $"RecipeAbort"));
-                EV.Subscribe(new EventItem("Event", UniversalEvents.CallAlarmRecipe, $"CallAlarmRecipe"));
-                EV.Subscribe(new EventItem("Event", UniversalEvents.CallAbortRecipe, $"CallAbortRecipe"));
-                EV.Subscribe(new EventItem("Event", UniversalEvents.RunResetRecipe, $"RunResetRecipe"));
-                EV.Subscribe(new EventItem("Event", UniversalEvents.RecipeStepSkip, $"RecipeStepSkip"));
-
+            
 
 
                 PortId[module] = i.ToString();

+ 1 - 0
Furnace/FurnaceRT/FAs/VIDMap.cs

@@ -28,5 +28,6 @@ namespace FurnaceRT.FAs
         public const string SequenceID = "SequenceID";
         public const string StationName = "StationName";
         public const string RecipeStepNumber = "RecipeStepNumber";
+        public const string RecipeName = "RecipeName";
     }
 }