using Aitex.Core.Common; 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.HardwareUnits.PMs; using MECF.Framework.RT.EquipmentLibrary.LogicUnits; using MECF.Framework.RT.ModuleLibrary.Commons; namespace MECF.Framework.RT.ModuleLibrary.PMModules { 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 PrepareTransfer(ModuleName robot, Hand blade, int[] targetSlot, EnumTransferType transferType, double temp1, double temp2, bool EanbleCheck, out string reason, EnumDualPM enumDual = EnumDualPM.None); 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); public abstract bool CheckTempReady(double Temp1, double Temp2); public abstract bool CheckTransferTempReady(double Temp1, double Temp2); //Process public abstract bool Process(string recipeName, bool isCleanRecipe, bool withWafer, out string reason); //Pump public abstract bool PreparePump(out string reason); public abstract bool CheckPreparePump(); public abstract bool SlowPump(int tvPosition, out string reason); public abstract bool FastPump(int tvPosition, out string reason); public abstract bool TurnOnPump(out string reason); public abstract bool CheckPumpIsOn(); public abstract bool ShutDownPump(out string reason); public abstract bool AbortPump(); //Vent public abstract bool PrepareVent(out string reason); public abstract bool CheckPrepareVent(); public abstract bool Vent(out string reason); public abstract bool StopVent(out string reason); //PreHeat public abstract bool InvokePreHeat(double temperature1, double temperature2); //Leak check //public abstract bool PrepareLeakCheck(out string reason); //public abstract bool CheckPrepareLeakCheck(); //public abstract bool AbortLeakCheck(); //Slit Valve //public abstract bool OpenSlitValve(out string reason); //public abstract bool CheckSlitValveOpen(); public abstract bool CloseSlitValve(out string reason); public abstract bool CheckSlitValveClose(); public abstract bool CheckLiftUp(int _slot); public abstract bool CheckLiftDown(int _slot); public abstract bool IsPrepareTransferReady(EnumTransferType type, EnumDualPM pos, WaferSize waferSize); public abstract void AssertPMReady(string description); //Lid public abstract bool CheckLidClosed(); public abstract bool CheckTemp1Alarm(double recipeTemp1); public abstract bool CheckTemp2Alarm(double recipeTemp2); } }