Browse Source

自动填充逻辑中,如果填充完p后,剩余dumy不够,报警,不可以下Job

jiangjy 2 weeks ago
parent
commit
da1bddebde
1 changed files with 20 additions and 6 deletions
  1. 20 6
      Furnace/FurnaceRT/Equipments/Jobs/AutoTransfer.cs

+ 20 - 6
Furnace/FurnaceRT/Equipments/Jobs/AutoTransfer.cs

@@ -4667,6 +4667,7 @@ namespace FurnaceRT.Equipments.Jobs
             return slots;
             return slots;
         }
         }
         #region charge rule
         #region charge rule
+      
         private bool CheckChargeRule(ProcessJobInfo pj, out bool waferShort, bool needCheckPWafer, bool needCheckMWafer, out string reason)
         private bool CheckChargeRule(ProcessJobInfo pj, out bool waferShort, bool needCheckPWafer, bool needCheckMWafer, out string reason)
         {
         {
             waferShort = false;
             waferShort = false;
@@ -4700,7 +4701,7 @@ namespace FurnaceRT.Equipments.Jobs
             var monitor2Slots = GetWaferSlots(layoutRecipeDataExpert, WaferType.M2);
             var monitor2Slots = GetWaferSlots(layoutRecipeDataExpert, WaferType.M2);
             var sideDummySlots = GetWaferSlots(layoutRecipeDataExpert, WaferType.SD);
             var sideDummySlots = GetWaferSlots(layoutRecipeDataExpert, WaferType.SD);
             var extraDummySlots = GetWaferSlots(layoutRecipeDataExpert, WaferType.ED);
             var extraDummySlots = GetWaferSlots(layoutRecipeDataExpert, WaferType.ED);
-
+            bool isFileDumy = false;
             if (layoutRecipeDataConfig.FillDummyTransfer.ToLower() == "exist" && layoutRecipeDataConfig.ProductZeroNotFill.ToLower() == "exist" && layoutRecipeDataConfig.ProductTransferPosition.ToLower() == "none")
             if (layoutRecipeDataConfig.FillDummyTransfer.ToLower() == "exist" && layoutRecipeDataConfig.ProductZeroNotFill.ToLower() == "exist" && layoutRecipeDataConfig.ProductTransferPosition.ToLower() == "none")
             {
             {
                 var pjPWaferCount = GetCurrentWaferNum(pj, WaferType.P, out bool pSlotSelectA);
                 var pjPWaferCount = GetCurrentWaferNum(pj, WaferType.P, out bool pSlotSelectA);
@@ -4718,10 +4719,19 @@ namespace FurnaceRT.Equipments.Jobs
                 if (needPAndCurrect > 0)
                 if (needPAndCurrect > 0)
                 {
                 {
                     //判断dumy是否够补充p类型
                     //判断dumy是否够补充p类型
-                    var edAndSdComparePWafer = (currentSDWaferNum + currentEDWaferNum) >= needPAndCurrect;
-                    if (edAndSdComparePWafer)
+                    var surplusDumyCount = (currentSDWaferNum + currentEDWaferNum) - needPAndCurrect;
+                    if (surplusDumyCount >= 0)
                     {
                     {
+                        //判断剩余dumy是否足够Layout配置
+                        if (surplusDumyCount < (extraDummySlots.Count + sideDummySlots.Count))
+                        {
+                            reason = $"layout recipe P waferNumber={productSlots.Count},  " +
+                                $"select P waferNumber={pjPWaferCount},current SD waferNumber={currentSDWaferNum},current ED Wafer {currentEDWaferNum}," +
+                                $"supplement P wafer {needPAndCurrect}, surplusDumyCount={surplusDumyCount},Not enough dummy ";
+                            return false;
+                        }
 
 
+                        isFileDumy = true;
                         for (int i = 0; i < layoutRecipeDataExpert.Items.Count; i++)
                         for (int i = 0; i < layoutRecipeDataExpert.Items.Count; i++)
                         {
                         {
                             if (layoutRecipeDataExpert.Items[i].ToLower() == WaferType.P.ToDescription())
                             if (layoutRecipeDataExpert.Items[i].ToLower() == WaferType.P.ToDescription())
@@ -4861,14 +4871,14 @@ namespace FurnaceRT.Equipments.Jobs
             if (!needCheckPWafer)
             if (!needCheckPWafer)
                 return true;
                 return true;
 
 
-            if (iNeedPWaferNum > iCurrentPWaferNum)
+            if (!isFileDumy && iNeedPWaferNum > iCurrentPWaferNum)
             {
             {
                 reason = "layout recipe production wafer number greater than current production wafer number";
                 reason = "layout recipe production wafer number greater than current production wafer number";
 
 
                 return false;
                 return false;
             }
             }
 
 
-            if (pSlotSelect && iNeedPWaferNum != iCurrentPWaferNum)
+            if (!isFileDumy && pSlotSelect && iNeedPWaferNum != iCurrentPWaferNum)
             {
             {
                 reason = $"layout recipe production wafer number={iNeedPWaferNum},  current production wafer number={iCurrentPWaferNum}, not match";
                 reason = $"layout recipe production wafer number={iNeedPWaferNum},  current production wafer number={iCurrentPWaferNum}, not match";
 
 
@@ -6644,8 +6654,12 @@ namespace FurnaceRT.Equipments.Jobs
                             isProcessed = true;
                             isProcessed = true;
                     }
                     }
                 }
                 }
+                var asd = CheckChargeFinished(pj, pm.Module);
+                if (asd)
+                {
 
 
-                if (isNeedProcess && CheckChargeFinished(pj, pm.Module) && pj.ProcessingState != EnumProcessingState.Processing &&
+                }
+                if (isNeedProcess && asd && pj.ProcessingState != EnumProcessingState.Processing &&
                     pmModule.CheckStandbyCondition() && pm.IsAvailable)
                     pmModule.CheckStandbyCondition() && pm.IsAvailable)
                 {
                 {
                     if (SC.GetValue<bool>("System.IsEnableBoatChargeMapping") && !pj.IsMapAfterCharge)
                     if (SC.GetValue<bool>("System.IsEnableBoatChargeMapping") && !pj.IsMapAfterCharge)