LoaderRotationAxisInterLock.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using Aitex.Core.RT.DataCenter;
  2. using Aitex.Core.RT.Device;
  3. using Aitex.Core.RT.Log;
  4. using MECF.Framework.Common.Equipment;
  5. using MECF.Framework.Common.Utilities;
  6. using CyberX8_RT.Devices.AXIS;
  7. using CyberX8_RT.Devices.AXIS.Yaskawa;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace CyberX8_RT.Devices.Loader
  14. {
  15. public class LoaderRotationAxisInterLock : IAxisInterLock
  16. {
  17. #region 内部变量
  18. private JetAxisBase _loadTransporterGantryAxis;
  19. private JetAxisBase _axis;
  20. #endregion
  21. #region 属性
  22. /// <summary>
  23. /// 模块名称
  24. /// </summary>
  25. public string Module { get { return _axis.Module; } }
  26. /// <summary>
  27. /// 子模块名称
  28. /// </summary>
  29. public string Name { get { return _axis.Name; } }
  30. #endregion
  31. /// <summary>
  32. /// 构造函数
  33. /// </summary>
  34. /// <param name="Module"></param>
  35. /// <param name="name"></param>
  36. public LoaderRotationAxisInterLock(JetAxisBase axis)
  37. {
  38. _axis = axis;
  39. }
  40. /// <summary>
  41. /// GotoPosition条件检验
  42. /// </summary>
  43. /// <param name="station"></param>
  44. /// <returns></returns>
  45. /// <exception cref="NotImplementedException"></exception>
  46. public bool CheckGotoPosition(string station)
  47. {
  48. if (!_axis.IsHomed)
  49. {
  50. LOG.WriteLog(eEvent.ERR_LOADER, Module, "Rotation is not home, Cannot execute GotoSavedPosition");
  51. return false;
  52. }
  53. if (!AxisManager.Instance.CheckModuleAxisSwitchOn(Module,Name))
  54. {
  55. return false;
  56. }
  57. JetAxisBase swingAAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.SwingA");
  58. if (swingAAxis.IsRun)
  59. {
  60. LOG.WriteLog(eEvent.ERR_PUF, Module, "swingA is running, Cannot execute GotoSavedPosition");
  61. return false;
  62. }
  63. JetAxisBase swingBAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.SwingB");
  64. if (swingBAxis.IsRun)
  65. {
  66. LOG.WriteLog(eEvent.ERR_PUF, Module, "swingB is running, Cannot execute GotoSavedPosition");
  67. return false;
  68. }
  69. JetAxisBase tiltAAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.TiltA");
  70. if (tiltAAxis.IsRun)
  71. {
  72. LOG.WriteLog(eEvent.ERR_PUF, Module, "tiltA is running, Cannot execute GotoSavedPosition");
  73. return false;
  74. }
  75. JetAxisBase tiltBAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.TiltB");
  76. if (tiltBAxis.IsRun)
  77. {
  78. LOG.WriteLog(eEvent.ERR_PUF, Module, "tiltB is running, Cannot execute GotoSavedPosition");
  79. return false;
  80. }
  81. if (ModuleHelper.IsInstalled(ModuleName.PUF1))
  82. {
  83. JetAxisBase puf1VerticalAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.PUF1}.Vertical");
  84. double puf1VerticalPosition = puf1VerticalAxis.MotionData.MotorPosition;
  85. if (!puf1VerticalAxis.CheckPositionIsInStation(puf1VerticalPosition, "Park"))
  86. {
  87. LOG.WriteLog(eEvent.ERR_LOADER, Module, $"PUF1 Vertical {puf1VerticalPosition} is not in Park station,Cannot execute GotoSavedPosition");
  88. return false;
  89. }
  90. }
  91. if (ModuleHelper.IsInstalled(ModuleName.PUF2))
  92. {
  93. JetAxisBase puf2VerticalAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.PUF2}.Vertical");
  94. double puf2VerticalPosition=puf2VerticalAxis.MotionData.MotorPosition;
  95. if (!puf2VerticalAxis.CheckPositionIsInStation(puf2VerticalPosition, "Park") &&
  96. !puf2VerticalAxis.CheckPositionIsInStation(puf2VerticalPosition, "Robot"))
  97. {
  98. LOG.WriteLog(eEvent.ERR_LOADER, Module, $"PUF2 Vertical {puf2VerticalPosition} is not in Park and Robot station,Cannot execute GotoSavedPosition");
  99. return false;
  100. }
  101. JetAxisBase puf2RotationAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.PUF2}.Rotation");
  102. double puf2RotationPosition=puf2RotationAxis.MotionData.MotorPosition;
  103. if (!puf2RotationAxis.CheckPositionIsInStation(puf2RotationPosition, "Park") &&
  104. !puf2RotationAxis.CheckPositionIsInStation(puf2RotationPosition, "Robot"))
  105. {
  106. LOG.WriteLog(eEvent.ERR_LOADER, Module, $"PUF2 Rotation {puf2RotationPosition} is not in Park and Robot station,Cannot execute GotoSavedPosition");
  107. return false;
  108. }
  109. }
  110. JetAxisBase loaderSwingAAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.Loader1}.SwingA");
  111. double swingAPosition=loaderSwingAAxis.MotionData.MotorPosition;
  112. if (!loaderSwingAAxis.CheckPositionIsInStation(swingAPosition, "CLOSED"))
  113. {
  114. LOG.WriteLog(eEvent.ERR_LOADER, Module, $"Loader1 SwingA {swingAPosition} is not in CLOSED station,Cannot execute GotoSavedPosition");
  115. return false;
  116. }
  117. JetAxisBase loaderSwingBAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.Loader1}.SwingB");
  118. double swingBPosition = loaderSwingBAxis.MotionData.MotorPosition;
  119. if (!loaderSwingBAxis.CheckPositionIsInStation(swingBPosition, "CLOSED"))
  120. {
  121. LOG.WriteLog(eEvent.ERR_LOADER, Module, $"Loader1 SwingB {swingBPosition} is not in CLOSED station,Cannot execute GotoSavedPosition");
  122. return false;
  123. }
  124. bool loaderTransporterInstalled = ModuleHelper.IsInstalled(ModuleName.Transporter2);
  125. if(loaderTransporterInstalled)
  126. {
  127. _loadTransporterGantryAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.Transporter2}.Gantry");
  128. if (_loadTransporterGantryAxis!=null&&!_loadTransporterGantryAxis.JudgeCompareTargetStation("Loader","Right"))
  129. {
  130. LOG.WriteLog(eEvent.ERR_PUF, Module, "loader transporter axis is in loader station, Cannot execute GotoSavedPosition");
  131. return false;
  132. }
  133. }
  134. return true;
  135. }
  136. }
  137. }