| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 | 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<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()},            });        }    }}
 |