| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 | 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;using MECF.Framework.Common.FAServices;using static MECF.Framework.Common.FAServices.DataVariables;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<ModuleName, string> PMRecipeStart = new Dictionary<ModuleName, string>()        {            {ModuleName.PM1, PM1RecipeStart},            {ModuleName.PM2, PM2RecipeStart},        };        private Dictionary<ModuleName, string> PMRecipeComplete = new Dictionary<ModuleName, string>()        {            {ModuleName.PM1, PM1RecipeComplete},            {ModuleName.PM2, PM2RecipeComplete},        };        private Dictionary<ModuleName, string> PMRecipeStepStart = new Dictionary<ModuleName, string>()        {            {ModuleName.PM1, PM1RecipeStepStart},            {ModuleName.PM2, PM2RecipeStepStart},        };        private Dictionary<ModuleName, string> PMRecipeStepEnd = new Dictionary<ModuleName, string>()        {            {ModuleName.PM1, PM1RecipeStepEnd},            {ModuleName.PM2, PM2RecipeStepEnd},        };        private Dictionary<ModuleName, string> PMRecipeFailed = new Dictionary<ModuleName, string>()        {            {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);            var wafers = WaferManager.Instance.GetWafers(ModuleName.PM1);            List<string> fdcwafers = new List<string>();            List<string> fdcCarriers = new List<string>();            List<string> fdcLotIds = new List<string>();            if (wafers != null)            {                foreach (var wafer in wafers)                {                    if (!(fdcCarriers.Contains(wafer.OriginCarrierID)))                    {                        fdcCarriers.Add(wafer.OriginCarrierID);                    }                    if (!(fdcwafers.Contains(wafer.WaferID)))                    {                        fdcwafers.Add(wafer.WaferID);                    }                    if (!(fdcLotIds.Contains(wafer.LotId)))                    {                        fdcLotIds.Add(wafer.LotId);                    }                }            }            SECsDataItem _fdccridlst = new SECsDataItem(SECsFormat.List);            foreach (var fdcid in fdcCarriers)            {                _fdccridlst.Add("CRID", fdcid, SECsFormat.Ascii);            }            SECsDataItem _fdcwaferList = new SECsDataItem(SECsFormat.List);            foreach (var fdcid in fdcwafers)            {                _fdcwaferList.Add("CRID", fdcid, SECsFormat.Ascii);            }            SECsDataItem _fdcLotIds = new SECsDataItem(SECsFormat.List);            foreach (var fdcid in fdcLotIds)            {                _fdcLotIds.Add("CRID", fdcid, SECsFormat.Ascii);            }            EV.Notify(PMRecipeComplete[moduleName], new SerializableDictionary<string, object>()            {                {DVIDName.RecipeID,  recipeName},                {DVIDName.StationName,  module},                {"ProcessWaferIdList",  _fdcwaferList},                {"ProcessCarrierIDList",  _fdccridlst},                {"ProcessLotIdList",  _fdcLotIds},            });        }        public void RecipeFailed(string module, string recipeName)        {            ModuleName moduleName = ModuleHelper.Converter(module);            EV.Notify(PMRecipeFailed[moduleName], new SerializableDictionary<string, string>()            {                {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<string> fdcwafers = new List<string>();            List<string> fdcCarriers = new List<string>();            List<string> fdcLotIds = new List<string>();            if (wafers != null)            {                foreach (var wafer in wafers)                {                    if (!(fdcCarriers.Contains(wafer.OriginCarrierID)))                    {                        fdcCarriers.Add(wafer.OriginCarrierID);                    }                    if (!(fdcwafers.Contains(wafer.WaferID)))                    {                        fdcwafers.Add(wafer.WaferID);                    }                    if (!(fdcLotIds.Contains(wafer.LotId)))                    {                        fdcLotIds.Add(wafer.LotId);                    }                }            }            SECsDataItem _fdccridlst = new SECsDataItem(SECsFormat.List);            foreach (var fdcid in fdcCarriers)            {                _fdccridlst.Add("CRID", fdcid, SECsFormat.Ascii);            }            SECsDataItem _fdcwaferList = new SECsDataItem(SECsFormat.List);            foreach (var fdcid in fdcwafers)            {                _fdcwaferList.Add("CRID", fdcid, SECsFormat.Ascii);            }            SECsDataItem _fdcLotIds = new SECsDataItem(SECsFormat.List);            foreach (var fdcid in fdcLotIds)            {                _fdcLotIds.Add("CRID", fdcid, SECsFormat.Ascii);            }            EV.Notify(PMRecipeStart[moduleName], new SerializableDictionary<string, object>()            {                {DVIDName.RecipeID,  recipeName},                {DVIDName.StationName,  module},                {"ProcessWaferIdList",  _fdcwaferList},                {"ProcessCarrierIDList",  _fdccridlst},                {"ProcessLotIdList",  _fdcLotIds},            });        }        public void RecipeStepEnd(string module, string recipeName, int stepNumber)        {            ModuleName moduleName = ModuleHelper.Converter(module);            EV.Notify(PMRecipeStepEnd[moduleName], new SerializableDictionary<string, string>()            {                {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<string, string>()            {                {DVIDName.RecipeID,  recipeName},                {DVIDName.StationName,  module},                {DVIDName.RecipeStepNumber,  (stepNumber+1).ToString()},            });        }        public void RecipeHold(string module, string recipeName, string recipeStep)        {            EV.Notify(UniversalEvents.RecipeHold, new SerializableDictionary<string, string>()            {                {DVIDName.RecipeID,  recipeName},                {"RecID",  recipeName},            });        }        public void RecipeRelease(string module, string recipeName, string recipeStep)        {            EV.Notify(UniversalEvents.RecipeRelease, new SerializableDictionary<string, string>()            {                {DVIDName.RecipeID,  recipeName},                    {DataName.NewRecipeStepNumber.ToString(),  recipeStep},            });        }        public void RecipeStepSkip(string module, string recipeName, string recipeStep)        {            EV.Notify(UniversalEvents.RecipeStepSkip, new SerializableDictionary<string, string>()            {                {DVIDName.RecipeID,  recipeName},            {DataName.NewRecipeStepNumber.ToString(),  recipeStep},            });        }        public void RecipeStop(string module, string recipeName, string recipeStep)        {            EV.Notify(UniversalEvents.RecipeStop, new SerializableDictionary<string, string>()            {                {DVIDName.RecipeID,  recipeName},            {DataName.NewRecipeStepNumber.ToString(),  recipeStep},            });        }        public void RecipeJumpStep(string module, string recipeName, string recipeStep, string jumpStpeId)        {            EV.Notify(UniversalEvents.RecipeJumpStep, new SerializableDictionary<string, string>()            {                {DVIDName.RecipeID,  recipeName},             {DataName.NewRecipeStepNumber.ToString(),  recipeStep},                {DataName.StepId.ToString(),  jumpStpeId},            });        }        public void RecipeAbort(string module, string recipeName, string recipeStep)        {            EV.Notify(UniversalEvents.RecipeAbort, new SerializableDictionary<string, string>()            {                {DVIDName.RecipeID,  recipeName},                   {DataName.NewRecipeStepNumber.ToString(),  recipeStep},            });        }        public void RecipeJumpEnd(string module, string recipeName, string recipeStep, string jumpStpeId)        {            EV.Notify(UniversalEvents.RecipeJumpEnd, new SerializableDictionary<string, string>()            {                {DVIDName.RecipeID,  recipeName},             {DataName.NewRecipeStepNumber.ToString(),  recipeStep},                {DataName.StepId.ToString(),  jumpStpeId},            });        }        public void RecipeCallAlarmRecipe(string module, string recipeName, string recipeStep, string otherRecipeName)        {            EV.Notify(UniversalEvents.CallAlarmRecipe, new SerializableDictionary<string, string>()            {                {DVIDName.RecipeID,  recipeName},              {DataName.NewRecipeStepNumber.ToString(),  recipeStep},                {DataName.CallRecipeID.ToString(),  otherRecipeName},            });        }        public void RecipeCallAbortRecipe(string module, string recipeName, string recipeStep, string otherRecipeName)        {            EV.Notify(UniversalEvents.CallAbortRecipe, new SerializableDictionary<string, string>()            {                {DVIDName.RecipeID,  recipeName},             {DataName.NewRecipeStepNumber.ToString(),  recipeStep},                 {DataName.CallRecipeID.ToString(),  otherRecipeName},            });        }        public void RecipeRunResetRecipe(string module, string recipeName, string recipeStep, string otherRecipeName)        {            EV.Notify(UniversalEvents.RunResetRecipe, new SerializableDictionary<string, string>()            {                {DVIDName.RecipeID,  recipeName},                {DataName.NewRecipeStepNumber.ToString(),  recipeStep},             {DataName.CallRecipeID.ToString(),  otherRecipeName},            });        }    }}
 |