using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Aitex.Core.Util; using Aitex.Sorter.Common; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.Schedulers; using MECF.Framework.Common.SubstrateTrackings; //using Venus_RT.Modules.VCE; using Venus_RT.Scheduler; namespace Venus_RT.Modules.Schedulers { public class SchedulerLoadPort : SchedulerModule { public override bool IsAvailable { get { return IsIdle && IsLoaded && CheckTaskDone(); } } public override bool IsOnline { get { return _entity.IsOnline; } } public override bool IsError { get { return _entity.IsError; } } public override bool IsIdle { get { return _entity.IsIdle; } } public bool IsLoaded { get { return _entity.EfemDevice[Module].IsLoaded; } } public string CarrierId { get { return _entity.LPCarrierId(ModuleHelper.Converter(_module)); } } private EfemEntity _entity = null; //private VceEntity _vceEntity = null; //private bool _isVenus = RtInstance.ConfigType == Venus_Core.ConfigType.VenusSE || RtInstance.ConfigType == Venus_Core.ConfigType.VenusDE; public SchedulerLoadPort(ModuleName module) : base(module.ToString()) { _module = module.ToString(); //switch (RtInstance.ConfigType) //{ // case Venus_Core.ConfigType.VenusSE: // _vceEntity = Singleton.Instance.VCE; // break; // case Venus_Core.ConfigType.VenusDE: // if (module == ModuleName.LP2) // _vceEntity = Singleton.Instance.VCEB; // else // _vceEntity = Singleton.Instance.VCEA; // break; // default: // _entity = Singleton.Instance.EFEM; // break; //} _entity = Singleton.Instance.EFEM; } public bool Load() { //_busy = true; //_entity.Load(_chamber); return true; } public bool Unload() { //_busy = true; //_entity.Unloaded(_chamber); return true; } public bool Monitor() { return true; } 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; } internal bool CheckReadyRunJob() { return _entity.CheckReadyRunNewJob(this.Module); } internal bool CheckReadyTransfer() { return _entity.CheckReadyTransfer(this.Module); } internal bool CheckPlaced() { return _entity.CheckPlaced(this.Module); } public void NoteJobStart() { _entity.NoteJobStart(ModuleHelper.Converter(_module)); } public void NoteJobComplete() { } } }