Browse Source

解决冲突

JET-JJY 5 days ago
parent
commit
36ec9fdfec

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

@@ -318,7 +318,6 @@
 			<config default="100" name="SampleInterval" description="interval time collection sample data" max="10000" min="0" paramter="" tag="" unit="ms" type="Integer" />
 			<!--fdc ProcessRecipeStepName与SubName是否去除StepName中的 数字与:-->
 			<config default="true" name="SplitRecipeName" description="Split Recipe Name" max="" min="" paramter="" tag="" unit="" type="Bool"  visible="false"/>
-			<config default="true" name="SplitProcessLog" description="Split Process Log" max="" min="" paramter="" tag="" unit="" type="Bool"  visible="false"/>
 
 
 

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

@@ -92,6 +92,7 @@ namespace FurnaceRT.Equipments.Jobs
         private Dictionary<string, R_TRIG> _logTrigDic = new Dictionary<string, R_TRIG>();
         private Dictionary<string, Tuple<FilterChecker, double>> _fimsCheckOxDensityDict = new Dictionary<string, Tuple<FilterChecker, double>>();
         private bool _isCoolingSkip = false;
+        private R_TRIG r_Trig_DisChargeEndEvent = new R_TRIG();
         public bool HasJobRunning
         {
             get { return _lstControlJobs.Count > 0; }
@@ -1051,12 +1052,16 @@ namespace FurnaceRT.Equipments.Jobs
                     if (pj.State == EnumProcessJobState.Processing)
                     {
                         var pmModule = Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule;
+                        r_Trig_DisChargeEndEvent.CLK = CheckAllWaferReturned(pj, true);
+                        if (r_Trig_DisChargeEndEvent.Q)
+                        {
+                            _faCallback.EndDischarge(pj);
 
+                        }
                         if (CheckAllWaferReturned(pj, true) && pmModule.CheckRecipeIsCompleted(pj))
                         {
                             pj.SetState(EnumProcessJobState.ProcessingComplete);
                             JobDataRecorder.EndPJ(pj.InnerId.ToString(), 0, 0);
-                            _faCallback.EndDischarge(pj);
 
                         }
                     }
@@ -1066,7 +1071,6 @@ namespace FurnaceRT.Equipments.Jobs
                         {
                             pj.SetState(EnumProcessJobState.ProcessingComplete);
                             JobDataRecorder.EndPJ(pj.InnerId.ToString(), 0, 0);
-                            _faCallback.EndDischarge(pj);
 
                         }
                     }
@@ -1347,22 +1351,19 @@ namespace FurnaceRT.Equipments.Jobs
                 return;
             _secondPj = GetSecondlyProcessJobV2();
 
-            ControlJobInfo cjActived = _lstControlJobs.FirstOrDefault(r => r.State == EnumControlJobState.Executing || r.State == EnumControlJobState.Paused);//已有执行cj,不再查找
-            if (cjActived == null)
+            ControlJobInfo cjActived = null;
+            DateTime dtMin = DateTime.MaxValue;
+            foreach (var cj in _lstControlJobs)
             {
-                int level = _lstControlJobs.Max(r => r.PriorityExecuteLevel);
-                DateTime dtMin = DateTime.MaxValue;
-                foreach (var cj in _lstControlJobs)
+                if (cj.State == EnumControlJobState.Completed)
+                    continue;
+                if (cj.CreateTime.CompareTo(dtMin) < 0)
                 {
-                    if (cj.State == EnumControlJobState.Completed || cj.PriorityExecuteLevel < level)//优先级低的先不执行
-                        continue;
-                    if (cj.CreateTime.CompareTo(dtMin) < 0)
-                    {
-                        dtMin = cj.CreateTime;//记录第一个job的创建时间,获取最早的cj
-                        cjActived = cj;
-                    }
+                    dtMin = cj.CreateTime;
+                    cjActived = cj;
                 }
             }
+
             if (cjActived == null)
                 return;
 
@@ -4833,7 +4834,7 @@ namespace FurnaceRT.Equipments.Jobs
                 if (needPAndCurrect > 0)
                 {
                     //判断dumy是否够补充p类型
-                    var surplusDumyCount = (currentEDWaferNum) - needPAndCurrect;
+                    var surplusDumyCount = ( currentEDWaferNum) - needPAndCurrect;
                     if (surplusDumyCount >= 0)
                     {
                         //判断剩余dumy是否足够Layout配置
@@ -4861,7 +4862,7 @@ namespace FurnaceRT.Equipments.Jobs
                                         currentEDWaferNum--;
                                         needPAndCurrect--;
                                     }
-
+                                  
                                 }
                             }
                         }
@@ -4888,7 +4889,7 @@ namespace FurnaceRT.Equipments.Jobs
                                             currentEDWaferNum--;
                                             needPAndCurrect--;
                                         }
-
+                                        
                                     }
                                 }
                             }
