PlatingCellRunRecipeRoutine.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using Aitex.Core.RT.Routine;
  2. using Aitex.Core.Util;
  3. using MECF.Framework.Common.Routine;
  4. using MECF.Framework.Common.Utilities;
  5. using PunkHPX8_Core;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace PunkHPX8_RT.Modules.PlatingCell
  12. {
  13. public class PlatingCellRunRecipeRoutine : RoutineBase, IRoutine
  14. {
  15. private enum RunRecipeStep
  16. {
  17. Delay,
  18. InterRinse,
  19. CheckInterRinse,
  20. Vertical,
  21. CheckVertical,
  22. End
  23. }
  24. #region 内部变量
  25. private PlatingCellInterRinseRoutine _interRinseRoutine;
  26. private PlatingCellVerticalEntity _verticalEntity;
  27. #endregion
  28. /// <summary>
  29. /// 构造函数
  30. /// </summary>
  31. /// <param name="module"></param>
  32. public PlatingCellRunRecipeRoutine(string module) : base(module)
  33. {
  34. _interRinseRoutine=new PlatingCellInterRinseRoutine(module);
  35. }
  36. /// <summary>
  37. /// 中止
  38. /// </summary>
  39. public void Abort()
  40. {
  41. Runner.Stop("Manual Abort");
  42. }
  43. /// <summary>
  44. /// 监控
  45. /// </summary>
  46. /// <returns></returns>
  47. public RState Monitor()
  48. {
  49. Runner.Delay(RunRecipeStep.Delay, 5000)
  50. .Run(RunRecipeStep.InterRinse, () => { return _interRinseRoutine.Start() == RState.Running; })
  51. .WaitWithStopCondition(RunRecipeStep.CheckInterRinse,()=>CommonFunction.CheckRoutineEndState(_interRinseRoutine),
  52. ()=>CommonFunction.CheckRoutineStopState(_interRinseRoutine))
  53. .Run(RunRecipeStep.Vertical,StartVertical)
  54. .WaitWithStopCondition(RunRecipeStep.CheckVertical,CheckVerticalEnd,CheckVerticalError)
  55. .End(RunRecipeStep.End, NullFun);
  56. return Runner.Status;
  57. }
  58. /// <summary>
  59. /// 垂直电机运行(仅示例只做参考)
  60. /// </summary>
  61. /// <returns></returns>
  62. private bool StartVertical()
  63. {
  64. double position = 101;
  65. return _verticalEntity.CheckToPostMessage<PlatingCellVerticalState, VerticalMsg>(Aitex.Core.RT.Log.eEvent.INFO_PLATINGCELL,
  66. Module, (int)VerticalMsg.Position, position);
  67. }
  68. /// <summary>
  69. /// 检验垂直电机是否运动完成
  70. /// </summary>
  71. /// <returns></returns>
  72. private bool CheckVerticalEnd()
  73. {
  74. return _verticalEntity.IsIdle;
  75. }
  76. /// <summary>
  77. /// 检验垂直是否出现错误
  78. /// </summary>
  79. /// <returns></returns>
  80. private bool CheckVerticalError()
  81. {
  82. return _verticalEntity.IsError;
  83. }
  84. /// <summary>
  85. /// 启动
  86. /// </summary>
  87. /// <param name="objs"></param>
  88. /// <returns></returns>
  89. public RState Start(params object[] objs)
  90. {
  91. string vertical = ModuleMatcherManager.Instance.GetPlatingVerticalByCell(Module);
  92. _verticalEntity = Singleton<RouteManager>.Instance.GetModule<PlatingCellVerticalEntity>(vertical);
  93. return Runner.Start(Module, "Run Recipe");
  94. }
  95. }
  96. }