Browse Source

同步ELK02 进出货冲突调整

jiangjy 20 hours ago
parent
commit
509e7d4fc4

File diff suppressed because it is too large
+ 743 - 741
Furnace/FurnaceRT/Config/System.sccfg


+ 16 - 4
Furnace/FurnaceRT/Equipments/Jobs/TransferJob.cs

@@ -800,8 +800,16 @@ namespace FurnaceRT.Equipments.Jobs
                                 _lstFIMSs.Any(x => x.IsAvailable && x.IsReadyForPlace(ModuleName.CarrierRobot, 0)) &&
                                 !SC.GetValue<bool>("WaferRobot.BypassFIMSMap"))
                             {
+                                //有job执行且在charging和discharge状态,先不执行mapping
+                                if (DATA.Poll("Scheduler.CurrentProcessJob") is ProcessJobInfo job && job != null &&
+                          (job.ProcessingState == EnumProcessingState.CoolingBeforeDischarge || job.ProcessingState == EnumProcessingState.Charging || job.ProcessingState == EnumProcessingState.Discharging
+                         || (job.ProcessingState == EnumProcessingState.Processing && DATA.Poll("PM1.RemainTimeToEnterCooling") is double t && t <= SC.GetValue<double>("System.Scheduler.LoadMappingForecastTime"))))
+                                {
+                                    continue;
+                                }
                                 if (tj.CarrierParas.Any(x => x.Stocker == carrier.InternalModuleName))
                                 {
+
                                     stocker = st;
                                     break;
                                 }
@@ -853,10 +861,7 @@ namespace FurnaceRT.Equipments.Jobs
                     }
                 }
 
-                //map正常完成或者FIMS不具备map条件
-                if (stocker != null && ((carrier.IsMapped && carrier.IsMapOK) ||
-                    SC.GetValue<bool>("WaferRobot.BypassFIMSMap") ||
-                    !_lstFIMSs.Any(x => x.IsOnline && CarrierManager.Instance.CheckNoCarrier(x.Module, 0))))
+                if (stocker != null)
                 {
                     if (_carrierRobot.Place(stocker.Module, 0, Hand.Blade1))
                     {
@@ -983,6 +988,13 @@ namespace FurnaceRT.Equipments.Jobs
                 SchedulerFIMS fims = null;
                 foreach (var st in _lstFIMSs)
                 {
+                    if (DATA.Poll("Scheduler.CurrentProcessJob") is ProcessJobInfo job && job != null &&
+                       (job.ProcessingState == EnumProcessingState.CoolingBeforeDischarge || job.ProcessingState == EnumProcessingState.Charging || job.ProcessingState == EnumProcessingState.Discharging
+                      || (job.ProcessingState == EnumProcessingState.Processing && DATA.Poll("PM1.RemainTimeToEnterCooling") is double t && t <= SC.GetValue<double>("System.Scheduler.LoadMappingForecastTime"))))
+                    {
+                        continue;
+                    }
+
                     if (!st.IsAvailable || !st.IsReadyForPlace(ModuleName.CarrierRobot, 0))
                         continue;
                     var fimsDevice = DEVICE.GetDevice<IoFIMS>($"PM1.{st.Module}");

+ 1 - 0
Furnace/FurnaceRT/Equipments/PMs/PMModule.cs

@@ -292,6 +292,7 @@ namespace FurnaceRT.Equipments.PMs
             DATA.Subscribe($"{Module}.RunningMode", () => SC.ContainsItem("System.RunningMode") ? SC.GetStringValue("System.RunningMode") == ConfigEnum.Debug.ToString() : false);
 
             //DATA.Subscribe($"{Module}.WaferSize", () => WaferManager.Instance.GetWaferSize(_module, 0).ToString());
+            DATA.Subscribe($"{Name}.RemainTimeToEnterCooling", () => _recipeRunningInfo.RemainTimeExcludeEndStep - _recipeRunningInfo.TotalElapseTime, SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
             DATA.Subscribe($"{Module}.IsInMaintainMode", () => !IsOnline);
 

+ 7 - 1
Furnace/FurnaceRT/Equipments/PMs/RecipeExecutions/Process.cs

@@ -196,7 +196,7 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
         private string _infoMFCWaitCondition = "";
         private Dictionary<int, Tuple<bool,int>> _callSubSteps = new Dictionary<int, Tuple<bool, int>>();
         private bool _isJumpStep = false;
-
+        private double _remainTimeExcludeEnd = 0;
         public Process(ModuleName module, PMModule pm) : base(module, pm)
         {
             Module = module.ToString();
@@ -269,6 +269,7 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
             PMModule.IsMainRecipeComplete = false;
             _loopEnd = false;
             _isJumpStep = false;
+            PMModule.RecipeRunningInfo.RemainTimeExcludeEndStep = _remainTimeExcludeEnd;
 
             _curStepElpasedTimeBeforePaused = 0;
             _waferTimeElpasedTimeBeforPaused = 0;
@@ -1421,6 +1422,11 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
                     {
                         i = PMModule.RecipeRunningInfo.RecipeStepList[i].JumpStepNo - 1;// -1是因为i++
                     }
+                    if (i < PMModule.RecipeRunningInfo.RecipeStepList.Count - 1)
+                    {
+                        _remainTimeExcludeEnd = total;//获取除最后一步外的process时间,End步会cooling
+                    }
+
                 }
             }
             catch (Exception ex)

+ 1 - 0
Furnace/FurnaceRT/Equipments/PMs/RecipeExecutions/RecipeRunningInfo.cs

@@ -48,5 +48,6 @@ namespace FurnaceRT.Equipments.PMs.RecipeExecutions
         public string AbortRecipeName { get; set; }
 
         public bool IsLooping { get; set; }
+        public double RemainTimeExcludeEndStep { get; set; }
     }
 }