LoadPortCycleLoadUnloadRoutine.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using Aitex.Core.RT.Routine;
  2. using MECF.Framework.Common.Routine;
  3. using CyberX8_Core;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Runtime.InteropServices;
  10. namespace CyberX8_RT.Modules.LPs
  11. {
  12. sealed class LoadPortCycleLoadUnloadRoutine : RoutineBase, IRoutine
  13. {
  14. private enum CycleLoadStep
  15. {
  16. LoopStart,
  17. LoopLoad,
  18. LoopLoadWait,
  19. LoopDelay,
  20. LoopUnload,
  21. LoopUnloadWait,
  22. LoopEnd,
  23. End
  24. }
  25. #region 内部变量
  26. private LoadPortModule _loadPortModule;
  27. private LoadPortLoadRoutine _loadRoutine;
  28. private LoadPortUnloadRoutine _unloadRoutine;
  29. private int _cycle = 0;
  30. #endregion
  31. /// <summary>
  32. /// 构造函数
  33. /// </summary>
  34. /// <param name="module"></param>
  35. public LoadPortCycleLoadUnloadRoutine(LoadPortModule loadPortModule) : base(loadPortModule.Module)
  36. {
  37. _loadRoutine = new LoadPortLoadRoutine(loadPortModule);
  38. _unloadRoutine=new LoadPortUnloadRoutine(loadPortModule);
  39. _loadPortModule = loadPortModule;
  40. }
  41. /// <summary>
  42. /// Abort
  43. /// </summary>
  44. public void Abort()
  45. {
  46. Runner.Stop("Manual Abort");
  47. }
  48. public RState Monitor()
  49. {
  50. Runner.LoopStart(CycleLoadStep.LoopStart, "Loop Start Load/Uload", _cycle, NullFun, _delay_1ms)
  51. .LoopRun(CycleLoadStep.LoopLoad, () => _loadRoutine.Start() == RState.Running, _delay_1ms)
  52. .LoopRunWithStopStatus(CycleLoadStep.LoopLoadWait, () => CheckRoutineEndStatus(_loadRoutine), () => CheckRoutineStopStatus(_loadRoutine))
  53. .LoopDelay(CycleLoadStep.LoopDelay,_delay_2s)
  54. .LoopRun(CycleLoadStep.LoopUnload, () => _unloadRoutine.Start() == RState.Running, _delay_1ms)
  55. .LoopRunWithStopStatus(CycleLoadStep.LoopUnloadWait, () => CheckRoutineEndStatus(_unloadRoutine), () => CheckRoutineStopStatus(_unloadRoutine))
  56. .LoopEnd(CycleLoadStep.LoopEnd, NullFun, _delay_2s)
  57. .End(CycleLoadStep.End, NullFun, _delay_1ms);
  58. return Runner.Status;
  59. }
  60. private bool CheckRoutineEndStatus(IRoutine routine)
  61. {
  62. return routine.Monitor() == RState.End;
  63. }
  64. private bool CheckRoutineStopStatus(IRoutine routine)
  65. {
  66. RState state =routine.Monitor();
  67. if(state==RState.Failed||state==RState.Timeout)
  68. {
  69. return true;
  70. }
  71. return false;
  72. }
  73. public RState Start(params object[] objs)
  74. {
  75. _cycle=(int)objs[0];
  76. return Runner.Start(Module, "Start cycle Load/Unload");
  77. }
  78. }
  79. }