using Aitex.Core.RT.DataCenter; using Aitex.Core.RT.Device; using Aitex.Core.RT.Log; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.Utilities; using CyberX8_RT.Devices.AXIS; using CyberX8_RT.Devices.AXIS.Yaskawa; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Devices.Loader { public class LoaderSwingAxisInterLock : 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 LoaderSwingAxisInterLock(JetAxisBase axis) { _axis = axis; } /// /// 加载LoaderSide对象 /// private void GetLoaderSide() { if (_loaderSide == null) { switch (Name) { case "SwingA": _loaderSide = DEVICE.GetDevice($"{Module}.SideA"); break; default: _loaderSide = DEVICE.GetDevice($"{Module}.SideB"); break; } } } /// /// GotoPosition条件检验 /// /// /// /// public bool CheckGotoPosition(string station) { if (!_axis.IsHomed) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{Name} is not home, Cannot execute GotoSavedPosition"); return false; } GetLoaderSide(); JetAxisBase tiltAxis = null; if(Name=="SwingA") { tiltAxis = DEVICE.GetDevice($"{Module}.TiltA"); } else { tiltAxis = DEVICE.GetDevice($"{Module}.TiltB"); } if (!tiltAxis.IsSwitchOn) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{tiltAxis.Module} is switch off"); return false; } if (tiltAxis.IsRun) { LOG.WriteLog(eEvent.ERR_LOADER, Module, "tilt is running,Cannot execute GotoSavedPosition"); return false; } if (station.EndsWith("CLOSED")) { double tiltPosition = tiltAxis.MotionData.MotorPosition; if(!tiltAxis.CheckPositionIsInStation(tiltPosition, "VERT")) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{tiltAxis.Module} {tiltPosition} is not in VERT"); return false; } } //Puf vertical is park if (ModuleHelper.IsInstalled(ModuleName.PUF1)) { JetAxisBase puf1VerticalAxis = DEVICE.GetDevice($"{ModuleName.PUF1}.Vertical"); if (puf1VerticalAxis != null) { double puf1VertocalPosition = puf1VerticalAxis.MotionData.MotorPosition; if (!puf1VerticalAxis.CheckPositionIsInStation(puf1VertocalPosition, "Park")) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{ModuleName.PUF1} Vertical {puf1VertocalPosition} is not in Park, Cannot execute GotoSavedPosition"); return false; } } } if (ModuleHelper.IsInstalled(ModuleName.PUF2)) { JetAxisBase puf2VerticalAxis = DEVICE.GetDevice($"{ModuleName.PUF2}.Vertical"); if (puf2VerticalAxis != null) { double puf2VerticalPosition=puf2VerticalAxis.MotionData.MotorPosition; if (!puf2VerticalAxis.CheckPositionIsInStation(puf2VerticalPosition, "Park")) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{ModuleName.PUF2} Vertical {puf2VerticalPosition} is not in Park, Cannot execute GotoSavedPosition"); return false; } } } //Door 在Closed,无法从其他位置运动至Closed位置 if (_loaderSide.SideData.DoorLowerLocked||_loaderSide.SideData.DoorUpperLocked) { if (station.EndsWith("CLOSED")) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"door locked, {Name} cannot goto CLOSED"); return false; } else { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"door locked, {Name} cannot move to other stations"); return false; } } JetAxisBase rotationAxis = DEVICE.GetDevice($"{Module}.Rotation"); if (!rotationAxis.IsSwitchOn) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{rotationAxis.Module} is switch off"); return false; } if (rotationAxis.IsRun) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"rotation is running,Cannot execute GotoSavedPosition"); return false; } double rotationPosition = rotationAxis.MotionData.MotorPosition; if (rotationAxis.CheckPositionIsEmpty(rotationPosition)) { //LOG.WriteLog(eEvent.ERR_LOADER, Module, "loader rotation axis is empty, Cannot execute GotoSavedPosition"); //return false; return true; } else { if (rotationAxis.CheckPositionIsInStation(rotationPosition, "LOADA300") || rotationAxis.CheckPositionIsInStation(rotationPosition, "LOADB300")|| rotationAxis.CheckPositionIsInStation(rotationPosition, "SERVICEB")) { return true; } else if (rotationAxis.CheckPositionIsInStation(rotationPosition, "CAMERA")) { if (station.EndsWith("CAMERA")) { return true; } else { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"loader rotation axis {rotationPosition} is in Camera, {Name} only goto Camera"); return false; } } else { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"loader rotation axis is in {rotationAxis.CurrentStation}, can not go to position"); return false; } } } } }