CycleRobotCycleRoutine.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using Aitex.Core.RT.Log;
  2. using Aitex.Core.RT.Routine;
  3. using PunkHPX8_Core;
  4. using PunkHPX8_RT.Devices.EFEM;
  5. using MECF.Framework.Common.Equipment;
  6. using MECF.Framework.Common.Routine;
  7. using MECF.Framework.Common.Utilities;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace PunkHPX8_RT.Modules.EFEM
  14. {
  15. public class CycleRobotCycleRoutine : ModuleRoutineBase, IRoutine
  16. {
  17. private enum CycleRobotCycleStep
  18. {
  19. LoopStart,
  20. LoopRunRobotCycle,
  21. LoopRunRobotCycleWait,
  22. LoopEnd,
  23. End
  24. }
  25. /// <summary>
  26. /// Cycle次数
  27. /// </summary>
  28. private int _cycleTimes;
  29. /// <summary>
  30. /// 当前处于第几次Cycle
  31. /// </summary>
  32. private int _currentCycle;
  33. private object[] param;
  34. private RobotCycleRoutine _robotCycleRoutine;
  35. public CycleRobotCycleRoutine(EfemBase efem) : base(ModuleName.EfemRobot)
  36. {
  37. _robotCycleRoutine = new RobotCycleRoutine(efem);
  38. }
  39. public RState Start(params object[] objs)
  40. {
  41. param = objs;
  42. _currentCycle = 1;//初始化当前Cycle次数
  43. if (objs.Length >= 6)
  44. {
  45. _cycleTimes = (int)objs[4];
  46. if (_cycleTimes < 1)
  47. {
  48. LOG.Write(eEvent.ERR_EFEM_ROBOT, Module, $"Input Robot Cycle Times{_cycleTimes} error");
  49. return RState.Failed;
  50. }
  51. }
  52. return Runner.Start(Module, "Start CycleRobotCycleRoutine");
  53. }
  54. public RState Monitor()
  55. {
  56. Runner.LoopStart(CycleRobotCycleStep.LoopStart, "Loop StartCycleRobotCycleRoutine", _cycleTimes, NullFun, _delay_1ms)
  57. .LoopRun(CycleRobotCycleStep.LoopRunRobotCycle, () => _robotCycleRoutine.Start(param) == RState.Running,_delay_1ms)
  58. .LoopRunWithStopStatus(CycleRobotCycleStep.LoopRunRobotCycleWait, () => { return CommonFunction.CheckRoutineEndState(_robotCycleRoutine); },
  59. () => CheckRoutineStopStatus(_robotCycleRoutine, "CycleRobotCycleRoutine failed"))
  60. .LoopEnd(CycleRobotCycleStep.LoopEnd, UpdateCycleCount, _delay_1ms)
  61. .End(CycleRobotCycleStep.End, AchievedCycleCount, _delay_1ms);
  62. return Runner.Status;
  63. }
  64. private bool CheckRoutineStopStatus(IRoutine routine, string error)
  65. {
  66. bool result = CommonFunction.CheckRoutineStopState(routine);
  67. if (result)
  68. {
  69. Stop($"{error}");
  70. }
  71. return result;
  72. }
  73. /// <summary>
  74. /// Abort
  75. /// </summary>
  76. public void Abort()
  77. {
  78. Runner.Stop("CycleRobotCycleRoutine Abort");
  79. }
  80. /// <summary>
  81. /// 统计完成的Cycle次数
  82. /// </summary>
  83. /// <returns></returns>
  84. private bool UpdateCycleCount()
  85. {
  86. _currentCycle += 1;
  87. return true;
  88. }
  89. /// <summary>
  90. ///
  91. /// </summary>
  92. /// <returns></returns>
  93. private bool AchievedCycleCount()
  94. {
  95. _currentCycle -= 1;
  96. return true;
  97. }
  98. /// <summary>
  99. /// 获取当前Cycle次数
  100. /// </summary>
  101. /// <returns></returns>
  102. public int GetCurrentCycle()
  103. {
  104. return _currentCycle;
  105. }
  106. }
  107. }