TransporterElevatorUpRoutine.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Log;
  3. using Aitex.Core.RT.Routine;
  4. using MECF.Framework.Common.Routine;
  5. using CyberX8_Core;
  6. using CyberX8_RT.Devices.AXIS;
  7. using CyberX8_RT.Devices.TransPorter;
  8. using CyberX8_RT.Modules.Loader;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace CyberX8_RT.Modules.Transporter
  15. {
  16. public class TransporterElevatorUpRoutine : RoutineBase, IRoutine
  17. {
  18. private enum ParkStep
  19. {
  20. CheckStatus,
  21. ElevatorUp,
  22. ElevatorUpWait,
  23. End
  24. }
  25. #region 内部变量
  26. private JetAxisBase _elevatorAxis;
  27. private JetAxisBase _gantryAxis;
  28. private TransporterCommon _transporterCommon;
  29. #endregion
  30. /// <summary>
  31. /// 构造函数
  32. /// </summary>
  33. /// <param name="module"></param>
  34. public TransporterElevatorUpRoutine(string module) : base(module)
  35. {
  36. }
  37. /// <summary>
  38. /// 中止
  39. /// </summary>
  40. public void Abort()
  41. {
  42. Runner.Stop("Manual Abort");
  43. }
  44. /// <summary>
  45. /// 监控
  46. /// </summary>
  47. /// <returns></returns>
  48. public RState Monitor()
  49. {
  50. Runner.Run(ParkStep.CheckStatus, CheckPreCondition, NullFun,_delay_1ms)
  51. //1.1 Elevator
  52. .Run(ParkStep.ElevatorUp, ElevatorPosition, _delay_1ms)
  53. .WaitWithStopCondition(ParkStep.ElevatorUpWait, CheckVerticalPositionStatus, CheckVerticalPositionRunStop)
  54. .End(ParkStep.End,NullFun,100);
  55. return Runner.Status;
  56. }
  57. /// <summary>
  58. /// 检验前置条件
  59. /// </summary>
  60. /// <returns></returns>
  61. private bool CheckPreCondition()
  62. {
  63. if (!_elevatorAxis.IsSwitchOn)
  64. {
  65. LOG.WriteLog(eEvent.ERR_TRANSPORTER, Module, $"{Module} elevator axis is not switch on ");
  66. return false;
  67. }
  68. if (!_elevatorAxis.IsHomed)
  69. {
  70. LOG.WriteLog(eEvent.ERR_TRANSPORTER, Module, $"{Module} elevator axis is not homed ");
  71. return false;
  72. }
  73. return true;
  74. }
  75. /// <summary>
  76. /// Elevator Position
  77. /// </summary>
  78. /// <returns></returns>
  79. private bool ElevatorPosition()
  80. {
  81. return _elevatorAxis.PositionStation("UP");
  82. }
  83. /// <summary>
  84. /// 检验Vertical移动状态
  85. /// </summary>
  86. /// <returns></returns>
  87. private bool CheckVerticalPositionStatus()
  88. {
  89. return _elevatorAxis.Status == RState.End;
  90. }
  91. /// <summary>
  92. /// 检验Vertical是否还在运动
  93. /// </summary>
  94. /// <returns></returns>
  95. private bool CheckVerticalPositionRunStop()
  96. {
  97. return _elevatorAxis.Status == RState.Failed;
  98. }
  99. /// <summary>
  100. /// 启动
  101. /// </summary>
  102. /// <param name="objs"></param>
  103. /// <returns></returns>
  104. public RState Start(params object[] objs)
  105. {
  106. _elevatorAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Elevator");
  107. _gantryAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Gantry");
  108. _transporterCommon = DEVICE.GetDevice<TransporterCommon>($"{Module}.Common");
  109. if (!CheckStartPreConfition())
  110. {
  111. return RState.Failed;
  112. }
  113. return Runner.Start(Module, "ElevatorUp");
  114. }
  115. /// <summary>
  116. /// 启动校验条件
  117. /// </summary>
  118. /// <returns></returns>
  119. private bool CheckStartPreConfition()
  120. {
  121. //Ready to lock或WH Present Sensor触发
  122. if(_transporterCommon.TransporterData.ReadyToLock1||_transporterCommon.TransporterData.ReadyToLock2||_transporterCommon.TransporterData.WhPresent1||
  123. _transporterCommon.TransporterData.WhPresent2)
  124. {
  125. //lock clamp sensor触发
  126. if(_transporterCommon.TransporterData.Locked1||_transporterCommon.TransporterData.Locked2)
  127. {
  128. //gantry 位置不明确
  129. if(_gantryAxis.CheckPositionIsEmpty(_gantryAxis.MotionData.MotorPosition))
  130. {
  131. LOG.WriteLog(eEvent.ERR_TRANSPORTER, Module, "gantry station is empty,can not elevator up");
  132. return false;
  133. }
  134. }
  135. }
  136. return true;
  137. }
  138. }
  139. }