Bläddra i källkod

update transporter block

chenkui 1 vecka sedan
förälder
incheckning
6458e62756

+ 54 - 27
CyberX8_RT/Dispatch/WaferHolderTaskDispatcher.cs

@@ -76,18 +76,31 @@ namespace CyberX8_RT.Dispatch
                 item.Run();
                 return;
             }
-            if (CheckOtherTransporterIsRunning(waferHolderTasks, item,ModuleName.Transporter1))
-            {
-                return;
-            }
-            //存在其他任务当前source为prewet同时prewet状态为WaitForPick
-            if (CheckPrewetIsWaitForPick(waferHolderTasks, item) && currentSequence.State == RState.Init)
+            if (CheckOtherTransporterIsRunning(waferHolderTasks, item, ModuleName.Transporter1))
             {
                 return;
             }
             if (currentSequence.State == RState.Init)
             {
-                AnalyseProcessTransporterSchedulerSequence(currentSequence, item, transporterTransferSeconds);
+                bool result = AnalyseProcessTransporterMetalSchedulerSequence(currentSequence, item, transporterTransferSeconds);
+                if (result)
+                {
+                    return;
+                }
+                //存在其他任务当前source为prewet同时prewet状态为WaitForPick
+                //if (CheckPrewetIsWaitForPick(waferHolderTasks, item))
+                //{
+                //    return;
+                //}
+                //if (SchedulerManager.Instance.IsQdrCheckConflict)
+                //{
+                //    result = SchedulerTransporterTimeManager.Instance.CheckExsitOtherWaferHolderBefore(ModuleName.Transporter1.ToString(), currentSequence.SequenceIndex, item.WaferHolderInfo.Id);
+                //    if (result)
+                //    {
+                //        return;
+                //    }
+                //}
+                item.Run();
             }
         }
         /// <summary>
@@ -333,13 +346,12 @@ namespace CyberX8_RT.Dispatch
         /// 解析Transporter1调度逻辑
         /// </summary>
         /// <param name="sequence"></param>
-        private void AnalyseProcessTransporterSchedulerSequence(SchedulerSequence sequence,WaferHolderTask waferHolderTask,int transporterTransferSeconds)
+        private bool AnalyseProcessTransporterMetalSchedulerSequence(SchedulerSequence sequence, WaferHolderTask waferHolderTask, int transporterTransferSeconds)
         {
             SchedulerSequence preSequence = waferHolderTask.GetPreSchedulerSequence();
             if (preSequence == null)
             {
-                waferHolderTask.Run();
-                return;
+                return false;
             }
             if (preSequence.ModuleType == ModuleType.Metal)
             {
@@ -347,24 +359,33 @@ namespace CyberX8_RT.Dispatch
                 if (preSequence.SchedulerModule.IsError)
                 {
                     waferHolderTask.Run();
-                    return;
+                    if (waferHolderTask.State == WaferHolderTaskState.Processing)
+                    {
+                        return true;
+                    }
+                }
+                MetalEntity metalEntity = Singleton<RouteManager>.Instance.GetModule<MetalEntity>(preSequence.ModuleName.ToString());
+                if (metalEntity != null && metalEntity.WaferHolderInfo != null && metalEntity.IsIdle)
+                {
+                    waferHolderTask.Run();
+                    if (waferHolderTask.State == WaferHolderTaskState.Processing)
+                    {
+                        return true;
+                    }
                 }
             }
-            if(CheckExistMetalRemainTime(transporterTransferSeconds))
-            {
-                return;
-            }
-            else
+            if (CheckExistMetalRemainTime(transporterTransferSeconds, waferHolderTask.ID))
             {
-                waferHolderTask.Run();
+                return true;
             }
+            return false;
         }
         /// <summary>
         /// 是否存在当前阶段为Metal,剩余时间比Transporter搬运时间更小时
         /// </summary>
         /// <param name="transporterTransferSeconds"></param>
         /// <returns></returns>
