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 LoaderRotationAxisInterLock : IAxisInterLock { #region 内部变量 private JetAxisBase _loadTransporterGantryAxis; private JetAxisBase _axis; #endregion #region 属性 /// /// 模块名称 /// public string Module { get { return _axis.Module; } } /// /// 子模块名称 /// public string Name { get { return _axis.Name; } } #endregion /// /// 构造函数 /// /// /// public LoaderRotationAxisInterLock(JetAxisBase axis) { _axis = axis; } /// /// GotoPosition条件检验 /// /// /// /// public bool CheckGotoPosition(string station) { if (!_axis.IsHomed) { LOG.WriteLog(eEvent.ERR_LOADER, Module, "Rotation is not home, Cannot execute GotoSavedPosition"); return false; } if (!AxisManager.Instance.CheckModuleAxisSwitchOn(Module,Name)) { return false; } JetAxisBase swingAAxis = DEVICE.GetDevice($"{Module}.SwingA"); if (swingAAxis.IsRun) { LOG.WriteLog(eEvent.ERR_PUF, Module, "swingA is running, Cannot execute GotoSavedPosition"); return false; } JetAxisBase swingBAxis = DEVICE.GetDevice($"{Module}.SwingB"); if (swingBAxis.IsRun) { LOG.WriteLog(eEvent.ERR_PUF, Module, "swingB is running, Cannot execute GotoSavedPosition"); return false; } JetAxisBase tiltAAxis = DEVICE.GetDevice($"{Module}.TiltA"); if (tiltAAxis.IsRun) { LOG.WriteLog(eEvent.ERR_PUF, Module, "tiltA is running, Cannot execute GotoSavedPosition"); return false; } JetAxisBase tiltBAxis = DEVICE.GetDevice($"{Module}.TiltB"); if (tiltBAxis.IsRun) { LOG.WriteLog(eEvent.ERR_PUF, Module, "tiltB is running, Cannot execute GotoSavedPosition"); return false; } if (ModuleHelper.IsInstalled(ModuleName.PUF1)) { JetAxisBase puf1VerticalAxis = DEVICE.GetDevice($"{ModuleName.PUF1}.Vertical"); double puf1VerticalPosition = puf1VerticalAxis.MotionData.MotorPosition; if (!puf1VerticalAxis.CheckPositionIsInStation(puf1VerticalPosition, "Park")) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"PUF1 Vertical {puf1VerticalPosition} is not in Park station,Cannot execute GotoSavedPosition"); return false; } } if (ModuleHelper.IsInstalled(ModuleName.PUF2)) { JetAxisBase puf2VerticalAxis = DEVICE.GetDevice($"{ModuleName.PUF2}.Vertical"); double puf2VerticalPosition=puf2VerticalAxis.MotionData.MotorPosition; if (!puf2VerticalAxis.CheckPositionIsInStation(puf2VerticalPosition, "Park") && !puf2VerticalAxis.CheckPositionIsInStation(puf2VerticalPosition, "Robot")) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"PUF2 Vertical {puf2VerticalPosition} is not in Park and Robot station,Cannot execute GotoSavedPosition"); return false; } JetAxisBase puf2RotationAxis = DEVICE.GetDevice($"{ModuleName.PUF2}.Rotation"); double puf2RotationPosition=puf2RotationAxis.MotionData.MotorPosition; if (!puf2RotationAxis.CheckPositionIsInStation(puf2RotationPosition, "Park") && !puf2RotationAxis.CheckPositionIsInStation(puf2RotationPosition, "Robot")) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"PUF2 Rotation {puf2RotationPosition} is not in Park and Robot station,Cannot execute GotoSavedPosition"); return false; } } JetAxisBase loaderSwingAAxis = DEVICE.GetDevice($"{ModuleName.Loader1}.SwingA"); double swingAPosition=loaderSwingAAxis.MotionData.MotorPosition; if (!loaderSwingAAxis.CheckPositionIsInStation(swingAPosition, "CLOSED")) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"Loader1 SwingA {swingAPosition} is not in CLOSED station,Cannot execute GotoSavedPosition"); return false; } JetAxisBase loaderSwingBAxis = DEVICE.GetDevice($"{ModuleName.Loader1}.SwingB"); double swingBPosition = loaderSwingBAxis.MotionData.MotorPosition; if (!loaderSwingBAxis.CheckPositionIsInStation(swingBPosition, "CLOSED")) { LOG.WriteLog(eEvent.ERR_LOADER, Module, $"Loader1 SwingB {swingBPosition} is not in CLOSED station,Cannot execute GotoSavedPosition"); return false; } bool loaderTransporterInstalled = ModuleHelper.IsInstalled(ModuleName.Transporter2); if(loaderTransporterInstalled) { _loadTransporterGantryAxis = DEVICE.GetDevice($"{ModuleName.Transporter2}.Gantry"); if (_loadTransporterGantryAxis!=null&&!_loadTransporterGantryAxis.JudgeCompareTargetStation("Loader","Right")) { LOG.WriteLog(eEvent.ERR_PUF, Module, "loader transporter axis is in loader station, Cannot execute GotoSavedPosition"); return false; } } return true; } } }