@@ -6837,6 +6838,7 @@ namespace FurnaceRT.Equipments.Jobs
                             isProcessed = true;
                     }
                 }
+                var asd = CheckChargeFinished(pj, pm.Module);
 
                 if (isNeedProcess && CheckChargeFinished(pj, pm.Module) && pj.ProcessingState != EnumProcessingState.Processing &&
                     pmModule.CheckStandbyCondition() && pm.IsAvailable)
@@ -6863,8 +6865,7 @@ namespace FurnaceRT.Equipments.Jobs
                     _faCallback.EndCharge(pj, _boatslotmap);
 
                     pmModule?.SetN2PurgeLAO2CheckFirstEnable(false);
-                   
-                    if (pm.Process((string)pj.ProcessRecipe, false, true, pj.IsJobAutoStartTrigger))
+                    if (pm.Process((string)pj.ProcessRecipe, false, true))
                         return;
                 }
 

+ 2 - 2
Furnace/FurnaceRT/Equipments/PMs/PMModule.cs

@@ -1809,8 +1809,8 @@ namespace FurnaceRT.Equipments.PMs
         {
             DATA.Subscribe($"DryClearCount", () => _dryClearCount);
             DATA.Subscribe($"BoatCurrentFilmThickness", () => _currentFilmThickness);
-            DATA.Subscribe($"ProcessRecipeStepNumber", () => IsProcessing ? _processRecipeStepNumber : "");
-            DATA.Subscribe($"ProcessRecipeStepName", () => IsProcessing ? _processRecipeStepName : "");
+            DATA.Subscribe($"ProcessRecipeStepNumber", () => IsProcessing ? _processRecipeStepNumber : "None");
+            DATA.Subscribe($"ProcessRecipeStepName", () => IsProcessing ? _processRecipeStepName : "None");
             DATA.Subscribe($"SubRecipeStepName", () => _subRecipeStepName);
             DATA.Subscribe($"SubRecipeStepNumber", () => _subRecipeStepNumber);
             //DATA.Subscribe($"IsInSubProcessing", () => _isInSubProcessing);

+ 11 - 4
Furnace/FurnaceRT/Equipments/PMs/PMScheduleMaintenance.cs

@@ -252,16 +252,17 @@ namespace FurnaceRT.Equipments.PMs
             if (item != null && item.Item == MaintenanceItemEnum.BoatRecipeThickness1.ToString())
             {
                 var currentValue = Singleton<ScheduleMaintenanceDataManager>.Instance.GetItem(item.Item).CurrentValue;
-                if ((currentValue + thickness) <= 0)
+                var newData = (currentValue + thickness);
+                if (newData <= 0)
                 {
                     Singleton<ScheduleMaintenanceDataManager>.Instance.SetValue(item.Item, 0);
                     currentValue = 0;
                 }
                 else
                 {
-                    Singleton<ScheduleMaintenanceDataManager>.Instance.Increase(item.Item, thickness);
+                    Singleton<ScheduleMaintenanceDataManager>.Instance.SetValue(item.Item, newData);
                 }
-                SetCurrentFilmThickness(currentValue);
+                SetCurrentFilmThickness(newData);
 
             }
         }
@@ -348,8 +349,14 @@ namespace FurnaceRT.Equipments.PMs
                     continue;
 
                 Singleton<ScheduleMaintenanceDataManager>.Instance.Increase(item.Item);
-            }
+                if (item.Item == MaintenanceItemEnum.RecipeStepExecuteFreq2.ToString())
+                {
+                    var currentValue = Singleton<ScheduleMaintenanceDataManager>.Instance.GetItem(item.Item).CurrentValue;
+                    SetDryClearCount(currentValue);
 
+                }
+
+            }
         }
         /// <summary>
         /// 根据RecipeName统计 Recipe执行 累计次数

+ 11 - 25
Furnace/FurnaceRT/Equipments/PMs/RecipeExecutions/Process.cs

@@ -71,6 +71,7 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
         private double _curStepElpasedTimeBeforePaused;
 
         private double _holdTimeElpasedTime;
+        private bool _hasItBeenTriggeredRecipeComplete;
 
         private double _waferTimeElpasedTimeBeforPaused;
         //Add by SSH,20250930,判断recipe是否执行结束,给job使用
@@ -315,6 +316,7 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
 
             WaferManager.Instance.UpdateWaferProcessStatus(ModuleHelper.Converter(Module), 0, EnumWaferProcessStatus.InProcess);
 
+            PMModule.InitScheduleData();
             PMModule.ResetFDCRecipeStepName();
             PMModule.HeaterEnable(true);
 
