using Aitex.Core.Util; using MECF.Framework.Common.Equipment; using PunkHPX8_Core; using PunkHPX8_RT.Schedulers; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PunkHPX8_RT.Dispatch { public class WaferTaskDispatcher:Singleton { /// /// 解析 /// public void Analyse() { List waferTasks = WaferTaskManager.Instance.LoadWaferTaskList().OrderBy(O=>O.CreateTime).ToList(); foreach (var item in waferTasks) { SchedulerSequence currentSequence = item.GetCurrentSchedulerSequence(); if (currentSequence == null) { item.Run(); continue; } if (currentSequence.ModuleName == ModuleName.EfemRobot) { } item.Run(); } } /// /// 处理Efemrobot /// /// /// /// private void DealEfemRobot(SchedulerSequence currentSequence, WaferTask item, List waferTasks) { if (currentSequence.State == RState.End) { item.Run(); return; } if (currentSequence.State == RState.Running) { item.Run(); return; } if (CheckOtherEfemRobotIsRunning(waferTasks, item, ModuleName.EfemRobot)) { return; } if (currentSequence.State == RState.Init) { item.Run(); } } /// /// 检验其他任务是否也是Transporter并且正在执行 /// /// /// /// private bool CheckOtherEfemRobotIsRunning(List waferTasks, WaferTask waferTask, ModuleName moduleName) { foreach (WaferTask item in waferTasks) { if (item.WaferId == waferTask.WaferId) { continue; } SchedulerSequence schedulerSequence = item.GetCurrentSchedulerSequence(); if (schedulerSequence == null) { continue; } if (schedulerSequence.ModuleName == moduleName) { if (schedulerSequence.State == RState.Running) { return true; } } } return false; } } }