using Aitex.Core.Util; using Aitex.Sorter.Common; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.Schedulers; using MECF.Framework.Common.SubstrateTrackings; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Venus_RT.Modules.VCE; using Venus_RT.Scheduler; namespace Venus_RT.Modules.Schedulers { public class SchedulerVCE : SchedulerModule { #region 私有变量 private VceEntity _entity; #endregion #region 公开变量 public override bool IsAvailable => _entity.IsIdle && CheckTaskDone(); public override bool IsOnline => true; public override bool IsError => _entity.IsError; #endregion public SchedulerVCE(ModuleName module) : base(module.ToString()) { _module = module.ToString(); _entity = Singleton.Instance.VCE; } public override bool IsReadyForPick(ModuleName robot, int slot, Hand blade) { return _entity.IsPrepareTransferReady(Module, EnumTransferType.Pick, slot) && WaferManager.Instance.CheckHasWafer(ModuleHelper.Converter(_module), slot); } public override bool IsReadyForPlace(ModuleName robot, int slot, Hand blade) { return _entity.IsPrepareTransferReady(Module, EnumTransferType.Place, slot) && WaferManager.Instance.CheckNoWafer(ModuleHelper.Converter(_module), slot); } public bool CheckTaskDone() { bool ret = false; switch (_task) { case TaskType.None: ret = true; break; case TaskType.PrepareTransfer: ret = _entity.IsPrepareTransferReady(ModuleName.EfemRobot, EnumTransferType.Pick, 0); break; } if (ret && _task != TaskType.None) { LogTaskDone(_task, ""); _task = TaskType.None; } return ret; } } }