using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Aitex.Core.RT.Event; using Aitex.Core.Util; using MECF.Framework.Common.Equipment; using FurnaceRT.FAs; using Aitex.Core.Common; using FabConnect.SecsGemInterface.Common; using MECF.Framework.Common.SubstrateTrackings; namespace FurnaceRT.Equipments.PMs { public class RecipeFACallback : IRecipeFACallback { private const string PM1RecipeStart = "RecipeStart"; private const string PM1RecipeComplete = "RecipeComplete"; private const string PM1RecipeStepStart = "RecipeStepStart"; private const string PM1RecipeStepEnd = "RecipeStepEnd"; private const string PM1RecipeFailed = "RecipeFailed"; private const string PM2RecipeStart = "RecipeStart"; private const string PM2RecipeComplete = "RecipeComplete"; private const string PM2RecipeStepStart = "RecipeStepStart"; private const string PM2RecipeStepEnd = "RecipeStepEnd"; private const string PM2RecipeFailed = "RecipeFailed"; private Dictionary PMRecipeStart = new Dictionary() { {ModuleName.PM1, PM1RecipeStart}, {ModuleName.PM2, PM2RecipeStart}, }; private Dictionary PMRecipeComplete = new Dictionary() { {ModuleName.PM1, PM1RecipeComplete}, {ModuleName.PM2, PM2RecipeComplete}, }; private Dictionary PMRecipeStepStart = new Dictionary() { {ModuleName.PM1, PM1RecipeStepStart}, {ModuleName.PM2, PM2RecipeStepStart}, }; private Dictionary PMRecipeStepEnd = new Dictionary() { {ModuleName.PM1, PM1RecipeStepEnd}, {ModuleName.PM2, PM2RecipeStepEnd}, }; private Dictionary PMRecipeFailed = new Dictionary() { {ModuleName.PM1, PM1RecipeFailed}, {ModuleName.PM2, PM2RecipeFailed}, }; public RecipeFACallback() { EV.Subscribe(new EventItem("Event", PM1RecipeStart, PM1RecipeStart)); EV.Subscribe(new EventItem("Event", PM1RecipeComplete, PM1RecipeComplete)); EV.Subscribe(new EventItem("Event", PM1RecipeStepStart, PM1RecipeStepStart)); EV.Subscribe(new EventItem("Event", PM1RecipeStepEnd, PM1RecipeStepEnd)); EV.Subscribe(new EventItem("Event", PM1RecipeFailed, PM1RecipeFailed)); //EV.Subscribe(new EventItem("Event", PM2RecipeStart, PM2RecipeStart)); //EV.Subscribe(new EventItem("Event", PM2RecipeComplete, PM2RecipeComplete)); //EV.Subscribe(new EventItem("Event", PM2RecipeStepStart, PM2RecipeStepStart)); //EV.Subscribe(new EventItem("Event", PM2RecipeStepEnd, PM2RecipeStepEnd)); //EV.Subscribe(new EventItem("Event", PM2RecipeFailed, PM2RecipeFailed)); } public void RecipeComplete(string module, string recipeName) { ModuleName moduleName = ModuleHelper.Converter(module); EV.Notify(PMRecipeComplete[moduleName], new SerializableDictionary() { {DVIDName.RecipeID, recipeName}, {DVIDName.StationName, module}, }); } public void RecipeFailed(string module, string recipeName) { ModuleName moduleName = ModuleHelper.Converter(module); EV.Notify(PMRecipeFailed[moduleName], new SerializableDictionary() { {DVIDName.RecipeID, recipeName}, {DVIDName.StationName, module}, }); } public void RecipeStart(string module, string recipeName) { ModuleName moduleName = ModuleHelper.Converter(module); var wafers = WaferManager.Instance.GetWafers(ModuleName.PM1); List fdcwafers = new List(); if (wafers != null) { foreach (var wafer in wafers) { if (wafer.WaferType == WaferType.P || wafer.WaferType == WaferType.M1 || wafer.WaferType == WaferType.M2) { if (!(fdcwafers.Contains(wafer.OriginCarrierID))) { fdcwafers.Add(wafer.OriginCarrierID); } } } } SECsDataItem _fdccridlst = new SECsDataItem(SECsFormat.List); foreach (var fdcid in fdcwafers) { _fdccridlst.Add("CRID", fdcid, SECsFormat.Ascii); } EV.Notify(PMRecipeStart[moduleName], new SerializableDictionary() { {DVIDName.RecipeID, recipeName}, {DVIDName.StationName, module}, {"ProcessCarrierIDList", _fdccridlst}, }); } public void RecipeStepEnd(string module, string recipeName, int stepNumber) { ModuleName moduleName = ModuleHelper.Converter(module); EV.Notify(PMRecipeStepEnd[moduleName], new SerializableDictionary() { {DVIDName.RecipeID, recipeName}, {DVIDName.StationName, module}, {DVIDName.RecipeStepNumber, (stepNumber+1).ToString()}, }); } public void RecipeStepStart(string module, string recipeName, int stepNumber) { ModuleName moduleName = ModuleHelper.Converter(module); EV.Notify(PMRecipeStepStart[moduleName], new SerializableDictionary() { {DVIDName.RecipeID, recipeName}, {DVIDName.StationName, module}, {DVIDName.RecipeStepNumber, (stepNumber+1).ToString()}, }); } } }