SRDProcessErrorRoutine.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Routine;
  3. using CyberX8_Core;
  4. using CyberX8_RT.Devices.AXIS;
  5. using MECF.Framework.Common.Routine;
  6. using MECF.Framework.Common.Utilities;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace CyberX8_RT.Modules.SRD
  13. {
  14. public class SRDProcessErrorRoutine : RoutineBase, IRoutine
  15. {
  16. private enum ProcessErrorStep
  17. {
  18. ArmStop,
  19. ArmStopWait,
  20. ArmHome,
  21. ArmHomeWait,
  22. RotationStop,
  23. RotationStopWait,
  24. RotationHome,
  25. RotationHomeWait,
  26. Unload,
  27. UnloadWait,
  28. End
  29. }
  30. #region 内部变量
  31. /// <summary>
  32. /// Rotation Axis
  33. /// </summary>
  34. private JetAxisBase _rotationAxis;
  35. /// <summary>
  36. /// Arm Axis
  37. /// </summary>
  38. private JetAxisBase _armAxis;
  39. /// <summary>
  40. /// unload routine
  41. /// </summary>
  42. private SRDUnloadRoutine _unloadRoutine;
  43. /// <summary>
  44. /// Arm是否正在运动
  45. /// </summary>
  46. private bool _armIsRun;
  47. /// <summary>
  48. /// Arm是否Homed
  49. /// </summary>
  50. private bool _armIsHomed;
  51. /// <summary>
  52. /// Rotation是否正在运动
  53. /// </summary>
  54. private bool _rotationIsRun;
  55. /// <summary>
  56. /// Rotation是否Homed
  57. /// </summary>
  58. private bool _rotationIsHomed;
  59. #endregion
  60. /// <summary>
  61. /// 构造函数
  62. /// </summary>
  63. /// <param name="module"></param>
  64. public SRDProcessErrorRoutine(string module) : base(module)
  65. {
  66. }
  67. /// <summary>
  68. /// 中止
  69. /// </summary>
  70. public void Abort()
  71. {
  72. Runner.Stop("Manual Abort");
  73. }
  74. /// <summary>
  75. /// 监控
  76. /// </summary>
  77. /// <returns></returns>
  78. public RState Monitor()
  79. {
  80. Runner.RunIf(ProcessErrorStep.ArmStop, _armIsRun, () => AxisStop(_armAxis), _delay_1ms)
  81. .WaitWithStopConditionIf(ProcessErrorStep.ArmStopWait, _armIsRun, () => { return _armAxis.Status == RState.End; },
  82. () => { return _armAxis.Status == RState.Failed || _armAxis.Status == RState.Timeout; })
  83. .RunIf(ProcessErrorStep.ArmHome, !_armIsHomed, () => AxisHome(_armAxis), _delay_1ms)
  84. .WaitWithStopConditionIf(ProcessErrorStep.ArmHomeWait, !_armIsHomed, () => { return _armAxis.Status == RState.End; },
  85. () => { return _armAxis.Status == RState.Failed || _armAxis.Status == RState.Timeout; })
  86. .RunIf(ProcessErrorStep.RotationStop, _rotationIsRun, () => AxisStop(_rotationAxis), _delay_1ms)
  87. .WaitWithStopConditionIf(ProcessErrorStep.RotationStopWait, _rotationIsRun, () => { return _rotationAxis.Status == RState.End; },
  88. () => { return _rotationAxis.Status == RState.Failed || _rotationAxis.Status == RState.Timeout; })
  89. .RunIf(ProcessErrorStep.RotationHome, !_rotationIsHomed, () => AxisHome(_rotationAxis), _delay_1ms)
  90. .WaitWithStopConditionIf(ProcessErrorStep.RotationHomeWait, !_rotationIsHomed, () => { return _rotationAxis.Status == RState.End; },
  91. () => { return _rotationAxis.Status == RState.Failed || _rotationAxis.Status == RState.Timeout; })
  92. .Run(ProcessErrorStep.Unload, () => { return _unloadRoutine.Start() == RState.Running; }, _delay_1ms)
  93. .WaitWithStopCondition(ProcessErrorStep.UnloadWait, () => CommonFunction.CheckRoutineEndState(_unloadRoutine),
  94. () => CommonFunction.CheckRoutineStopState(_unloadRoutine))
  95. .End(ProcessErrorStep.End, NullFun, _delay_1ms);
  96. return Runner.Status;
  97. }
  98. /// <summary>
  99. /// axis停止
  100. /// </summary>
  101. /// <param name="jetAxisBase"></param>
  102. /// <returns></returns>
  103. private bool AxisStop(JetAxisBase jetAxisBase)
  104. {
  105. return jetAxisBase.StopPositionOperation();
  106. }
  107. /// <summary>
  108. /// axis home
  109. /// </summary>
  110. /// <param name="jetAxisBase"></param>
  111. /// <returns></returns>
  112. private bool AxisHome(JetAxisBase jetAxisBase)
  113. {
  114. return jetAxisBase.Home(false);
  115. }
  116. /// <summary>
  117. /// 启动
  118. /// </summary>
  119. /// <param name="objs"></param>
  120. /// <returns></returns>
  121. public RState Start(params object[] objs)
  122. {
  123. _armAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Arm");
  124. _rotationAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Rotation");
  125. _armIsRun = _armAxis.IsRun;
  126. _armIsHomed = _armAxis.IsHomed;
  127. _rotationIsRun= _rotationAxis.IsRun;
  128. _rotationIsHomed = _rotationAxis.IsHomed;
  129. _unloadRoutine = new SRDUnloadRoutine(Module);
  130. return Runner.Start(Module, "start process error");
  131. }
  132. }
  133. }