Browse Source

update transporter scheduler

chenkui 1 month ago
parent
commit
57ec4c0d76

+ 3 - 10
CyberX8_RT/Devices/Loader/LoaderRotationAxisInterLock.cs

@@ -145,20 +145,13 @@ namespace CyberX8_RT.Devices.Loader
                 LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{Module} ShuttleB {shuttleBPosition} is not in MID, LS or IN station,Cannot execute GotoSavedPosition");
                 return false;
             }
-            //Loader transporter 的 ELEVATOR 在‘UP’位。
             bool loaderTransporterInstalled = ModuleHelper.IsInstalled(ModuleName.Transporter2);
             if (loaderTransporterInstalled)
             {
-                JetAxisBase loaderTransporterElevatorAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.Transporter2}.Elevator");
-                if(loaderTransporterElevatorAxis == null)
+                JetAxisBase loadTransporterGantryAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.Transporter2}.Gantry");
+                if (loadTransporterGantryAxis != null && !loadTransporterGantryAxis.JudgeCompareTargetStation("Loader", "Right"))
                 {
-                    LOG.WriteLog(eEvent.ERR_TRANSPORTER, Module, "Loader transporter elevator Axis is null");
-                    return false;
-                }
-                double loaderTransporterPosition = loaderTransporterElevatorAxis.MotionData.MotorPosition;
-                if (!loaderTransporterElevatorAxis.CheckPositionIsInStation(loaderTransporterPosition, "UP"))
-                {
-                    LOG.WriteLog(eEvent.ERR_TRANSPORTER, Module, $"Loader transporter elevator is not in UP station, Cannot execute GotoSavedPosition");
+                    LOG.WriteLog(eEvent.ERR_PUF, Module, "loader transporter axis is in loader station, Cannot execute GotoSavedPosition");
                     return false;
                 }
             }

+ 10 - 0
CyberX8_RT/Dispatch/JobDispatcher.cs

@@ -198,6 +198,16 @@ namespace CyberX8_RT.Dispatch
                 if (cj.State != EnumControlJobState.Completed)
                     return false;
             }
+            bool waferTask = WaferTaskManager.Instance.CheckAllTaskComplete();
+            if (!waferTask)
+            {
+                return false;
+            }
+            bool waferHolderTask = WaferHolderTaskManager.Instance.CheckAllTaskComplete();
+            if (!waferHolderTask)
+            {
+                return false;
+            }
             return true;
         }
         /// <summary>

+ 14 - 7
CyberX8_RT/Dispatch/WaferHolderTaskManager.cs

@@ -31,7 +31,7 @@ namespace CyberX8_RT.Dispatch
         /// <summary>
         /// WaferTask集合
         /// </summary>
-        private List<WaferHolderTask> _waferHolderTaskList = new List<WaferHolderTask>();
+        private List<WaferHolderTask> _waferTaskList = new List<WaferHolderTask>();
         /// <summary>
         /// WaferTask锁
         /// </summary>
@@ -86,7 +86,7 @@ namespace CyberX8_RT.Dispatch
                     _waferHolderTaskDic.TryAdd(waferHolderTask.ID, waferHolderTask);
                     lock (_waferHolderTaskObject)
                     {
-                        _waferHolderTaskList.Add(waferHolderTask);
+                        _waferTaskList.Add(waferHolderTask);
                     }
                     LOG.WriteLog(eEvent.EV_SEQUENCE, "Scheduler", $"Create wafer Shuttle {waferHolderInfo.Id} task");
                     List<SchedulerSequence> sequences = SchedulerSequenceManager.Instance.AnalyWaferHolderAllSchedulerSequence(waferHolderInfo, jobs[0].SequenceRecipe,waferTaskCount);
@@ -233,7 +233,7 @@ namespace CyberX8_RT.Dispatch
                             _waferHolderTaskDic.TryAdd(waferHolderTask.ID, waferHolderTask);
                             lock (_waferHolderTaskObject)
                             {
-                                _waferHolderTaskList.Add(waferHolderTask);
+                                _waferTaskList.Add(waferHolderTask);
                             }
                             LOG.WriteLog(eEvent.EV_SEQUENCE, "Scheduler", $"Create dummy wafer Shuttle {waferHolderInfo.Id} task");
                             List<SchedulerSequence> sequences = SchedulerSequenceManager.Instance.AnalyseDummyWaferHolderAllSchedulerSequence(waferHolderInfo,waferTaskCount);
