ModuleHomeAllRoutine.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. using Aitex.Core.RT.Fsm;
  2. using Aitex.Core.RT.Routine;
  3. using Aitex.Core.Util;
  4. using MECF.Framework.Common.Equipment;
  5. using MECF.Framework.Common.Routine;
  6. using CyberX8_Core;
  7. using CyberX8_RT.Modules.Loader;
  8. using CyberX8_RT.Modules.PUF;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using CyberX8_RT.Modules.Transporter;
  15. namespace CyberX8_RT.Modules
  16. {
  17. public class ModuleHomeAllRoutine : RoutineBase, IRoutine
  18. {
  19. private enum HomeStep
  20. {
  21. DualPufHome,
  22. DualPufHomeWait,
  23. LoaderHome,
  24. LoaderHomeWait,
  25. LoaderTransporterHome,
  26. LoaderTransporterHomeWait,
  27. ProcessTransporterHome,
  28. ProcessTransporterHomeWait,
  29. End
  30. }
  31. #region 内部变量
  32. private PUFEntity _puf1Entity;
  33. private PUFEntity _puf2Entity;
  34. private LoaderEntity _loaderEntity;
  35. private TransporterEntity _loaderTransporterEntity;
  36. private TransporterEntity _processTransporterEntity;
  37. #endregion
  38. /// <summary>
  39. /// 构造函数
  40. /// </summary>
  41. /// <param name="module"></param>
  42. public ModuleHomeAllRoutine(string module) : base(module)
  43. {
  44. }
  45. /// <summary>
  46. /// 中止
  47. /// </summary>
  48. public void Abort()
  49. {
  50. Runner.Stop("Manual Stop");
  51. }
  52. /// <summary>
  53. /// 监控
  54. /// </summary>
  55. /// <returns></returns>
  56. public RState Monitor()
  57. {
  58. Runner.Run(HomeStep.DualPufHome, HomeDualPuf, _delay_1ms)
  59. .WaitWithStopCondition(HomeStep.DualPufHomeWait, CheckHomeDualPufStatus, CheckHomeDualPufStopStatus)
  60. .Run(HomeStep.LoaderHome, HomeLoaderEntity, _delay_1ms)
  61. .WaitWithStopCondition(HomeStep.LoaderHomeWait, CheckHomeLoaderStatus, CheckHomeLoaderStopStatus)
  62. .Run(HomeStep.LoaderTransporterHome, HomeLoaderTransporterEntity, _delay_1ms)
  63. .WaitWithStopCondition(HomeStep.LoaderTransporterHomeWait, CheckHomeLoaderTransporterStatus, CheckHomeLoaderTransporterStopStatus)
  64. .Run(HomeStep.ProcessTransporterHome, HomeProcessTransporterEntity, _delay_1ms)
  65. .WaitWithStopCondition(HomeStep.ProcessTransporterHomeWait, CheckHomeProcessTransporterStatus, CheckHomeProcessTransporterStopStatus)
  66. .End(HomeStep.End, NullFun, _delay_1ms);
  67. return Runner.Status;
  68. }
  69. /// <summary>
  70. /// Home Dual Puf
  71. /// </summary>
  72. /// <returns></returns>
  73. private bool HomeDualPuf()
  74. {
  75. if(ModuleHelper.IsInstalled(ModuleName.PUF1))
  76. {
  77. if(_puf1Entity.Invoke("HomeAll")==(int)FSM_MSG.ALARM)
  78. {
  79. return false;
  80. }
  81. }
  82. if(ModuleHelper.IsInstalled(ModuleName.PUF2))
  83. {
  84. if(_puf2Entity.Invoke("HomeAll")==(int)FSM_MSG.ALARM)
  85. {
  86. return false;
  87. }
  88. }
  89. return true;
  90. }
  91. /// <summary>
  92. /// 检验dual puf home情况
  93. /// </summary>
  94. /// <returns></returns>
  95. private bool CheckHomeDualPufStatus()
  96. {
  97. bool puf1Result = true;
  98. if(ModuleHelper.IsInstalled(ModuleName.PUF1))
  99. {
  100. puf1Result= _puf1Entity.IsIdle;
  101. }
  102. bool puf2Result = true;
  103. if(ModuleHelper.IsInstalled(ModuleName.PUF2))
  104. {
  105. puf2Result= _puf2Entity.IsIdle;
  106. }
  107. return puf1Result && puf2Result;
  108. }
  109. /// <summary>
  110. /// 检验dual puf home失败情况
  111. /// </summary>
  112. /// <returns></returns>
  113. private bool CheckHomeDualPufStopStatus()
  114. {
  115. bool puf1Result = false;
  116. if (ModuleHelper.IsInstalled(ModuleName.PUF1))
  117. {
  118. puf1Result = _puf1Entity.State == (int)PUFSTATE.Error;
  119. }
  120. bool puf2Result = false;
  121. if (ModuleHelper.IsInstalled(ModuleName.PUF2))
  122. {
  123. puf2Result = _puf2Entity.State == (int)PUFSTATE.Error;
  124. }
  125. return puf1Result && puf2Result;
  126. }
  127. /// <summary>
  128. /// Home Loader
  129. /// </summary>
  130. /// <returns></returns>
  131. private bool HomeLoaderEntity()
  132. {
  133. if (ModuleHelper.IsInstalled(ModuleName.Loader1))
  134. {
  135. if (_loaderEntity.Invoke("HomeAll") == (int)FSM_MSG.ALARM)
  136. {
  137. return false;
  138. }
  139. }
  140. return true;
  141. }
  142. /// <summary>
  143. /// 检验Loader home情况
  144. /// </summary>
  145. /// <returns></returns>
  146. private bool CheckHomeLoaderStatus()
  147. {
  148. bool result = true;
  149. if (ModuleHelper.IsInstalled(ModuleName.Loader1))
  150. {
  151. result = _loaderEntity.IsIdle;
  152. }
  153. return result;
  154. }
  155. /// <summary>
  156. /// 检验Loader home失败情况
  157. /// </summary>
  158. /// <returns></returns>
  159. private bool CheckHomeLoaderStopStatus()
  160. {
  161. bool result = false;
  162. if (ModuleHelper.IsInstalled(ModuleName.Loader1))
  163. {
  164. result = _loaderEntity.State == (int)LOADERSTATE.Error;
  165. }
  166. return result;
  167. }
  168. /// <summary>
  169. /// Home LoaderTransporter
  170. /// </summary>
  171. /// <returns></returns>
  172. private bool HomeLoaderTransporterEntity()
  173. {
  174. if (ModuleHelper.IsInstalled(ModuleName.Transporter2))
  175. {
  176. if (_loaderTransporterEntity.Invoke("HomeAll") == (int)FSM_MSG.ALARM)
  177. {
  178. return false;
  179. }
  180. }
  181. return true;
  182. }
  183. /// <summary>
  184. /// 检验LoaderTransporter home情况
  185. /// </summary>
  186. /// <returns></returns>
  187. private bool CheckHomeLoaderTransporterStatus()
  188. {
  189. bool result = true;
  190. if (ModuleHelper.IsInstalled(ModuleName.Transporter2))
  191. {
  192. result = _loaderTransporterEntity.IsIdle;
  193. }
  194. return result;
  195. }
  196. /// <summary>
  197. /// 检验Loader home失败情况
  198. /// </summary>
  199. /// <returns></returns>
  200. private bool CheckHomeLoaderTransporterStopStatus()
  201. {
  202. bool result = false;
  203. if (ModuleHelper.IsInstalled(ModuleName.Transporter2))
  204. {
  205. result = _loaderTransporterEntity.State == (int)TransporterState.Error;
  206. }
  207. return result;
  208. }
  209. /// <summary>
  210. /// Home ProcessTransporter
  211. /// </summary>
  212. /// <returns></returns>
  213. private bool HomeProcessTransporterEntity()
  214. {
  215. if (ModuleHelper.IsInstalled(ModuleName.Transporter1))
  216. {
  217. if (_processTransporterEntity.Invoke("HomeAll") == (int)FSM_MSG.ALARM)
  218. {
  219. return false;
  220. }
  221. }
  222. return true;
  223. }
  224. /// <summary>
  225. /// 检验LoaderTransporter home情况
  226. /// </summary>
  227. /// <returns></returns>
  228. private bool CheckHomeProcessTransporterStatus()
  229. {
  230. bool result = true;
  231. if (ModuleHelper.IsInstalled(ModuleName.Transporter1))
  232. {
  233. result = _processTransporterEntity.IsIdle;
  234. }
  235. return result;
  236. }
  237. /// <summary>
  238. /// 检验Loader home失败情况
  239. /// </summary>
  240. /// <returns></returns>
  241. private bool CheckHomeProcessTransporterStopStatus()
  242. {
  243. bool result = false;
  244. if (ModuleHelper.IsInstalled(ModuleName.Transporter1))
  245. {
  246. result = _processTransporterEntity.State == (int)TransporterState.Error;
  247. }
  248. return result;
  249. }
  250. public RState Start(params object[] objs)
  251. {
  252. _puf1Entity = Singleton<RouteManager>.Instance.GetModule<PUFEntity>(ModuleName.PUF1.ToString());
  253. _puf2Entity = Singleton<RouteManager>.Instance.GetModule<PUFEntity>(ModuleName.PUF2.ToString());
  254. _loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString());
  255. _loaderTransporterEntity = Singleton<RouteManager>.Instance.GetModule<TransporterEntity>(ModuleName.Transporter2.ToString());
  256. _processTransporterEntity = Singleton<RouteManager>.Instance.GetModule<TransporterEntity>(ModuleName.Transporter1.ToString());
  257. return Runner.Start("System","System Home All");
  258. }
  259. }
  260. }