PrewetManualProcessRecipeRoutine.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Log;
  3. using Aitex.Core.RT.RecipeCenter;
  4. using Aitex.Core.RT.Routine;
  5. using MECF.Framework.Common.RecipeCenter;
  6. using MECF.Framework.Common.Routine;
  7. using CyberX8_Core;
  8. using CyberX8_RT.Devices.LinMot;
  9. using CyberX8_RT.Devices.Prewet;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. namespace CyberX8_RT.Modules.Prewet
  16. {
  17. public class PrewetManualProcessRecipeRoutine : RoutineBase, IRoutine
  18. {
  19. private enum ProcessRecipeStep
  20. {
  21. Process,
  22. WaitProcess,
  23. End
  24. }
  25. private enum ProcessAbortStep
  26. {
  27. PumpValvaClose,
  28. AbortLinmot,
  29. TerminateStateMachine,
  30. End
  31. }
  32. #region 内部变量
  33. /// <summary>
  34. /// LintMot Axis
  35. /// </summary>
  36. private LinMotAxis _linmotAxis;
  37. /// <summary>
  38. /// recipe对象
  39. /// </summary>
  40. private PwtRecipe _recipe;
  41. /// <summary>
  42. /// Process状态机
  43. /// </summary>
  44. private PrewetProcessStateMachine _processStateMachine;
  45. public PrewetProcessStateMachine prewetProcessStateMachine { get { return _processStateMachine; } }
  46. /// <summary>
  47. /// prewetDevice对象
  48. /// </summary>
  49. private PrewetDevice _prewetDevice;
  50. #endregion
  51. /// <summary>
  52. /// 构造函数
  53. /// </summary>
  54. /// <param name="module"></param>
  55. public PrewetManualProcessRecipeRoutine(string module,LinMotAxis linMotAxis) : base(module)
  56. {
  57. _linmotAxis = linMotAxis;
  58. _prewetDevice=DEVICE.GetDevice<PrewetDevice>(Module);
  59. }
  60. /// <summary>
  61. /// 中止
  62. /// </summary>
  63. public void Abort()
  64. {
  65. Runner.Stop("Manual abort");
  66. _processStateMachine.Terminate();
  67. _linmotAxis.AbortCurrentRoutine();
  68. _prewetDevice.PumpValveClose();
  69. }
  70. /// <summary>
  71. /// 监控
  72. /// </summary>
  73. /// <returns></returns>
  74. public RState Monitor()
  75. {
  76. Runner.Run(ProcessRecipeStep.Process, StartProcess, _delay_1ms)
  77. .WaitWithStopCondition(ProcessRecipeStep.WaitProcess, WaitProcessComplete, CheckProcessError)
  78. .End(ProcessRecipeStep.End, NullFun, _delay_1ms);
  79. return Runner.Status;
  80. }
  81. /// <summary>
  82. /// 启动Process
  83. /// </summary>
  84. /// <returns></returns>
  85. private bool StartProcess()
  86. {
  87. return _processStateMachine.CheckToPostMessage<PrewetProcessStateMachine.PrewetProcessState,
  88. PrewetProcessStateMachine.PrewetProcessMsg>(eEvent.ERR_PREWET, Module.ToString(),
  89. (int)PrewetProcessStateMachine.PrewetProcessMsg.ProcessStart, _recipe);
  90. }
  91. /// <summary>
  92. /// 等待Process结束
  93. /// </summary>
  94. /// <returns></returns>
  95. private bool WaitProcessComplete()
  96. {
  97. bool retult= _processStateMachine.State == PrewetProcessStateMachine.PrewetProcessState.Idle.ToString();
  98. return retult;
  99. }
  100. /// <summary>
  101. /// 检验Process过程是否出现错误
  102. /// </summary>
  103. /// <returns></returns>
  104. private bool CheckProcessError()
  105. {
  106. return _processStateMachine.State==PrewetProcessStateMachine.PrewetProcessState.Error.ToString();
  107. }
  108. /// <summary>
  109. /// 启动
  110. /// </summary>
  111. /// <param name="objs"></param>
  112. /// <returns></returns>
  113. public RState Start(params object[] objs)
  114. {
  115. string recipe = objs[0].ToString();
  116. PwtRecipe pwtRecipe = RecipeFileManager.Instance.LoadGenericityRecipe<PwtRecipe>(recipe);
  117. if (pwtRecipe == null)
  118. {
  119. LOG.WriteLog(eEvent.ERR_PREWET, Module, $"invalid {recipe} recipe");
  120. return RState.Failed;
  121. }
  122. _recipe = pwtRecipe;
  123. _processStateMachine = new PrewetProcessStateMachine(Module, _linmotAxis);
  124. _processStateMachine.Initialize();
  125. return Runner.Start(Module, "Manual Process Recipe");
  126. }
  127. }
  128. }