using Aitex.Core.RT.Device; using Aitex.Core.RT.Log; using MECF.Framework.Common.Equipment; using CyberX8_RT.Devices.AXIS; using System; using Aitex.Core.Util; using CyberX8_RT.Modules.PUF; using CyberX8_RT.Modules.Transporter; using CyberX8_RT.Modules; namespace CyberX8_RT.Devices.Loader { public class LoaderShuttleAxisInterLock : IAxisInterLock { #region 内部变量 private JetAxisBase _axis; #endregion #region 属性 /// /// 模块名称 /// public string Module { get { return _axis.Module ; } } /// /// 子模块名称 /// public string Name { get { return _axis.Name; } } #endregion #region 内部变量 private LoaderSideDevice _loaderSide = null; #endregion /// /// 构造函数 /// /// /// public LoaderShuttleAxisInterLock(JetAxisBase axis) { _axis = axis; } /// /// 加载LoaderSide对象 /// private void GetLoaderSide() { if (_loaderSide == null) { switch (Name) { case "ShuttleA": _loaderSide = DEVICE.GetDevice($"{Module}.SideA"); break; default: _loaderSide = DEVICE.GetDevice($"{Module}.SideB"); break; } } } /// /// GotoPosition条件检验 /// /// /// /// public bool CheckGotoPosition(string station) { //Check Home if (!CheckHomeCondition()) { return false; } //Shuttle Home if (!_axis.IsHomed) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{Name} is not home, Cannot execute GotoSavedPosition"); return false; } JetAxisBase rotationAxis = DEVICE.GetDevice($"{Module}.Rotation"); if(rotationAxis == null) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{Module} rotation Axis is null"); return false; } if (!rotationAxis.IsSwitchOn) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{rotationAxis.Module} is switch off"); return false; } if (rotationAxis.Status == CyberX8_Core.RState.Running) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{Name} rotation status is running, Cannot execute GotoSavedPosition"); return false; } GetLoaderSide(); JetAxisBase tiltAxis = null; if (Name == "ShuttleA") { tiltAxis = DEVICE.GetDevice($"{Module}.TiltA"); } else { tiltAxis = DEVICE.GetDevice($"{Module}.TiltB"); } if (tiltAxis == null) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{Module} tilt Axis is null"); return false; } if (!tiltAxis.IsSwitchOn) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{tiltAxis.Module} is switch off"); return false; } if (tiltAxis.Status==CyberX8_Core.RState.Running) { LOG.WriteLog(eEvent.ERR_LOADER, Module, "tilt status is running,Cannot execute GotoSavedPosition"); return false; } //Loader 的 TILT 轴在‘VERT’位 double tiltPosition = tiltAxis.MotionData.MotorPosition; if (!tiltAxis.CheckPositionIsInStation(tiltPosition, "VERT")) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{Module} Tilt {tiltPosition} is not in VERT station,Cannot execute GotoSavedPosition"); return false; } //PUF1 的 ROTATION 轴在‘HOME’、‘FLIP’或‘ROBOT’位 if (ModuleHelper.IsInstalled(ModuleName.PUF1)) { JetAxisBase puf1RotationAxis = DEVICE.GetDevice($"{ModuleName.PUF1}.Rotation"); if (puf1RotationAxis == null) { LOG.WriteLog(eEvent.ERR_PUF, Module, "Puf1 Rotation Axis is null"); return false; } double puf1RotationPosition = puf1RotationAxis.MotionData.MotorPosition; if (!puf1RotationAxis.CheckPositionIsInStation(puf1RotationPosition, "Home") && !puf1RotationAxis.CheckPositionIsInStation(puf1RotationPosition, "Flip") && !puf1RotationAxis.CheckPositionIsInStation(puf1RotationPosition, "Robot")) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"PUF1 Rotation {puf1RotationPosition} is not in Home, Flip or Robot station,Cannot execute GotoSavedPosition"); return false; } } return true; } /// /// Check Home /// /// private bool CheckHomeCondition() { //Efem Home if (ModuleHelper.IsInstalled(ModuleName.EFEM)) { EfemEntity efemEntity = Singleton.Instance.GetModule(ModuleName.EFEM.ToString()); if (efemEntity == null) { LOG.WriteLog(eEvent.ERR_EFEM_ROBOT, Module, $"{ModuleName.EFEM.ToString()} entity is null"); return false; } if (!efemEntity.IsHomed) { LOG.WriteLog(eEvent.ERR_EFEM_ROBOT, Module, $"{ModuleName.EFEM.ToString()} is not home, Cannot execute GotoSavedPosition"); return false; } } //Transporter2 Home if (ModuleHelper.IsInstalled(ModuleName.Transporter2)) { TransporterEntity loaderTransporterEntity = Singleton.Instance.GetModule(ModuleName.Transporter2.ToString()); if (loaderTransporterEntity == null) { LOG.WriteLog(eEvent.ERR_TRANSPORTER, Module, $"{ModuleName.Transporter2.ToString()} entity is null"); return false; } if (!loaderTransporterEntity.IsHomed) { LOG.WriteLog(eEvent.ERR_TRANSPORTER, Module, $"{ModuleName.Transporter2.ToString()} is not home, Cannot execute GotoSavedPosition"); return false; } } //Puf1 Home if (ModuleHelper.IsInstalled(ModuleName.PUF1)) { PUFEntity puf1Entity = Singleton.Instance.GetModule(ModuleName.PUF1.ToString()); if (puf1Entity == null) { LOG.WriteLog(eEvent.ERR_PUF, Module, $"{ModuleName.PUF1.ToString()} entity is null"); return false; } if (!puf1Entity.IsHomed) { LOG.WriteLog(eEvent.ERR_PUF, Module, $"{ModuleName.PUF1.ToString()} is not home, Cannot execute GotoSavedPosition"); return false; } } return true; } } }