Browse Source

PM工艺事件上报

JET-JJY 2 weeks ago
parent
commit
55942603d3

+ 6 - 0
Furnace/FurnaceRT/Config/System.sccfg

@@ -4440,6 +4440,12 @@
 	<configs name="LoadPort">
 		<config default="Lower" name="LoadPortPosition" description="LoadPort Position" max="" min="" paramter="Upper;Lower"  tag="ReadOnlySelection" unit="" type="String" visible="false"/>
 		<config default="25" name="SlotCount" description="Slot Count" max="30" min="1" paramter="" tag="" unit="" visible="false"  type="Integer" />
+
+		<config default="1" name="DataReadSize" description="RFID Read Size" max="16" min="1" paramter="" tag="" unit="" type="Integer" visible="false" />
+		<config default="1" name="StartPage" description="RFID Read Start Page" max="16" min="1" paramter="" tag="" unit="" type="Integer" visible="false" />
+		<config default="1" name="DefaultPage" description="RFID Read Start Page" max="16" min="1" paramter="" tag="" unit="" type="Integer" visible="false" />
+		<config default="true" name="CarrierIDReaderInUse" description="CarrierIDReaderInUse" max="0" min="0" paramter="" tag="" unit="" type="Bool" visible="false"/>
+
 		<configs name="LoadPortSwitch" visible="false">
 			<config default="true" name="AccessSwitchPressedBeforeCarrierIn"  description="Access Switch Pressed Before Carrier In" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
 			<config default="true" name="AccessSwitchPressedAfterCarrierIn"  description="M Wafer Count After Process" max="0" min="0" paramter="" tag="" unit="" type="Bool" />

+ 8 - 0
Furnace/FurnaceRT/Equipments/Jobs/AutoTransfer.cs

@@ -969,6 +969,7 @@ namespace FurnaceRT.Equipments.Jobs
                         {
                             pj.SetState(EnumProcessJobState.ProcessingComplete);
                             JobDataRecorder.EndPJ(pj.InnerId.ToString(), 0, 0);
+                            _faCallback.EndDischarge(pj);
                             var pmModule = Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule;
                             pmModule?.SetN2PurgeLAO2CheckFirstEnable(false);
                             pmModule?.SetN2PurgeProcess(false);
@@ -1522,6 +1523,7 @@ namespace FurnaceRT.Equipments.Jobs
                 {
                     _dbCallback.PjCreated(pj);
                     _dbCallback.PjStart();
+                    _faCallback.StartCharge(pj);
                     pm.Standby(pj.ProcessRecipe);
                     pj.IsStandbyStarted = true;
                 }
@@ -6360,6 +6362,10 @@ namespace FurnaceRT.Equipments.Jobs
                     }
 
                     pj.ProcessingState = EnumProcessingState.Processing;
+
+                    var _boatslotmap = GetBoatSlotMap();
+                    _faCallback.EndCharge(pj, _boatslotmap);
+
                     pmModule?.SetN2PurgeLAO2CheckFirstEnable(false);
                     if (pm.Process((string)pj.ProcessRecipe, false, true))
                         return;
@@ -6415,6 +6421,8 @@ namespace FurnaceRT.Equipments.Jobs
                             _coolTimer.Stop();
                             AdjustDischargeSlots();
                             pj.ProcessingState = EnumProcessingState.Discharging;
+                            var _boatslotmap = GetBoatSlotMap();
+                            _faCallback.StartDischarge(pj, _boatslotmap);
                             LOG.Write($"Cooling completed {pj.CoolTimeSec}");
                             if (pj.IsN2PurgeMode)
                             {

+ 40 - 16
Furnace/FurnaceRT/Equipments/PMs/RecipeFACallback.cs

@@ -7,22 +7,25 @@ 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 = "PM1RecipeStart";
-        private const string PM1RecipeComplete = "PM1RecipeComplete";
-        private const string PM1RecipeStepStart = "PM1RecipeStepStart";
-        private const string PM1RecipeStepEnd = "PM1RecipeStepEnd";
-        private const string PM1RecipeFailed = "PM1RecipeFailed";
+        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 = "PM2RecipeStart";
-        private const string PM2RecipeComplete = "PM2RecipeComplete";
-        private const string PM2RecipeStepStart = "PM2RecipeStepStart";
-        private const string PM2RecipeStepEnd = "PM2RecipeStepEnd";
-        private const string PM2RecipeFailed = "PM2RecipeFailed";
+        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>()
         {
@@ -60,11 +63,11 @@ namespace FurnaceRT.Equipments.PMs
             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));
+            //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));
 
         }
 
@@ -91,10 +94,31 @@ namespace FurnaceRT.Equipments.PMs
         public void RecipeStart(string module, string recipeName)
         {
             ModuleName moduleName = ModuleHelper.Converter(module);
-            EV.Notify(PMRecipeStart[moduleName], new SerializableDictionary<string, string>()
+            var wafers = WaferManager.Instance.GetWafers(ModuleName.PM1);
+            List<string> fdcwafers = new List<string>();
+            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<string, object>()
             {
                 {DVIDName.RecipeID,  recipeName},
                 {DVIDName.StationName,  module},
+                {"ProcessCarrierIDList",  _fdccridlst},
             });
         }
 

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

@@ -546,7 +546,7 @@ namespace FurnaceRT.Equipments.Schedulers
             dvid["CarrierID"] = carrier.CarrierId;
 
             EV.Notify("SLOT_MAP_AVAILABLE", dvid);
-           Singleton<FAJobController>.Instance.Eqp_NoteCarrierSlotMapRead(carrier.PortID, slotMap);
+            Singleton<FAJobController>.Instance.Eqp_NoteCarrierSlotMapRead(carrier.PortID, slotMap, carrier.CarrierId);
             CarrierInEnd(carrier);
         }
 

BIN
Furnace/FurnaceRT/dependence/MECF.Framework.MyFA.Core.dll