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.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Devices.PUF { public class PufVerticalAxisInterLock : IAxisInterLock { #region 内部变量 private JetAxisBase _axis; #endregion #region 属性 /// /// 模块名称 /// public string Module { get { return _axis.Module; } } /// /// 子模块名称 /// public string Name { get { return _axis.Name; } } #endregion /// /// 构造函数 /// /// /// public PufVerticalAxisInterLock(JetAxisBase axis) { _axis = axis; } /// /// GotoPosition条件检验 /// /// /// public bool CheckGotoPosition(string station) { if (!_axis.IsHomed) { LOG.WriteLog(eEvent.ERROR_PUF_NOT_HOME, $"{Module}.{Name}", "vertical is not home, Cannot execute GotoSavedPosition"); return false; } if (!AxisManager.Instance.CheckModuleAxisSwitchOn(Module,Name)) { return false; } JetAxisBase rotationAxis = DEVICE.GetDevice($"{Module}.Rotation"); double rotationCurrentPosition = rotationAxis.MotionData.MotorPosition; bool loaderInstalled = ModuleHelper.IsInstalled(ModuleName.Loader1); double loaderRotationCurrentPosition = 0; JetAxisBase loaderRotationAxis = DEVICE.GetDevice($"{ModuleName.Loader1}.Rotation"); if(loaderInstalled) { loaderRotationCurrentPosition=loaderRotationAxis.MotionData.MotorPosition; } if (rotationAxis.CheckPositionIsInStation(rotationCurrentPosition, "Park"))//rotation轴在Park位置,Loader1 Rotation轴在TRNPA,Verical轴可以去Park和Robot位置 { if (!loaderInstalled) { return true; } else if (loaderRotationAxis.CheckPositionIsEmpty(loaderRotationCurrentPosition)) { //LOG.WriteLog(eEvent.ERR_PUF, Module, "loader rotation axis is empty, Cannot execute GotoSavedPosition"); //return false; return true; } else if (loaderInstalled&&loaderRotationAxis.CheckPositionIsInStation(loaderRotationCurrentPosition, "TRNPA")) { if (station.EndsWith("Park") || station.EndsWith("Robot")) { return true; } else { LOG.WriteLog(eEvent.ERROR_PUF_OTHER_AXIS_STATION, $"{Module}.{Name}", "vertical can only goto Park or Robot station"); return false; } } else if (loaderInstalled && loaderRotationAxis.CheckPositionIsInStation(loaderRotationCurrentPosition, "LOADA"))//rotation轴在Park位置,Loader1 Rotation轴在LOADA,Verical轴不可以去 { //PUF2 vertical可运动至Park if((station.EndsWith("Park")||station.EndsWith("Robot"))&&Module==ModuleName.PUF2.ToString()) { return true; } LOG.WriteLog(eEvent.ERROR_PUF_OTHER_AXIS_STATION, $"{Module}.{Name}", "Loader rotation in LOADA station,Cannot execute GotoSavedPosition"); return false; } else { LOG.WriteLog(eEvent.ERROR_PUF_OTHER_AXIS_STATION, $"{Module}.{Name}", $"Loader rotation in {loaderRotationAxis.CurrentStation} station,Cannot execute GotoSavedPosition"); return false; } } else if (rotationAxis.CheckPositionIsInStation(rotationCurrentPosition, "Robot"))//rotation轴在Robot位置,Loader1 Rotation轴在LOADA,Verical轴不可以去 { if (!loaderInstalled) { return true; } else if (loaderRotationAxis.CheckPositionIsEmpty(loaderRotationCurrentPosition)) { //LOG.WriteLog(eEvent.ERR_PUF, Module, "loader rotation axis is empty, Cannot execute GotoSavedPosition"); //return false; return true; } if (loaderInstalled&&loaderRotationAxis.CheckPositionIsInStation(loaderRotationCurrentPosition, "TRNPA")) { return true; } else { LOG.WriteLog(eEvent.ERROR_PUF_OTHER_AXIS_STATION, $"{Module}.{Name}", "loader rotation axis is not in TRNPA, Cannot execute GotoSavedPosition"); return false; } } else if (rotationAxis.CheckPositionIsEmpty(rotationCurrentPosition)) { //LOG.WriteLog(eEvent.ERR_PUF, Module, "rotation axis is empty, Cannot execute GotoSavedPosition"); //return false; return true; } else//除Park位置以外,Loader1 Rotation轴在LOADA且Loader Tilt轴在HORIZ,Vertical可以GotoSavedPosition { if (!loaderInstalled) { return true; } else if (loaderInstalled&&loaderRotationAxis.CheckPositionIsInStation(loaderRotationCurrentPosition, "LOADA")) { JetAxisBase loaderTiltAAxis = DEVICE.GetDevice($"{ModuleName.Loader1}.TiltA"); JetAxisBase loaderTiltBAxis = DEVICE.GetDevice($"{ModuleName.Loader1}.TiltB"); double loaderTiltAPosition = loaderTiltAAxis.MotionData.MotorPosition; double loaderTiltBPosition=loaderTiltBAxis.MotionData.MotorPosition; if (Module == ModuleName.PUF1.ToString()) { if (loaderTiltAAxis.CheckPositionIsInStation(loaderTiltAPosition, "HORI")) { return true; } else { LOG.WriteLog(eEvent.ERR_AXIS, $"{Module}.{Name}", $"Loader TiltA {loaderTiltAPosition} is not in HORI,Cannot execute GotoSavedPosition"); return false; } } else { if (loaderTiltBAxis.CheckPositionIsInStation(loaderTiltBPosition, "HORI")) { return true; } else { LOG.WriteLog(eEvent.ERR_AXIS, $"{Module}.{Name}", $"Loader TiltB {loaderTiltBPosition} is not in HORI,Cannot execute GotoSavedPosition"); return false; } } } else { LOG.WriteLog(eEvent.ERROR_PUF_OTHER_AXIS_STATION, $"{Module}.{Name}", $"Loader Rotation {loaderRotationCurrentPosition} is not in LOADA,Cannot execute GotoSavedPosition"); return false; } } } } }