@@ -362,6 +364,11 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
                     PMModule.RecipeRunningInfo.SubRecipeTable = PMModule.RecipeRunningInfo.RecipeStepList[_currentStepNumber].SubRecipeTableInfo;
                     _faCallback.RecipeTriggerCallSubRecipe(Module, PMModule.RecipeRunningInfo.RecipeName, PMModule.RecipeRunningInfo.StepNumber.ToString(), PMModule.RecipeRunningInfo.RecipeStepList[_currentStepNumber].SubRecipeTableInfo);
 
+                    if (PMModule.RecipeRunningInfo.RecipeStepList[_currentStepNumber].StepName == "End" && PMModule.RecipeRunningInfo.RecipeStepList.Count - 1 == _currentStepNumber)
+                    {
+                        _faCallback.RecipeComplete(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName);
+                        _hasItBeenTriggeredRecipeComplete = true;
+                    }
                 }
                 PMModule.RecipeRunningInfo.RecipeStepList[_currentStepNumber].IsCallSubStep = false;
                 IsSubReciep = true;
@@ -397,13 +404,7 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
 
                                 if (IsSubReciep)
                                 {
-                                    if (SC.ContainsItem("System.FDC.SplitProcessLog") && SC.GetValue<bool>("System.FDC.SplitProcessLog"))
-                                    {
-                                        if (PMModule.RecipeRunningInfo.RecipeStepList[_currentStepNumber].StepName == "End" && PMModule.RecipeRunningInfo.RecipeStepList.Count - 1 == _currentStepNumber)
-                                        {
-                                            _faCallback.RecipeComplete(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName);
-                                        }
-                                    }
+
 
 
                                     if (curSteps[_currentSubRecipeStepNumber].IsLoopStartStep)
@@ -1248,18 +1249,10 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
         {
             if (_state == RecipeRunningState.RecipeCompleted)
             {
-                if (SC.ContainsItem("System.FDC.SplitProcessLog"))
-                {
-                    if (!SC.GetValue<bool>("System.FDC.SplitProcessLog"))
-                        _faCallback.RecipeComplete(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName);
-                }
-                else
-                {
+                if (!_hasItBeenTriggeredRecipeComplete)
                     _faCallback.RecipeComplete(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName);
-                }
 
                 PMModule.StringProcessFlowState = PMModule.ProcessFlowState.Standby.ToString();
-                //   _faCallback.RecipeComplete(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName);
                 _dbCallback.RecipeComplete(PMModule.RecipeRunningInfo.InnerId.ToString());
                 _fdc.Stop();
 
@@ -1269,17 +1262,9 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
             {
                 if (PMModule.IsExcuteIdleRecipe)
                 {
-                    if (SC.ContainsItem("System.FDC.SplitProcessLog"))
-                    {
-                        if (!SC.GetValue<bool>("System.FDC.SplitProcessLog"))
-                            _faCallback.RecipeComplete(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName);
-                    }
-                    else
-                    {
+                    if (!_hasItBeenTriggeredRecipeComplete)
                         _faCallback.RecipeComplete(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName);
-                    }
 
-                    // _faCallback.RecipeComplete(PMModule.Module, PMModule.RecipeRunningInfo.RecipeName);
                     _dbCallback.RecipeComplete(PMModule.RecipeRunningInfo.InnerId.ToString());
                     _fdc.Stop();
                 }
@@ -1290,6 +1275,7 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
                     _fdc.Stop();
                 };
             }
+            _hasItBeenTriggeredRecipeComplete = false;
         }
 
 

+ 10 - 0
Furnace/FurnaceRT/Equipments/Schedulers/SchedulerFACallback.cs

@@ -319,6 +319,8 @@ namespace FurnaceRT.Equipments.Schedulers
             }
             if (pj != null)
             {
+                if (pj.IsEmptyLayout)
+                    return;
                 EV.Notify(UniversalEvents.ChargeStart, new SerializableDictionary<string, object>()
                 {
                     {DataVariables.PRJobID,  pj.Name},
@@ -339,6 +341,8 @@ namespace FurnaceRT.Equipments.Schedulers
             }
             if (pj != null)
             {
+                if (pj.IsEmptyLayout)
+                    return;
                 EV.Notify(UniversalEvents.ChargeEnd, new SerializableDictionary<string, object>()
                 {
                     {DataVariables.PRJobID,  pj.Name},
@@ -361,6 +365,9 @@ namespace FurnaceRT.Equipments.Schedulers
 
             if (pj != null)
             {
+                if (pj.IsEmptyLayout)
+                    return;
+
                 EV.Notify(UniversalEvents.DischargeStart, new SerializableDictionary<string, object>()
                 {
                     {DataVariables.PRJobID,  pj.Name},
@@ -376,6 +383,9 @@ namespace FurnaceRT.Equipments.Schedulers
         {
             if (pj != null)
             {
+                if (pj.IsEmptyLayout)
+                    return;
+
                 EV.Notify(UniversalEvents.DischargeEnd, new SerializableDictionary<string, object>()
                 {
                     {DataVariables.PRJobID,  pj.Name},