LoaderSideUnloadVacuumLevelCheckRoutine.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. using Aitex.Core.RT.Routine;
  2. using MECF.Framework.Common.Routine;
  3. using CyberX8_Core;
  4. using CyberX8_RT.Devices.AXIS.CANOpen;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Runtime.InteropServices;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace CyberX8_RT.Devices.Loader
  12. {
  13. public class LoaderSideUnloadVacuumLevelCheckRoutine : RoutineBase, IRoutine
  14. {
  15. private enum UnloadVacuumLevelStep
  16. {
  17. VecuumLevel,
  18. VecuumLevelCheck,
  19. ConditionWHBladder,
  20. ConditionWHBladderCheck,
  21. ConditionVacuumLevel,
  22. ConditionVacuumLevelCheck,
  23. End
  24. }
  25. #region 内部变量
  26. private bool _continue = false;
  27. private bool _vacuumLevelCheckFailed = false;
  28. private LoaderSideVacuumLevelCheckRoutine _vacuumLevelCheckRoutine;
  29. private LoaderSideWhBladderRoutine _whBladderRoutine;
  30. #endregion
  31. /// <summary>
  32. /// 构造函数
  33. /// </summary>
  34. /// <param name="module"></param>
  35. public LoaderSideUnloadVacuumLevelCheckRoutine(string module) : base(module)
  36. {
  37. }
  38. /// <summary>
  39. /// 中止
  40. /// </summary>
  41. public void Abort()
  42. {
  43. }
  44. /// <summary>
  45. /// 监控
  46. /// </summary>
  47. /// <returns></returns>
  48. public RState Monitor()
  49. {
  50. Runner.Run(UnloadVacuumLevelStep.VecuumLevel, () => { return _vacuumLevelCheckRoutine.Start(true) == RState.Running; }, NullFun, _delay_1ms)
  51. .WaitWithStopCondition(UnloadVacuumLevelStep.VecuumLevelCheck, FirstVacuumLevelCheck, () => { return _vacuumLevelCheckFailed; })
  52. .Run(UnloadVacuumLevelStep.ConditionWHBladder,ConditionWHBladder,_delay_1ms)
  53. .WaitWithStopCondition(UnloadVacuumLevelStep.ConditionWHBladderCheck,ConditionWHBladderEndStatus,ConditionWHBladderStopStatus)
  54. .Run(UnloadVacuumLevelStep.ConditionVacuumLevelCheck,ConditionVacuumLevel,_delay_1ms)
  55. .WaitWithStopCondition(UnloadVacuumLevelStep.ConditionVacuumLevelCheck,ConditionVacuumLevelEndStatus,ConditionVacuumLevelStopStatus)
  56. .End(UnloadVacuumLevelStep.End,NullFun,100);
  57. return Runner.Status;
  58. }
  59. /// <summary>
  60. /// 首次VacuumLevel校验
  61. /// </summary>
  62. /// <returns></returns>
  63. private bool FirstVacuumLevelCheck()
  64. {
  65. RState state = _vacuumLevelCheckRoutine.Monitor();
  66. if(state==RState.End)
  67. {
  68. return true;
  69. }
  70. else if(state==RState.Timeout)
  71. {
  72. _continue = true;
  73. return true;
  74. }
  75. else if(state==RState.Failed)
  76. {
  77. _vacuumLevelCheckFailed = true;
  78. return false;
  79. }
  80. else
  81. {
  82. return false;
  83. }
  84. }
  85. /// <summary>
  86. /// 条件WHBladder
  87. /// </summary>
  88. /// <returns></returns>
  89. private bool ConditionWHBladder()
  90. {
  91. if(_continue)
  92. {
  93. return true;
  94. }
  95. else
  96. {
  97. return _whBladderRoutine.Start(true) == RState.Running;
  98. }
  99. }
  100. /// <summary>
  101. /// 条件WHBladder检验
  102. /// </summary>
  103. /// <returns></returns>
  104. private bool ConditionWHBladderEndStatus()
  105. {
  106. if(_continue)
  107. {
  108. return true;
  109. }
  110. else
  111. {
  112. return _whBladderRoutine.Monitor() == RState.End;
  113. }
  114. }
  115. /// <summary>
  116. /// 条件WHBladder停止检验
  117. /// </summary>
  118. /// <returns></returns>
  119. private bool ConditionWHBladderStopStatus()
  120. {
  121. if (_continue)
  122. {
  123. return true;
  124. }
  125. else
  126. {
  127. RState state = _whBladderRoutine.Monitor();
  128. return state == RState.Failed || state == RState.Timeout;
  129. }
  130. }
  131. /// <summary>
  132. /// 条件Vacuum Level
  133. /// </summary>
  134. /// <returns></returns>
  135. private bool ConditionVacuumLevel()
  136. {
  137. if (_continue)
  138. {
  139. return true;
  140. }
  141. else
  142. {
  143. return _vacuumLevelCheckRoutine.Start(true) == RState.Running;
  144. }
  145. }
  146. /// <summary>
  147. /// 条件Vacuum Level
  148. /// </summary>
  149. /// <returns></returns>
  150. private bool ConditionVacuumLevelEndStatus()
  151. {
  152. if (_continue)
  153. {
  154. return true;
  155. }
  156. else
  157. {
  158. return _vacuumLevelCheckRoutine.Monitor() == RState.End;
  159. }
  160. }
  161. /// <summary>
  162. /// 条件Vacuum Level
  163. /// </summary>
  164. /// <returns></returns>
  165. private bool ConditionVacuumLevelStopStatus()
  166. {
  167. if (_continue)
  168. {
  169. return true;
  170. }
  171. else
  172. {
  173. RState state = _vacuumLevelCheckRoutine.Monitor();
  174. return state == RState.Failed || state == RState.Timeout;
  175. }
  176. }
  177. /// <summary>
  178. /// 启动
  179. /// </summary>
  180. /// <param name="objs"></param>
  181. /// <returns></returns>
  182. public RState Start(params object[] objs)
  183. {
  184. _vacuumLevelCheckRoutine = new LoaderSideVacuumLevelCheckRoutine(Module);
  185. _whBladderRoutine = new LoaderSideWhBladderRoutine(Module);
  186. Runner.Start(Module, "UnloadVacuumLevelCheck");
  187. return RState.Running;
  188. }
  189. }
  190. }