using Aitex.Core.RT.DataCenter; using Aitex.Core.RT.Device; using Aitex.Core.RT.Device.Unit; using Aitex.Core.RT.IOCore; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.SubstrateTrackings; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FurnaceRT.Equipments.Systems { public class FurnaceStocker : BaseDevice, IDevice { public enum StockerCarrierState { Empty, Ready, WaitForProcess, Processed } public FurnaceStocker(ModuleName module) { Module = module.ToString(); Name = module.ToString(); } #region fields private IoSensor _diStationCassettePresent; #endregion #region properties public bool IsCassettePresent { get { if(SC.GetValue("System.IsSimulatorMode")) return CarrierManager.Instance.HasCarrier(Module); return _diStationCassettePresent.Value; } } public bool IsCassetteHasWafer { get; set; } #endregion public bool Initialize() { CarrierManager.Instance.SubscribeLocation(Module, 1, SC.GetValue("System.CassetteSlotCount")); WaferManager.Instance.SubscribeLocation(Module, SC.GetValue("System.CassetteSlotCount")); DATA.Subscribe(Name, "CassettePresent", () => IsCassettePresent); DATA.Subscribe(Name, "CassetteHasWafer", () => IsCassetteHasWafer); DATA.Subscribe(Name, "LotID", () => CarrierManager.Instance.CheckHasCarrier(Module, 0) ? CarrierManager.Instance.GetCarrier(Module, 0).LotId : ""); _diStationCassettePresent = DEVICE.GetDevice($"System.SensorStation{(Module.Replace("Stocker",""))}Presence"); return true; } public void Monitor() { } public void Reset() { } public void Terminate() { } } }