| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Xml;using Aitex.Core.RT.Device;using Aitex.Core.RT.Log;using Aitex.Sorter.Common;using Aitex.Core.Common;using MECF.Framework.Common.Equipment;using CyberX8_RT.Devices;using CyberX8_RT.Devices.YASKAWA;using CyberX8_Core;using MECF.Framework.Common.CommonData;namespace CyberX8_RT.Devices.EFEM{    public abstract class EfemBase : BaseDevice, IDevice    {        public virtual ILoadport this[ModuleName mod] => throw new ApplicationException();        // Properties        //        public new ModuleName Module { get; set; } = ModuleName.EFEM;        public OnlineFlag OnlineFlag { get; set; }        public bool CommunicationConnected { get; protected set; }        protected object _lockerAction = new object();        public string GripStateBlade1        {            get;            set;        }        public string GripStateBlade2        {            get;            set;        }        protected EfemBase()        {        }        protected bool CheckEfemStatus()        {            if (Status == RState.Init)            {                LOG.Write(eEvent.ERR_EFEM_ROBOT, ModuleName.EFEM, "EFEM is not homed, please home first.");                return false;            }            else if (Status == RState.Running)            {                LOG.Write(eEvent.ERR_EFEM_ROBOT, ModuleName.EFEM, $"EFEM is busy, please wait a minute");                return false;            }            else if (Status == RState.Failed || Status == RState.Timeout)            {                LOG.Write(eEvent.ERR_EFEM_ROBOT, ModuleName.EFEM, "EFEM has a error, please check and fix the hardware issue and home it");                return false;            }            return true;        }        public virtual bool Initialize()        {            return true;        }        public abstract void Monitor();        public abstract void Terminate();        public abstract void Reset();        public abstract void SetOnline(bool online);        public abstract void SetOnline(ModuleName mod, bool online);        public abstract void SetBusy(ModuleName mod, bool online);        public virtual RState Status { get; }        public virtual RobotMoveInfo TMRobotMoveInfo { get; }        public virtual bool IsHomed { get; }        public virtual bool LiftIsUp { get; }        public virtual bool LiftIsDown { get; }        public abstract bool HomeAll();        public abstract bool Home(ModuleName mod);        public abstract bool OriginalSearch(ModuleName mod);        public abstract bool CheckWaferPresence();        public abstract string GetWaferPresence();        public abstract bool Halt();        public abstract bool ClearError();        public abstract bool CloseBuzzer();        public abstract bool PickExtend(ModuleName chamber, int slot, Hand hand);        public abstract bool PickRetract(ModuleName chamber, int slot, Hand hand);        public abstract bool PlaceExtend(ModuleName chamber, int slot, Hand hand);        public abstract bool PlaceRetract(ModuleName chamber, int slot, Hand hand);        public abstract bool Pick(ModuleName station, int slot, Hand hand);        public abstract bool Place(ModuleName station, int slot, Hand hand);        public abstract bool Goto(ModuleName station, Hand hand,string updown="UP");        public abstract bool Grip(Hand blade, bool isGrip);        public abstract bool GotoMap(ModuleName mod, Hand hand,string extend="EX");        public abstract bool Map(ModuleName mod);        public abstract bool RequestMapResult(ModuleName mod);        public abstract bool Vacuum(ModuleName mod,bool VacuumState);        public abstract bool SetPinUp(ModuleName mod);        public abstract bool SetPinDown(ModuleName mod);        public abstract bool SetAlignWaferSize();        public abstract bool SetAlignFlatType(int flatType);        public abstract bool SetAlignDistance();        public abstract bool SetAlignAngle(ModuleName mod,double angle);        public abstract bool SetRobotSpeed(ModuleName mod,int speed);        public abstract bool RobotPowerOn(ModuleName mod,bool status);        public abstract bool Align(ModuleName mod, double angle,float delayTime, WaferSize size);        public abstract bool SetLamp(LightType light, LightStatus status);        public abstract bool Load(ModuleName mod);        public abstract bool Unload(ModuleName mod);        public abstract bool ReadCarrierId(ModuleName mod);        public abstract bool WriteCarrierId(ModuleName mod, string id);        public abstract bool ReadTagData(ModuleName mod);        public abstract bool WriteTagData(ModuleName mod, string tagData);        public abstract bool Dock(ModuleName mod);        public abstract bool Undock(ModuleName mod);        public abstract bool Clamp(ModuleName mod, bool isUnloadClamp);        public abstract bool Unclamp(ModuleName mod);        public abstract bool SetThickness(ModuleName mod, string thickness);        public abstract void SetRobotMovingInfo(RobotAction action, Hand hand, ModuleName target);        public abstract bool GetWaferSize(ModuleName mod);        public abstract bool SetWaferSize(ModuleName mod,int WaferSize);    }}
 |