PlatingCellVerticalInitializeRoutine.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Log;
  3. using Aitex.Core.RT.Routine;
  4. using Aitex.Core.RT.SCCore;
  5. using MECF.Framework.Common.Persistent.Reservoirs;
  6. using MECF.Framework.Common.RecipeCenter;
  7. using MECF.Framework.Common.Routine;
  8. using MECF.Framework.Common.ToolLayout;
  9. using PunkHPX8_Core;
  10. using PunkHPX8_RT.Devices.AXIS;
  11. using PunkHPX8_RT.Devices.PlatingCell;
  12. using PunkHPX8_RT.Devices.Reservoir;
  13. using System;
  14. using System.Collections.Generic;
  15. using System.Diagnostics.Eventing.Reader;
  16. using System.Linq;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. using System.Windows.Media.Imaging;
  20. namespace PunkHPX8_RT.Modules.PlatingCell
  21. {
  22. public class PlatingCellVerticalInitializeRoutine : RoutineBase, IRoutine
  23. {
  24. private enum InitializeStep
  25. {
  26. VerticalHome,
  27. VerticalHomeCheck,
  28. GoToLoad,
  29. GoToLoadCheck,
  30. End
  31. }
  32. #region 内部变量
  33. /// <summary>
  34. /// vertical axis
  35. /// </summary>
  36. private JetAxisBase _verticalAxis;
  37. #endregion
  38. /// <summary>
  39. /// 构造函数
  40. /// </summary>
  41. /// <param name="module"></param>
  42. public PlatingCellVerticalInitializeRoutine(string module) : base(module)
  43. {
  44. }
  45. /// <summary>
  46. /// 中止
  47. /// </summary>
  48. public void Abort()
  49. {
  50. Runner.Stop("Manual Abort");
  51. }
  52. /// <summary>
  53. /// 监控
  54. /// </summary>
  55. /// <returns></returns>
  56. public RState Monitor()
  57. {
  58. Runner.Run(InitializeStep.VerticalHome, Home, NullFun, 100)
  59. .WaitWithStopCondition(InitializeStep.VerticalHomeCheck, CheckVerticalPositionStatus, CheckVerticalPositionRunStop)
  60. .Run(InitializeStep.GoToLoad, VerticalGotoLoad, 100)
  61. .WaitWithStopCondition(InitializeStep.GoToLoadCheck, CheckVerticalPositionStatus, CheckVerticalPositionRunStop)
  62. .End(InitializeStep.End, NullFun, _delay_1ms);
  63. return Runner.Status;
  64. }
  65. /// <summary>
  66. /// vertical 运动到Load位置
  67. /// </summary>
  68. /// <returns></returns>
  69. private bool VerticalGotoLoad()
  70. {
  71. if(_verticalAxis != null )
  72. {
  73. if (!_verticalAxis.IsSwitchOn)
  74. {
  75. LOG.WriteLog(eEvent.ERR_PLATINGCELL, Module, "Vertical is not Power On");
  76. return false;
  77. }
  78. else if (!_verticalAxis.IsHomed)
  79. {
  80. LOG.WriteLog(eEvent.ERR_PLATINGCELL, Module, "Vertical is not Home,Home vertical first");
  81. return false;
  82. }
  83. return _verticalAxis.PositionStation("Load", true);
  84. }
  85. else
  86. {
  87. LOG.WriteLog(eEvent.ERR_PLATINGCELL, Module, "vertical axis is null");
  88. return false;
  89. }
  90. }
  91. /// <summary>
  92. /// Home
  93. /// </summary>
  94. /// <returns></returns>
  95. private bool Home()
  96. {
  97. if (_verticalAxis != null)
  98. {
  99. if (!_verticalAxis.IsSwitchOn)
  100. {
  101. LOG.WriteLog(eEvent.ERR_PLATINGCELL, Module, "Vertical is not Power On");
  102. return false;
  103. }
  104. return _verticalAxis.Home();
  105. }
  106. else
  107. {
  108. LOG.WriteLog(eEvent.ERR_PLATINGCELL, Module, "Verticel axis is null");
  109. return false;
  110. }
  111. }
  112. /// <summary>
  113. /// 检验Vertical移动状态
  114. /// </summary>
  115. /// <returns></returns>
  116. private bool CheckVerticalPositionStatus()
  117. {
  118. return _verticalAxis.Status == RState.End;
  119. }
  120. /// <summary>
  121. /// 检验Vertical是否还在运动
  122. /// </summary>
  123. /// <returns></returns>
  124. private bool CheckVerticalPositionRunStop()
  125. {
  126. return _verticalAxis.Status == RState.Failed || _verticalAxis.Status == RState.Timeout;
  127. }
  128. /// <summary>
  129. /// 启动
  130. /// </summary>
  131. /// <param name="objs"></param>
  132. /// <returns></returns>
  133. public RState Start(params object[] objs)
  134. {
  135. _verticalAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Vertical");
  136. return Runner.Start(Module, "Start PlatingCell Vertical Initialize");
  137. }
  138. }
  139. }