using Aitex.Core.Common; using Aitex.Core.Util; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.SubstrateTrackings; using MECF.Framework.Common.ToolLayout; using PunkHPX8_RT.Schedulers.Aligner; using PunkHPX8_RT.Schedulers.EfemRobot; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using PunkHPX8_RT.Schedulers.Srd; using PunkHPX8_RT.Dispatch; using PunkHPX8_RT.Modules; using Aitex.Core.RT.SCCore; namespace PunkHPX8_RT.Schedulers { public class SchedulerManager : Singleton { #region 内部变量 /// /// 模块类型集合字典 /// private Dictionary> _scheduleModuleTypeDic = new Dictionary>(); /// /// 模块字典 /// private Dictionary _scheduleModuleDic = new Dictionary(); /// /// 是否启用QDR时间轴 /// private bool _isQdrCheckConflict = false; #endregion #region 属性 /// /// 是否启用QDR时间轴 /// public bool IsQdrCheckConflict { get { return _isQdrCheckConflict; } } #endregion #region 初始化 /// /// 初始化 /// public void Initialize() { _isQdrCheckConflict = SC.GetValue("Scheduler.IsQdrCheckConflict"); AddScheduleModule(ModuleType.EfemRobot, new SchedulerRobot(ModuleName.EfemRobot)); AddScheduleModule(ModuleType.Aligner, new SchedulerAligner(ModuleName.Aligner1)); InitializeSchedulerModules(SrdItemManager.Instance.InstalledModules,ModuleType.SRD,typeof(SchedulerSrd)); } /// /// 重置 /// public void ResetSchedulerModule() { List moduleNames = _scheduleModuleDic.Keys.ToList(); foreach(ModuleName item in moduleNames) { _scheduleModuleDic[item].ResetTask(); } } /// /// 初始化调度Module集合 /// private void InitializeSchedulerModules(List installedModules,ModuleType moduleType,Type type) { foreach(string item in installedModules) { InitializeSchedulerModule(item, moduleType, type); } } /// /// 初始化调度Module /// /// /// /// private void InitializeSchedulerModule(string item, ModuleType moduleType, Type type) { ModuleName moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), item); SchedulerModule schedulerModule = (SchedulerModule)System.Activator.CreateInstance(type, moduleName); AddScheduleModule(moduleType, schedulerModule); } /// /// 增加调度模块 /// /// /// private void AddScheduleModule(ModuleType moduleType, SchedulerModule module) { List schedulers = new List(); if (_scheduleModuleTypeDic.ContainsKey(moduleType)) { schedulers = _scheduleModuleTypeDic[moduleType]; } else { _scheduleModuleTypeDic[moduleType] = schedulers; } schedulers.Add(module); _scheduleModuleDic[module.Module] = module; } #endregion /// /// 获取调度对象 /// /// /// public SchedulerModule GetScheduler(ModuleName moduleName) { return _scheduleModuleDic.ContainsKey(moduleName)?_scheduleModuleDic[moduleName]:null; } /// /// 根据模块类型获取调度模块集合 /// /// /// public List GetModuleTypeScheduleModules(ModuleType moduleType) { return _scheduleModuleTypeDic.ContainsKey(moduleType) ? _scheduleModuleTypeDic[moduleType]: null; } } }