PufReadyForRobotPlaceRoutine.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Routine;
  3. using MECF.Framework.Common.Routine;
  4. using CyberX8_Core;
  5. using CyberX8_RT.Devices.AXIS;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using Aitex.Core.RT.Log;
  12. using MECF.Framework.Common.Utilities;
  13. namespace CyberX8_RT.Modules.PUF
  14. {
  15. public class PufReadyForRobotPlaceRoutine : RoutineBase, IRoutine
  16. {
  17. private enum ReadyForRobotPlaceStep
  18. {
  19. RotationRobot,
  20. WaitRotationRobot,
  21. VerticalRobot,
  22. WaitVerticalRobot,
  23. FlipSideA,
  24. WaitFlipSideA,
  25. End
  26. }
  27. #region 内部变量
  28. private JetAxisBase _flipAxis;
  29. private JetAxisBase _rotationAxis;
  30. private JetAxisBase _verticalAxis;
  31. #endregion
  32. /// <summary>
  33. /// 构造函数
  34. /// </summary>
  35. /// <param name="module"></param>
  36. public PufReadyForRobotPlaceRoutine(string module) : base(module)
  37. {
  38. }
  39. /// <summary>
  40. /// 中止
  41. /// </summary>
  42. public void Abort()
  43. {
  44. Runner.Stop("manual abort");
  45. }
  46. /// <summary>
  47. /// 监控
  48. /// </summary>
  49. /// <returns></returns>
  50. public RState Monitor()
  51. {
  52. Runner.Run(ReadyForRobotPlaceStep.RotationRobot, () => _rotationAxis.PositionStation("Robot"), _delay_1ms)
  53. .WaitWithStopCondition(ReadyForRobotPlaceStep.WaitRotationRobot, CheckRotationPositionStatus, CheckRotationPositionRunStop)
  54. .Run(ReadyForRobotPlaceStep.VerticalRobot, () => _verticalAxis.PositionStation("Robot"), _delay_1ms)
  55. .WaitWithStopCondition(ReadyForRobotPlaceStep.WaitVerticalRobot, CheckVerticalPositionStatus, CheckVerticalPositionRunStop)
  56. .Run(ReadyForRobotPlaceStep.FlipSideA, () => _flipAxis.PositionStation("SideA"), _delay_1ms)
  57. .WaitWithStopCondition(ReadyForRobotPlaceStep.WaitFlipSideA, CheckFlipPositionStatus, CheckFlipPositionRunStop)
  58. .End(ReadyForRobotPlaceStep.End, NullFun, _delay_1ms);
  59. return Runner.Status;
  60. }
  61. /// <summary>
  62. /// 检验Rotation移动状态
  63. /// </summary>
  64. /// <returns></returns>
  65. private bool CheckRotationPositionStatus()
  66. {
  67. return _rotationAxis.Status == RState.End;
  68. }
  69. /// <summary>
  70. /// 检验Rotation是否还在运动
  71. /// </summary>
  72. /// <returns></returns>
  73. private bool CheckRotationPositionRunStop()
  74. {
  75. bool result= _rotationAxis.Status == RState.Failed||_rotationAxis.Status==RState.Timeout;
  76. if (result)
  77. {
  78. NotifyError(eEvent.ERR_PUF, "rotation motion failed", 0);
  79. }
  80. return result;
  81. }
  82. /// <summary>
  83. /// 检验Vertical移动状态
  84. /// </summary>
  85. /// <returns></returns>
  86. private bool CheckVerticalPositionStatus()
  87. {
  88. return _verticalAxis.Status == RState.End;
  89. }
  90. /// <summary>
  91. /// 检验Vertical是否还在运动
  92. /// </summary>
  93. /// <returns></returns>
  94. private bool CheckVerticalPositionRunStop()
  95. {
  96. bool result =_verticalAxis.Status == RState.Failed||_verticalAxis.Status==RState.Timeout;
  97. if (result)
  98. {
  99. NotifyError(eEvent.ERR_PUF, "vertical motion failed", 0);
  100. }
  101. return result;
  102. }
  103. /// <summary>
  104. /// 检验Flip移动状态
  105. /// </summary>
  106. /// <returns></returns>
  107. private bool CheckFlipPositionStatus()
  108. {
  109. return _flipAxis.Status == RState.End;
  110. }
  111. /// <summary>
  112. /// 检验Flip是否还在运动
  113. /// </summary>
  114. /// <returns></returns>
  115. private bool CheckFlipPositionRunStop()
  116. {
  117. bool result = _flipAxis.Status == RState.Failed || _flipAxis.Status == RState.Timeout ;
  118. if (result)
  119. {
  120. NotifyError(eEvent.ERR_PUF, "flip motion failed", 0);
  121. }
  122. return result;
  123. }
  124. /// <summary>
  125. /// 启动
  126. /// </summary>
  127. /// <param name="objs"></param>
  128. /// <returns></returns>
  129. public RState Start(params object[] objs)
  130. {
  131. InitializeParameters();
  132. return Runner.Start(Module, "start ready for robot place");
  133. }
  134. /// <summary>
  135. /// 初始化参数
  136. /// </summary>
  137. private void InitializeParameters()
  138. {
  139. _flipAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Flip");
  140. _rotationAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Rotation");
  141. _verticalAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Vertical");
  142. }
  143. /// <summary>
  144. /// 重试
  145. /// </summary>
  146. /// <param name="step"></param>
  147. public RState Retry(int step)
  148. {
  149. InitializeParameters();
  150. List<Enum> preStepIds = new List<Enum>();
  151. return Runner.Retry(ReadyForRobotPlaceStep.RotationRobot, preStepIds, Module, "ReadyForRobotPlace Retry");
  152. }
  153. /// <summary>
  154. /// 检验完成情况
  155. /// </summary>
  156. /// <returns></returns>
  157. public bool CheckCompleteCondition()
  158. {
  159. double rotationPosition = _rotationAxis.MotionData.MotorPosition;
  160. if(!_rotationAxis.CheckPositionIsInStation(rotationPosition, "Robot"))
  161. {
  162. NotifyError(eEvent.ERR_PUF, $"rotation {rotationPosition} not in Robot", 0);
  163. return false;
  164. }
  165. double verticalPosition = _verticalAxis.MotionData.MotorPosition;
  166. if (!_verticalAxis.CheckPositionIsInStation(verticalPosition, "Robot"))
  167. {
  168. NotifyError(eEvent.ERR_PUF, $"vertical {verticalPosition} not in Robot", 0);
  169. return false;
  170. }
  171. double flipPosition = _flipAxis.MotionData.MotorPosition;
  172. if (!_flipAxis.CheckPositionIsInStation(flipPosition, "SideA"))
  173. {
  174. NotifyError(eEvent.ERR_PUF, $"flip {flipPosition} not in SideA", 0);
  175. return false;
  176. }
  177. return true;
  178. }
  179. }
  180. }