PufBackToParkRoutine.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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 System.Windows.Media.Animation;
  13. using MECF.Framework.Common.Utilities;
  14. using MECF.Framework.Common.Equipment;
  15. namespace CyberX8_RT.Modules.PUF
  16. {
  17. public class PufBackToParkRoutine : RoutineBase, IRoutine
  18. {
  19. private enum BackToParkStep
  20. {
  21. VerticalPark,
  22. WaitVerticalPark,
  23. RotationPark,
  24. WaitRotationPark,
  25. FlipSideA,
  26. WaitFlipSideA,
  27. End
  28. }
  29. #region 内部变量
  30. private JetAxisBase _flipAxis;
  31. private JetAxisBase _rotationAxis;
  32. private JetAxisBase _verticalAxis;
  33. #endregion
  34. /// <summary>
  35. /// 构造函数
  36. /// </summary>
  37. /// <param name="module"></param>
  38. public PufBackToParkRoutine(string module) : base(module)
  39. {
  40. }
  41. /// <summary>
  42. /// 中止
  43. /// </summary>
  44. public void Abort()
  45. {
  46. Runner.Stop("manual abort");
  47. }
  48. /// <summary>
  49. /// 监控
  50. /// </summary>
  51. /// <returns></returns>
  52. public RState Monitor()
  53. {
  54. Runner.Run(BackToParkStep.VerticalPark, () => AxisGotoPosition(_verticalAxis,"Park",0), _delay_1ms)
  55. .WaitWithStopCondition(BackToParkStep.WaitVerticalPark, CheckVerticalPositionStatus, CheckVerticalStopStatus)
  56. .Run(BackToParkStep.RotationPark, () => AxisGotoPosition(_rotationAxis,"Park",0), _delay_1ms)
  57. .WaitWithStopCondition(BackToParkStep.WaitRotationPark, CheckRotationPositionStatus, CheckRotationStopStatus)
  58. .RunIf(BackToParkStep.FlipSideA,Module==ModuleName.PUF1.ToString(),() => AxisGotoPosition(_flipAxis,"SideA", 0), _delay_1ms)
  59. .WaitWithStopConditionIf(BackToParkStep.WaitFlipSideA, Module == ModuleName.PUF1.ToString(), CheckFlipPositionStatus, CheckFlipStopStatus)
  60. .End(BackToParkStep.End, NullFun, _delay_1ms);
  61. return Runner.Status;
  62. }
  63. /// <summary>
  64. /// 检验Rotation移动状态
  65. /// </summary>
  66. /// <returns></returns>
  67. private bool CheckRotationPositionStatus()
  68. {
  69. return _rotationAxis.Status == RState.End;
  70. }
  71. /// <summary>
  72. /// 检验Vertical移动状态
  73. /// </summary>
  74. /// <returns></returns>
  75. private bool CheckVerticalPositionStatus()
  76. {
  77. return _verticalAxis.Status == RState.End;
  78. }
  79. /// <summary>
  80. /// 检验Flip移动状态
  81. /// </summary>
  82. /// <returns></returns>
  83. private bool CheckFlipPositionStatus()
  84. {
  85. return _flipAxis.Status == RState.End;
  86. }
  87. /// <summary>
  88. /// 检验Flip异常状态
  89. /// </summary>
  90. /// <returns></returns>
  91. private bool CheckFlipStopStatus()
  92. {
  93. bool result = _flipAxis.Status == RState.Failed || _flipAxis.Status == RState.Timeout;
  94. if (result)
  95. {
  96. NotifyError(eEvent.ERR_PUF, "flip motion failed", 0);
  97. }
  98. return result;
  99. }
  100. /// <summary>
  101. /// 检验Rotation异常状态
  102. /// </summary>
  103. /// <returns></returns>
  104. private bool CheckRotationStopStatus()
  105. {
  106. bool result = _rotationAxis.Status == RState.Failed || _rotationAxis.Status == RState.Timeout;
  107. if (result)
  108. {
  109. NotifyError(eEvent.ERR_PUF, "rotation motion failed", 0);
  110. }
  111. return result;
  112. }
  113. /// <summary>
  114. /// 检验Vertical异常状态
  115. /// </summary>
  116. /// <returns></returns>
  117. private bool CheckVerticalStopStatus()
  118. {
  119. bool result = _verticalAxis.Status == RState.Failed || _verticalAxis.Status == RState.Timeout;
  120. if (result)
  121. {
  122. NotifyError(eEvent.ERR_PUF, "vetical motion failed", 0);
  123. }
  124. return result;
  125. }
  126. /// <summary>
  127. /// Axis goto position
  128. /// </summary>
  129. /// <param name="axis"></param>
  130. /// <param name="position"></param>
  131. /// <param name="index"></param>
  132. /// <returns></returns>
  133. private bool AxisGotoPosition(JetAxisBase axis, string position, int index)
  134. {
  135. bool result = axis.PositionStation(position);
  136. if (!result)
  137. {
  138. NotifyError(eEvent.ERR_PUF, $"{axis.Module} goto {position} failed", index);
  139. }
  140. return result;
  141. }
  142. /// <summary>
  143. /// 启动
  144. /// </summary>
  145. /// <param name="objs"></param>
  146. /// <returns></returns>
  147. public RState Start(params object[] objs)
  148. {
  149. InitializeParameters();
  150. return Runner.Start(Module, "start back to park station");
  151. }
  152. /// <summary>
  153. /// 初始化参数
  154. /// </summary>
  155. private void InitializeParameters()
  156. {
  157. _flipAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Flip");
  158. _rotationAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Rotation");
  159. _verticalAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Vertical");
  160. }
  161. /// <summary>
  162. /// 重试
  163. /// </summary>
  164. /// <param name="step"></param>
  165. public RState Retry(int step)
  166. {
  167. InitializeParameters();
  168. List<Enum> preStepIds = new List<Enum>();
  169. return Runner.Retry(BackToParkStep.VerticalPark, preStepIds, Module, "Back to park Retry");
  170. }
  171. /// <summary>
  172. /// 检验完成情况
  173. /// </summary>
  174. /// <returns></returns>
  175. public bool CheckCompleteCondition()
  176. {
  177. double rotationPosition = _rotationAxis.MotionData.MotorPosition;
  178. if (!_rotationAxis.CheckPositionIsInStation(rotationPosition, "Park"))
  179. {
  180. NotifyError(eEvent.ERR_PUF, $"rotation {rotationPosition} not in Park", 0);
  181. return false;
  182. }
  183. double verticalPosition = _verticalAxis.MotionData.MotorPosition;
  184. if (!_verticalAxis.CheckPositionIsInStation(verticalPosition, "Park"))
  185. {
  186. NotifyError(eEvent.ERR_PUF, $"vertical {verticalPosition} not in Park", 0);
  187. return false;
  188. }
  189. double flipPosition = _flipAxis.MotionData.MotorPosition;
  190. if (!_flipAxis.CheckPositionIsInStation(flipPosition, "SideA"))
  191. {
  192. NotifyError(eEvent.ERR_PUF, $"flip {flipPosition} not in SideA", 0);
  193. return false;
  194. }
  195. return true;
  196. }
  197. }
  198. }