ModuleFsmDevice.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using Aitex.Core.RT.Routine;
  2. using Aitex.Core.RT.SCCore;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using CyberX8_Core;
  6. namespace MECF.Framework.RT.ModuleLibrary.Commons
  7. {
  8. public class ModuleFsmDevice : FsmDevice
  9. {
  10. public bool IsInstalled
  11. {
  12. get
  13. {
  14. if (!SC.ContainsItem($"System.SetUp.Is{Module}Installed"))
  15. return true;
  16. return SC.GetValue<bool>($"System.SetUp.Is{Module}Installed");
  17. }
  18. }
  19. public bool IsOnline { get; set; }
  20. protected Queue<IRoutine> QueueRoutine
  21. {
  22. get { return _routine; }
  23. }
  24. private Queue<IRoutine> _routine = new Queue<IRoutine>();
  25. public ModuleFsmDevice() : base()
  26. {
  27. }
  28. public override bool Initialize()
  29. {
  30. return base.Initialize();
  31. }
  32. public RState StartRoutine(IRoutine routine, params object[] args)
  33. {
  34. QueueRoutine.Clear();
  35. QueueRoutine.Enqueue(routine);
  36. return QueueRoutine.Peek().Start(args);
  37. }
  38. public RState StartRoutine(IRoutine routine)
  39. {
  40. QueueRoutine.Clear();
  41. QueueRoutine.Enqueue(routine);
  42. return QueueRoutine.Peek().Start();
  43. }
  44. public RState StartRoutine()
  45. {
  46. if (_routine.Count == 0)
  47. return RState.End;
  48. RState ret = RState.End;
  49. var lst = _routine.ToList();
  50. for (int i = 0; i < lst.Count; i++)
  51. {
  52. ret = lst[i].Start();
  53. if (ret == RState.End)
  54. {
  55. _routine.Dequeue();
  56. continue;
  57. }
  58. else
  59. {
  60. break;
  61. }
  62. }
  63. return RState.End;
  64. }
  65. public RState MonitorRoutine()
  66. {
  67. if (_routine.Count == 0)
  68. return RState.End;
  69. IRoutine routine = _routine.Peek();
  70. RState ret = routine.Monitor();
  71. if (ret == RState.End)
  72. {
  73. _routine.Dequeue();
  74. var lst = _routine.ToList();
  75. for (int i = 0; i < lst.Count; i++)
  76. {
  77. ret = lst[i].Start();
  78. if (ret == RState.End)
  79. {
  80. _routine.Dequeue();
  81. continue;
  82. }
  83. else
  84. {
  85. break;
  86. }
  87. }
  88. }
  89. return ret;
  90. }
  91. public void AbortRoutine()
  92. {
  93. if (_routine != null)
  94. {
  95. if (_routine.Count != 0)
  96. {
  97. _routine.Peek().Abort();
  98. _routine.Clear();
  99. }
  100. }
  101. }
  102. }
  103. }