@@ -293,10 +293,10 @@ namespace CyberX8_RT.Dispatch
             }
             lock (_waferHolderTaskObject)
             {
-                int index = _waferHolderTaskList.FindIndex(O => O.ID == id);
+                int index = _waferTaskList.FindIndex(O => O.ID == id);
                 if (index != -1)
                 {
-                    _waferHolderTaskList.RemoveAt(index);
+                    _waferTaskList.RemoveAt(index);
                 }
             }
         }
@@ -308,10 +308,17 @@ namespace CyberX8_RT.Dispatch
         {
             lock (_waferHolderTaskObject)
             {
-                return _waferHolderTaskList;
+                return _waferTaskList;
             }
         }
-
+        /// <summary>
+        /// 检验所有task是否完成
+        /// </summary>
+        /// <returns></returns>
+        public bool CheckAllTaskComplete()
+        {
+            return _waferTaskList.Count == 0;
+        }
         /// <summary>
         /// 暂停
         /// </summary>

+ 8 - 0
CyberX8_RT/Dispatch/WaferTaskManager.cs

@@ -409,6 +409,14 @@ namespace CyberX8_RT.Dispatch
             RemoveWaferTask(id);
         }
         /// <summary>
+        /// 检验所有task是否完成
+        /// </summary>
+        /// <returns></returns>
+        public bool CheckAllTaskComplete()
+        {
+            return _waferTaskList.Count == 0;
+        }
+        /// <summary>
         /// 暂停
         /// </summary>
         public void PauseAllTask()

+ 2 - 3
CyberX8_RT/Modules/Loader/LoaderLoadSideRoutine.cs

@@ -123,9 +123,8 @@ namespace CyberX8_RT.Modules.Loader
             LottrackRecord();
             Runner.Run(LoadStep.SideLoad, () => StartLoadRoutine(_sideLoadRoutine,_isSideLoaded), _delay_1ms)
                 .WaitWithStopCondition(LoadStep.SideAllLoadWait, CheckLoadAllRoutineEndStatus,CheckLoadAllRoutineStopStatus)
-                //临时注释,待模拟器定好后恢复 2025-03-11 17:14
-                //.Run(LoadStep.LeakTest, StartFlowTest, _delay_1ms)
-                //.WaitWithStopCondition(LoadStep.LeakTestWait, CheckFlowTestEndStatus, CheckFlowTestStopStatus)
+                .Run(LoadStep.LeakTest, StartFlowTest, _delay_1ms)
+                .WaitWithStopCondition(LoadStep.LeakTestWait, CheckFlowTestEndStatus, CheckFlowTestStopStatus)
                 .RunIf(LoadStep.RotationGoToTRNPA,_loadComplete,RotationGotoTransporterA,_delay_1s)
                 .WaitWithStopConditionIf(LoadStep.RotationGoToTRNPAWait,_loadComplete, CheckRotationPositionStatus,CheckRotationPositionRunStop)
                 .RunIf(LoadStep.UnclampWaferHolder,_loadComplete, WaferHolderClampOffAction,_delay_1ms)

+ 2 - 0
CyberX8_RT/Modules/Transporter/TransporterEntity.cs

@@ -612,6 +612,7 @@ namespace CyberX8_RT.Modules.Transporter
             if(result)
             {
                 _currentRoutine = null;
+                AlarmListManager.Instance.CheckModuleAlamAndRemove(Module.ToString(), TransporterState.PickUping.ToString());
             }
             return result;
         }
@@ -731,6 +732,7 @@ namespace CyberX8_RT.Modules.Transporter
                 {
                     _sourceCell = "";
                 }
+                AlarmListManager.Instance.CheckModuleAlamAndRemove(Module.ToString(), TransporterState.Placing.ToString());
             }
             return result;
         }

+ 3 - 2
CyberX8_RT/Schedulers/Loader/SchedulerLoader.cs

@@ -32,7 +32,7 @@ namespace CyberX8_RT.Schedulers.Loader
         private LoaderEntity _loaderEntity;
         private PUFEntity _puf1Entity;
         private SchedulerStep _currentStep;
-        private int _currentWaferIndex = 0;
+        private int _currentWaferIndex = 1;
         #endregion
 
         #region 属性
@@ -65,7 +65,7 @@ namespace CyberX8_RT.Schedulers.Loader
         {
             _state = RState.Running;
             _currentStep = SchedulerStep.WaitLoad;
-            _currentWaferIndex = 0;
+            _currentWaferIndex = 1;
             return true;
         }
         /// <summary>
@@ -102,6 +102,7 @@ namespace CyberX8_RT.Schedulers.Loader
                         if (result)
                         {
                             _currentStep = SchedulerStep.ReadyForPuf;
+                            _currentWaferIndex=2;
                         }
                     }
                 }