| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 | 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<SchedulerManager>    {        #region 内部变量        /// <summary>        /// 模块类型集合字典        /// </summary>        private Dictionary<ModuleType, List<SchedulerModule>> _scheduleModuleTypeDic = new Dictionary<ModuleType, List<SchedulerModule>>();        /// <summary>        /// 模块字典        /// </summary>        private Dictionary<ModuleName, SchedulerModule> _scheduleModuleDic = new Dictionary<ModuleName, SchedulerModule>();        /// <summary>        /// 是否启用QDR时间轴        /// </summary>        private bool _isQdrCheckConflict = false;        #endregion        #region 属性        /// <summary>        /// 是否启用QDR时间轴        /// </summary>        public bool IsQdrCheckConflict { get { return _isQdrCheckConflict; } }        #endregion        #region 初始化        /// <summary>        /// 初始化        /// </summary>        public void Initialize()        {            _isQdrCheckConflict = SC.GetValue<bool>("Scheduler.IsQdrCheckConflict");            AddScheduleModule(ModuleType.EfemRobot, new SchedulerRobot(ModuleName.EfemRobot));            AddScheduleModule(ModuleType.Aligner, new SchedulerAligner(ModuleName.Aligner1));            InitializeSchedulerModules(SrdItemManager.Instance.InstalledModules,ModuleType.SRD,typeof(SchedulerSrd));        }        /// <summary>        /// 重置        /// </summary>        public void ResetSchedulerModule()        {            List<ModuleName> moduleNames = _scheduleModuleDic.Keys.ToList();            foreach(ModuleName item in moduleNames)            {                _scheduleModuleDic[item].ResetTask();            }        }        /// <summary>        /// 初始化调度Module集合        /// </summary>        private void InitializeSchedulerModules(List<string> installedModules,ModuleType moduleType,Type type)        {            foreach(string item in installedModules)            {                InitializeSchedulerModule(item, moduleType, type);            }        }        /// <summary>        /// 初始化调度Module        /// </summary>        /// <param name="item"></param>        /// <param name="moduleType"></param>        /// <param name="type"></param>        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);        }        /// <summary>        /// 增加调度模块        /// </summary>        /// <param name="moduleType"></param>        /// <param name="module"></param>        private void AddScheduleModule(ModuleType moduleType, SchedulerModule module)        {            List<SchedulerModule> schedulers = new List<SchedulerModule>();            if (_scheduleModuleTypeDic.ContainsKey(moduleType))            {                schedulers = _scheduleModuleTypeDic[moduleType];            }            else            {                _scheduleModuleTypeDic[moduleType] = schedulers;            }            schedulers.Add(module);            _scheduleModuleDic[module.Module] = module;        }        #endregion        /// <summary>        /// 获取调度对象        /// </summary>        /// <param name="moduleName"></param>        /// <returns></returns>        public SchedulerModule GetScheduler(ModuleName moduleName)        {            return _scheduleModuleDic.ContainsKey(moduleName)?_scheduleModuleDic[moduleName]:null;        }        /// <summary>        /// 根据模块类型获取调度模块集合        /// </summary>        /// <param name="moduleType"></param>        /// <returns></returns>        public List<SchedulerModule> GetModuleTypeScheduleModules(ModuleType moduleType)         {            return _scheduleModuleTypeDic.ContainsKey(moduleType) ? _scheduleModuleTypeDic[moduleType]: null;        }    }}
 |