123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- 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.Loader;
- using CyberX8_RT.Devices.TransPorter;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace CyberX8_RT.Devices.PUF
- {
- public class PufRotationAxisInterLock : IAxisInterLock
- {
- #region 常量
- private const string IS_DOOR_OPENED = "IsDoorOpened";
- #endregion
- #region 内部变量
- private JetAxisBase _loaderTransporterGantryAxis;
- private JetAxisBase _axis;
- #endregion
- #region 属性
- /// <summary>
- /// 模块名称
- /// </summary>
- public string Module { get { return _axis.Module; } }
- /// <summary>
- /// 子模块名称
- /// </summary>
- public string Name { get { return _axis.Name; } }
- #endregion
- /// <summary>
- /// 构造函数
- /// </summary>
- /// <param name="Module"></param>
- /// <param name="name"></param>
- public PufRotationAxisInterLock(JetAxisBase axis)
- {
- _axis = axis;
- }
- /// <summary>
- /// 加载LoaderTransporter Gantry轴
- /// </summary>
- private void GetLoaderTransporterGantryAxis()
- {
- if(_loaderTransporterGantryAxis==null)
- {
- _loaderTransporterGantryAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.Transporter2}.Gantry");
- }
- }
- /// <summary>
- /// GotoPosition检验条件
- /// </summary>
- /// <param name="station"></param>
- /// <returns></returns>
- /// <exception cref="NotImplementedException"></exception>
- public bool CheckGotoPosition(string station)
- {
- if (!_axis.IsHomed)
- {
- LOG.WriteLog(eEvent.ERROR_PUF_NOT_HOME, $"{Module}.{Name}", "axis is not homed, Cannot execute GotoSavedPosition");
- return false;
- }
- if (!AxisManager.Instance.CheckModuleAxisSwitchOn(Module, Name))
- {
- return false;
- }
- JetAxisBase flipAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Flip");
- if (flipAxis.IsRun)
- {
- LOG.WriteLog(eEvent.ERROR_PUF_OTHERAXIS_RUNNING, $"{Module}.{Name}", "flip is running, Cannot execute GotoSavedPosition");
- return false;
- }
- JetAxisBase verticalAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Vertical");
- if (verticalAxis.IsRun)
- {
- LOG.WriteLog(eEvent.ERROR_PUF_OTHERAXIS_RUNNING, $"{Module}.{Name}", "vertical is running, Cannot execute GotoSavedPosition");
- return false;
- }
- double verticalPosition = verticalAxis.MotionData.MotorPosition;
- bool loaderInstalled = ModuleHelper.IsInstalled(ModuleName.Loader1);
- JetAxisBase loaderRotationAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.Loader1}.Rotation");
- double loaderRotationPosition = loaderInstalled?loaderRotationAxis.MotionData.MotorPosition:0;
- bool loaderTransporterInstalled = ModuleHelper.IsInstalled(ModuleName.Transporter2);
- if(loaderTransporterInstalled)
- {
- GetLoaderTransporterGantryAxis();
- }
- if (verticalAxis.CheckPositionIsInStation(verticalPosition, "Park"))//vertical轴在Park位置,Loader transporter在Loader右侧,Rotation轴可以GotoSavedPosition
- {
- if (loaderTransporterInstalled&&_loaderTransporterGantryAxis.JudgeCompareTargetStation("Loader","Right"))//LoaderTransPorter在Loader的右侧(位置不在Loader),Rotation轴可以GotoSavedPosition
- {
- return true;
- }
- else if (!loaderTransporterInstalled)
- {
- return true;
- }
- else
- {
- LOG.WriteLog(eEvent.ERROR_PUF_OTHER_AXIS_STATION, $"{Module}.{Name}", "loader transporter axis is in loader station, Cannot execute GotoSavedPosition");
- return false;
- }
- }
- else if (verticalAxis.CheckPositionIsEmpty(verticalPosition))
- {
- LOG.WriteLog(eEvent.ERROR_PUF_OTHER_AXIS_EMPTY, $"{Module}.{Name}", $"vertical axis {verticalPosition} is empty, Cannot execute GotoSavedPosition");
- return false;
- }
- else//Vertical轴在Park以外的位置
- {
- if (!loaderInstalled)
- {
- return true;
- }
- else if (loaderRotationAxis == null || loaderRotationAxis.CheckPositionIsEmpty(loaderRotationPosition))
- {
- LOG.WriteLog(eEvent.ERROR_PUF_OTHER_AXIS_EMPTY, $"{Module}.{Name}", $"loader rotation axis {loaderRotationPosition} is empty, Cannot execute GotoSavedPosition");
- return false;
- }
- else if (loaderRotationAxis.CheckPositionIsInStation(loaderRotationPosition, "TRNPA"))//loader1 rotation轴在TRNPA,Rotation轴只可以在Robot和Park位置
- {
- string selectedItem = station;
- if (selectedItem.EndsWith("Park") || selectedItem.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 (loaderRotationAxis.CheckPositionIsInStation(loaderRotationPosition,"LOADA"))//loader1 rotation轴在LOADA,同时Loader1 门已经打开,Rotation轴不可以去Park和Robot位置
- {
- string selectedItem = station;
- LoaderSideDevice loaderSideDevice = LoadLoaderSideDevice();
- if(loaderSideDevice==null)
- {
- return true;
- }
-
- if (loaderSideDevice.SideData.DoorLowerUnlocked||loaderSideDevice.SideData.DoorUpperUnlocked)
- {
- if (selectedItem.EndsWith("Park") || selectedItem.EndsWith("Robot"))
- {
- LOG.WriteLog(eEvent.ERROR_PUF_OTHER_AXIS_STATION, $"{Module}.{Name}", "loader door open,rotation cannot goto Park or Robot station");
- return false;
- }
- else
- {
- return true;
- }
- }
- else
- {
- return true;
- }
- }
- else
- {
- return true;
- }
- }
- }
- /// <summary>
- /// 获取Loader Side设备
- /// </summary>
- /// <returns></returns>
- private LoaderSideDevice LoadLoaderSideDevice()
- {
- if(Module==ModuleName.PUF1.ToString())
- {
- return DEVICE.GetDevice<LoaderSideDevice>($"{ModuleName.Loader1}.SideA");
- }
- else
- {
- return DEVICE.GetDevice<LoaderSideDevice>($"{ModuleName.Loader1}.SideB");
- }
- }
- }
- }
|