using Aitex.Core.RT.Device; using Aitex.Sorter.Common; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.Schedulers; using MECF.Framework.Common.SubstrateTrackings; using MECF.Framework.RT.EquipmentLibrary.LogicUnits; using FurnaceRT.Equipments.Systems; namespace FurnaceRT.Equipments.PMs { public abstract class PMModuleBase : ModuleFsmDevice, ITransferTarget, IModuleDevice { private int _slot = 1; public PMModuleBase(int slot) { _slot = slot; } public override bool Initialize() { WaferManager.Instance.SubscribeLocation(Module, _slot); return base.Initialize(); } public abstract double ChamberPressure { get; } public abstract bool CheckAcked(int entityTaskToken); //IModuleDevice public abstract bool IsReady { get; } public abstract bool IsError { get; } public abstract bool IsInit { get; } public abstract bool Home(out string reason); //ITransferTarget public abstract bool PrepareTransfer(ModuleName robot, Hand blade, int targetSlot, EnumTransferType transferType, out string reason); public abstract bool TransferHandoff(ModuleName robot, Hand blade, int targetSlot, EnumTransferType transferType, out string reason); public abstract bool PostTransfer(ModuleName robot, Hand blade, int targetSlot, EnumTransferType transferType, out string reason); public abstract bool CheckReadyForTransfer(ModuleName robot, Hand blade, int targetSlot, EnumTransferType transferType, out string reason); public abstract void NoteTransferStart(ModuleName robot, Hand blade, int targetSlot, EnumTransferType transferType); public abstract void NoteTransferStop(ModuleName robot, Hand blade, int targetSlot, EnumTransferType transferType); //Process public abstract bool Process(string recipeName, bool isCleanRecipe, bool withWafer, out string reason); public abstract bool Standby(string recipeName, out string reason); public abstract bool CheckPrepareProcess(); public abstract bool CheckProcessFinished(); public abstract bool CheckStandbyCondition(); //Pump public abstract bool TurnOnPump(out string reason); public abstract bool CheckPumpIsOn(); public abstract bool CheckSlitValveClose(); //Lid public abstract bool CheckLidClosed(); } }