TMCycle.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using Aitex.Core.RT.Routine;
  2. using Aitex.Core.RT.SCCore;
  3. using Aitex.Sorter.Common;
  4. using Venus_RT.Devices;
  5. using MECF.Framework.Common.Routine;
  6. using MECF.Framework.Common.Equipment;
  7. using MECF.Framework.Common.SubstrateTrackings;
  8. using Venus_Core;
  9. using Aitex.Core.RT.Log;
  10. using Aitex.Core.Util;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using Venus_RT.Modules.Schedulers;
  14. using Venus_RT.Scheduler;
  15. using System;
  16. namespace Venus_RT.Modules
  17. {
  18. class TMCycle : ModuleRoutineBase, IRoutine
  19. {
  20. enum TMCycleStep
  21. {
  22. Start,
  23. ReturnBack,
  24. Cycling,
  25. End,
  26. }
  27. private bool IsModuleAvailable(ModuleName module) => dictSchedulers.Keys.Contains(module) && dictSchedulers[module].IsAvailable;
  28. List<ModuleName> tmCycleRoutine = new List<ModuleName>() { ModuleName.LLA, ModuleName.PMA, ModuleName.PMB, ModuleName.LLB };
  29. int cycleCount = 1;
  30. ModuleName _sourceModule = ModuleName.LLA;
  31. ModuleName _destinationModule = ModuleName.LLB;
  32. SchedulerTMRobot _TMRobot = new SchedulerTMRobot();
  33. Dictionary<ModuleName, SchedulerModule> dictSchedulers = new Dictionary<ModuleName, SchedulerModule>();
  34. public TMCycle() : base(ModuleName.System)
  35. {
  36. Name = "TM Cycle";
  37. void _initMoudle(ModuleName name, SchedulerModule sche)
  38. {
  39. if (ModuleHelper.IsInstalled(name))
  40. {
  41. dictSchedulers[name] = sche;
  42. }
  43. }
  44. _initMoudle(ModuleName.LLA, new SchedulerLoadLock(ModuleName.LLA));
  45. _initMoudle(ModuleName.LLB, new SchedulerLoadLock(ModuleName.LLB));
  46. _initMoudle(ModuleName.PMA, new SchedulerPM(ModuleName.PMA));
  47. _initMoudle(ModuleName.PMB, new SchedulerPM(ModuleName.PMB));
  48. _initMoudle(ModuleName.PMC, new SchedulerPM(ModuleName.PMC));
  49. _initMoudle(ModuleName.PMD, new SchedulerPM(ModuleName.PMD));
  50. }
  51. public RState Start(params object[] objs)
  52. {
  53. if (objs.Length == 2)
  54. {
  55. var modules = ((string[])objs[0]).ToList();
  56. if (modules.Count >= 2)
  57. tmCycleRoutine.Clear();
  58. foreach(var mod in modules)
  59. {
  60. try
  61. {
  62. ModuleName module = ModuleHelper.Converter(mod);
  63. tmCycleRoutine.Add(module);
  64. }
  65. catch(Exception _)
  66. {
  67. LOG.Write(eEvent.ERR_ROUTER, "TMCycle", $"Invalid module string: {mod}");
  68. return RState.Failed;
  69. }
  70. }
  71. cycleCount = (int)objs[1];
  72. }
  73. return Runner.Start(Module, Name);
  74. }
  75. public RState Monitor()
  76. {
  77. Runner.Run((int)TMCycleStep.Start, NullFun)
  78. .LoopStart((int)TMCycleStep.ReturnBack, "Cycle", cycleCount, ReturnBack, IsReturnDone)
  79. .LoopEnd((int)TMCycleStep.Cycling, Cycling, IsCycleDone)
  80. .End((int)TMCycleStep.End, NullFun, _delay_50ms);
  81. return Runner.Status;
  82. }
  83. private bool ReturnBack()
  84. {
  85. if(_TMRobot.IsAvailable)
  86. {
  87. for(int i = 0; i < tmCycleRoutine.Count - 1; i++)
  88. {
  89. if(IsModuleAvailable(tmCycleRoutine[i]) && IsModuleAvailable(tmCycleRoutine[i+1]))
  90. {
  91. }
  92. }
  93. }
  94. return true;
  95. }
  96. private bool IsReturnDone()
  97. {
  98. return true;
  99. }
  100. private bool Cycling()
  101. {
  102. return true;
  103. }
  104. private bool IsCycleDone()
  105. {
  106. return true;
  107. }
  108. public void Abort()
  109. {
  110. }
  111. }
  112. }