-        private bool CheckExistMetalRemainTime(int transporterTransferSeconds)
+        private bool CheckExistMetalRemainTime(int transporterTransferSeconds, string waferTaskId)
         {
             List<WaferHolderTask> waferHolderTasks = WaferHolderTaskManager.Instance.LoaderWaferHolderTaskList().ToList();
             foreach (var item in waferHolderTasks)
@@ -374,18 +395,19 @@ namespace CyberX8_RT.Dispatch
                 {
                     continue;
                 }
-                if(currentSequence.ModuleType==ModuleType.Metal&&ModuleHelper.IsMetal(currentSequence.ModuleName))
+                if (item.ID == waferTaskId)
+                {
+                    continue;
+                }
+                if (currentSequence.ModuleType == ModuleType.Metal && ModuleHelper.IsMetal(currentSequence.ModuleName))
                 {
                     MetalEntity metalEntity = Singleton<RouteManager>.Instance.GetModule<MetalEntity>(currentSequence.ModuleName.ToString());
                     if (metalEntity == null)
                     {
                         continue;
                     }
-                    if (metalEntity.IsIdle && metalEntity.WaferHolderInfo != null)
-                    {
-                        return true;
-                    }
-                    if(metalEntity.TimeToReady<=transporterTransferSeconds&&metalEntity.IsBusy)
+
+                    if (metalEntity.TimeToReady <= transporterTransferSeconds && metalEntity.IsBusy)
                     {
                         return true;
                     }
@@ -393,10 +415,15 @@ namespace CyberX8_RT.Dispatch
                 if (currentSequence.ModuleName == ModuleName.Transporter1)
                 {
                     SchedulerSequence preSequence = item.GetPreSchedulerSequence();
-                    if (preSequence.ModuleType==ModuleType.Metal&&WaferHolderManager.Instance.HasWaferHolder(preSequence.ModuleName.ToString()))
+                    if (preSequence.ModuleType == ModuleType.Metal && WaferHolderManager.Instance.HasWaferHolder(preSequence.ModuleName.ToString()))
                     {
-                        WaferHolderInfo waferHolderInfo = WaferHolderManager.Instance.GetWaferHolder(preSequence.ModuleName.ToString());
-                        if (DateTime.Now.Subtract(waferHolderInfo.LastMetalRecipeCompleteTime).TotalMilliseconds <= 1000)
+                        MetalEntity metalEntity = Singleton<RouteManager>.Instance.GetModule<MetalEntity>(preSequence.ModuleName.ToString());
+                        if (metalEntity == null)
+                        {
+                            continue;
+                        }
+                        //存在Metal已经完成recipe,同时时间不超过transporter传输的一半
+                        if (metalEntity.IsIdle && metalEntity.WaferHolderInfo != null && DateTime.Now.Subtract(metalEntity.WaferHolderInfo.LastMetalRecipeCompleteTime).TotalSeconds <= transporterTransferSeconds / 2)
                         {
                             return true;
                         }

+ 2 - 0
CyberX8_RT/Modules/Buffer/BufferEntity.cs

@@ -104,6 +104,7 @@ namespace CyberX8_RT.Modules.Buffer
                     WaferInfo waferInfo = WaferManager.Instance.GetWafer(Module, 0);
                     waferInfo.WaferOrigin = WaferHolderInfo.WaferAId;
                     waferInfo.WaferID = WaferHolderInfo.WaferAId;
+                    waferInfo.Size = (WaferSize)WaferHolderInfo.WaferSize;
                     waferInfo.OrginalWaferHolder = WaferHolderInfo.Id;
                 }
                 if(!string.IsNullOrEmpty(WaferHolderInfo.WaferBId))
@@ -115,6 +116,7 @@ namespace CyberX8_RT.Modules.Buffer
                     WaferInfo waferInfo = WaferManager.Instance.GetWafer(Module, 1);
                     waferInfo.WaferOrigin = WaferHolderInfo.WaferBId;
                     waferInfo.WaferID = WaferHolderInfo.WaferBId;
+                    waferInfo.Size = (WaferSize)WaferHolderInfo.WaferSize;
                     waferInfo.OrginalWaferHolder=WaferHolderInfo.Id;
                 }
             }

+ 13 - 0
CyberX8_RT/Modules/PUF/PufPickFromLoaderRoutine.cs

@@ -17,6 +17,8 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using Aitex.Core.RT.SCCore;
+using Aitex.Core.Common;
+using MECF.Framework.Common.SubstrateTrackings;
 
 namespace CyberX8_RT.Modules.PUF
 {
@@ -172,6 +174,17 @@ namespace CyberX8_RT.Modules.PUF
         {
             if (_enableCheckStickDistanceStatus)
             {
+                WaferSize waferSize = WaferSize.WS0;
+                WaferInfo waferInfo = WaferManager.Instance.GetWafer(ModuleName.PUF1, 0);
+                if (waferInfo != null && !waferInfo.IsEmpty)
+                {
+                    waferSize = waferInfo.Size;
+                }
+                //非8寸的Wafer不检验
+                if (waferSize != WaferSize.WS8)
+                {
+                    return true;
+                }
                 return _distanceSensor.CheckStickDistanceStatus();
             }
             else

+ 27 - 3
Framework/Common/WaferHolder/WaferHolderDataService.cs

@@ -84,7 +84,7 @@ namespace MECF.Framework.Common.WaferHolder
                                  
             if(waferHolderInfo!=null)
             {
-                if(string.IsNullOrEmpty(info.CurrentLocation))
+                if (string.IsNullOrEmpty(info.CurrentLocation))
                 {
                     WaferHolderManager.Instance.Remove(waferHolderInfo.CurrentLocation);
                     if (!string.IsNullOrEmpty(waferHolderInfo.WaferAId))
@@ -99,12 +99,23 @@ namespace MECF.Framework.Common.WaferHolder
                     waferHolderInfo.CloneBaseInfo(info);
                     WaferHolderHistoryRecord.InsertWaferHolderRemoveHistory(waferHolderInfo.Id);
                 }
-                else if(string.IsNullOrEmpty(waferHolderInfo.CurrentLocation)&&!string.IsNullOrEmpty(info.CurrentLocation))
+                else if (string.IsNullOrEmpty(waferHolderInfo.CurrentLocation) && !string.IsNullOrEmpty(info.CurrentLocation))
                 {
-                    CreateWaferHolderWafer(waferHolderInfo,info.CurrentLocation);
+                    CreateWaferHolderWafer(waferHolderInfo, info.CurrentLocation);
                     waferHolderInfo.CloneBaseInfo(info);
                     WaferHolderManager.Instance.SubscribeLocation(info.CurrentLocation, waferHolderInfo);
                 }
+                else if (waferHolderInfo.WaferSize != info.WaferSize)
+                {
+                    if (!string.IsNullOrEmpty(waferHolderInfo.WaferAId))
+                    {
+                        UpdateWaferHolderWaferSize(waferHolderInfo.WaferAId, (WaferSize)info.WaferSize);
+                    }
+                    if (!string.IsNullOrEmpty(waferHolderInfo.WaferBId))
+                    {
+                        UpdateWaferHolderWaferSize(waferHolderInfo.WaferBId, (WaferSize)info.WaferSize);
+                    }
+                }
                 else
                 {
                     waferHolderInfo.CloneBaseInfo(info);
@@ -129,6 +140,19 @@ namespace MECF.Framework.Common.WaferHolder
             }
         }
         /// <summary>
+        /// 更新WaferShuttle的尺寸
+        /// </summary>
+        /// <param name="waferId"></param>
+        /// <param name="waferSize"></param>
+        private void UpdateWaferHolderWaferSize(string waferId,WaferSize waferSize)
+        {
+            WaferInfo waferInfo = WaferManager.Instance.GetWaferByWaferId(waferId);
+            if (waferInfo != null && !waferInfo.IsEmpty)
+            {
+                waferInfo.Size = waferSize;
+            }
+        }
+        /// <summary>
         /// 创建WaferHolder中Wafer
         /// </summary>
         /// <param name="waferHolderInfo"></param>

+ 28 - 12
Framework/Common/WaferHolder/WaferHolderManager.cs

@@ -77,48 +77,61 @@ namespace MECF.Framework.Common.WaferHolder
         public bool ResetLayoutWafers()
         {
             List<WaferHolderInfo> waferHolderInfos = _locationWaferHolders.Values.ToList();
-            foreach(WaferHolderInfo item in waferHolderInfos)
+            foreach (WaferHolderInfo item in waferHolderInfos)
             {
                 bool isChanged = false;
-                if(!Enum.TryParse(item.CurrentLocation,out ModuleName moduleName))
+                if (!Enum.TryParse(item.CurrentLocation, out ModuleName moduleName))
                 {
                     continue;
                 }
                 if (!string.IsNullOrEmpty(item.WaferAId))
                 {
-                    WaferInfo waferInfo=WaferManager.Instance.GetWaferByWaferId(item.WaferAId);
-                    if (item.WaferAType == (int)WaferType.Production||waferInfo==null||waferInfo.WaferType==WaferType.Production)
+                    WaferInfo waferInfo = WaferManager.Instance.GetWaferByWaferId(item.WaferAId);
+                    if (item.WaferAType == (int)WaferType.Production || waferInfo == null || waferInfo.WaferType == WaferType.Production)
                     {
                         WaferManager.Instance.DeleteWaferById(item.WaferAId);
+                        if (WaferManager.Instance.CheckHasWafer(item.CurrentLocation, 0))
+                        {
+                            WaferManager.Instance.DeleteWafer(item.CurrentLocation, 0);
+                        }
+                        item.WaferSize = item.WaferSize;
                         item.WaferAId = $"{item.Id}.01";
-                        item.WaferAType= (int)WaferType.Assit;
-                        CreateModuleWafer(item, moduleName, 0,item.WaferAId);
+                        item.WaferAType = (int)WaferType.Assit;
+                        CreateModuleWafer(item, moduleName, 0, item.WaferAId);
                         isChanged = true;
                     }
                     else
                     {
-                        if(item.WaferAId!= $"{item.Id}.01")
+                        if (item.WaferAId != $"{item.Id}.01")
                         {
                             item.WaferAId = $"{item.Id}.01";
+                            item.WaferSize = item.WaferSize;
                             isChanged = true;
                         }
-                        CreateModuleWafer(item, moduleName, 0,item.WaferAId);
+                        CreateModuleWafer(item, moduleName, 0, item.WaferAId);
                     }
                 }
                 else
                 {
                     item.WaferAId = $"{item.Id}.01";
                     item.WaferAType = (int)WaferType.Assit;
-                    CreateModuleWafer(item, moduleName, 0,item.WaferAId);
+                    item.WaferSize = item.WaferSize;
+                    CreateModuleWafer(item, moduleName, 0, item.WaferAId);
                     isChanged = true;
                 }
                 if (!string.IsNullOrEmpty(item.WaferBId))
                 {
                     WaferInfo waferInfo = WaferManager.Instance.GetWaferByWaferId(item.WaferBId);
-                    if (item.WaferBType == (int)WaferType.Production||waferInfo==null||waferInfo.WaferType==WaferType.Production)
+                    if (item.WaferBType == (int)WaferType.Production || waferInfo == null || waferInfo.WaferType == WaferType.Production)
                     {
                         WaferManager.Instance.DeleteWaferById(item.WaferBId);
+
+                        if (WaferManager.Instance.CheckHasWafer(item.CurrentLocation, 1))
+                        {
+                            WaferManager.Instance.DeleteWafer(item.CurrentLocation, 1);
+                        }
                         item.WaferBId = $"{item.Id}.02";
+                        item.WaferSize = item.WaferSize;
                         item.WaferBType = (int)WaferType.Assit;
                         CreateModuleWafer(item, moduleName, 1, item.WaferBId);
                         isChanged = true;
@@ -128,17 +141,19 @@ namespace MECF.Framework.Common.WaferHolder
                         if (item.WaferBId != $"{item.Id}.02")
                         {
                             item.WaferBId = $"{item.Id}.02";
+                            item.WaferSize = item.WaferSize;
                             isChanged = true;
                         }
-                        CreateModuleWafer(item, moduleName, 1,item.WaferBId);
+                        CreateModuleWafer(item, moduleName, 1, item.WaferBId);
                     }
                 }
                 else
                 {
                     item.WaferBId = $"{item.Id}.02";
                     item.WaferBType = (int)WaferType.Assit;
+                    item.WaferSize = item.WaferSize;
                     isChanged = true;
-                    CreateModuleWafer(item, moduleName,1,item.WaferBId);
+                    CreateModuleWafer(item, moduleName, 1, item.WaferBId);
                 }
                 if (isChanged)
                 {
@@ -540,6 +555,7 @@ namespace MECF.Framework.Common.WaferHolder
         {
             WaferHolderInfo sourceInfo = GetWaferHolderInfoById(waferHolderInfo.Id);
             sourceInfo.CloneBaseInfo(waferHolderInfo);
+
             _service.UpdateWaferHolderData(waferHolderInfo.Id, sourceInfo,false);
         }
         /// <summary>