AutoCycle.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. using MECF.Framework.Common.Schedulers;
  17. using Aitex.Core.RT.Fsm;
  18. namespace Venus_RT.Modules
  19. {
  20. enum ModulePriority
  21. {
  22. High,
  23. Middle,
  24. Low,
  25. Stop,
  26. }
  27. class ModuleFlag
  28. {
  29. public ModulePriority priority;
  30. public ModuleFlag(ModulePriority _priority)
  31. {
  32. priority = _priority;
  33. }
  34. }
  35. class AutoCycle : IRoutine
  36. {
  37. private RState _cycleState = RState.Init;
  38. Dictionary<ModuleName, SchedulerModule> _atmSchedulers = new Dictionary<ModuleName, SchedulerModule>();
  39. Dictionary<ModuleName, ModuleFlag> _atmModules = new Dictionary<ModuleName, ModuleFlag>();
  40. Dictionary<ModuleName, SchedulerModule> _vacSchedulers = new Dictionary<ModuleName, SchedulerModule>();
  41. Dictionary<ModuleName, ModuleFlag> _vacModules = new Dictionary<ModuleName, ModuleFlag>();
  42. public AutoCycle()
  43. {
  44. InitModules();
  45. }
  46. public RState Start(params object[] objs)
  47. {
  48. return RState.Running;
  49. }
  50. public RState Monitor()
  51. {
  52. prelude();
  53. driveAtmSystem();
  54. driveVacSystem();
  55. epilogue();
  56. return _cycleState;
  57. }
  58. public void Abort()
  59. {
  60. }
  61. private void InitModules()
  62. {
  63. foreach(var module in new ModuleName[]{ ModuleName.LP1, ModuleName.LP2, ModuleName.LP3,
  64. ModuleName.Aligner1, ModuleName.Aligner2, ModuleName.Cooling1, ModuleName.Cooling2})
  65. {
  66. if(ModuleHelper.IsInstalled(module))
  67. {
  68. if(ModuleHelper.IsLoadPort(module))
  69. {
  70. _atmSchedulers[module] = new SchedulerLoadPort(module);
  71. _atmModules[module] = new ModuleFlag(ModulePriority.Middle);
  72. }
  73. else if(ModuleHelper.IsAligner(module) || ModuleHelper.IsCooling(module))
  74. {
  75. _atmSchedulers[module] = new SchedulerAligner(module);
  76. _atmModules[module] = new ModuleFlag(ModulePriority.Middle);
  77. }
  78. }
  79. }
  80. foreach (var module in new ModuleName[] { ModuleName.PMA, ModuleName.PMB, ModuleName.PMC,
  81. ModuleName.PMD, ModuleName.PME, ModuleName.PMF})
  82. {
  83. if (ModuleHelper.IsInstalled(module))
  84. {
  85. _vacSchedulers[module] = new SchedulerPM(module);
  86. _vacModules[module] = new ModuleFlag(ModulePriority.Middle);
  87. }
  88. }
  89. foreach (var module in new ModuleName[] { ModuleName.LLA, ModuleName.LLB })
  90. {
  91. if (ModuleHelper.IsInstalled(module))
  92. {
  93. var llScheduler = new SchedulerLoadLock(module);
  94. _vacSchedulers[module] = llScheduler;
  95. _vacModules[module] = new ModuleFlag(ModulePriority.Middle);
  96. _atmSchedulers[module] = llScheduler;
  97. _atmModules[module] = new ModuleFlag(ModulePriority.Middle);
  98. }
  99. }
  100. }
  101. private void prelude()
  102. {
  103. }
  104. private void epilogue()
  105. {
  106. }
  107. private void driveVacSystem()
  108. {
  109. PumpingTMRobotTask();
  110. ProcessTMRobotTask();
  111. }
  112. #region Vacuum System
  113. private void PumpingTMRobotTask()
  114. {
  115. }
  116. private void ProcessTMRobotTask()
  117. {
  118. }
  119. private Hand GetTMRobotFreeHand()
  120. {
  121. var blade1HasWafer = WaferManager.Instance.CheckHasWafer(ModuleName.TMRobot, 0);
  122. var blade2HasWafer = WaferManager.Instance.CheckHasWafer(ModuleName.TMRobot, 1);
  123. if (blade1HasWafer && blade2HasWafer)
  124. return Hand.None;
  125. else if (!blade1HasWafer && !blade2HasWafer)
  126. return Hand.Both;
  127. else if (blade1HasWafer)
  128. return Hand.Blade2;
  129. else
  130. return Hand.Blade1;
  131. }
  132. #endregion Vacuum System
  133. #region Atm System
  134. private void driveAtmSystem()
  135. {
  136. PumpingEFEMRobotTask();
  137. ProcessEFEMRobotTask();
  138. }
  139. private void PumpingEFEMRobotTask()
  140. {
  141. }
  142. private void ProcessEFEMRobotTask()
  143. {
  144. }
  145. private Hand GetEFEMRobotFreeHand()
  146. {
  147. var blade1HasWafer = WaferManager.Instance.CheckHasWafer(ModuleName.EfemRobot, 0);
  148. var blade2HasWafer = WaferManager.Instance.CheckHasWafer(ModuleName.EfemRobot, 1);
  149. if (blade1HasWafer && blade2HasWafer)
  150. return Hand.None;
  151. else if (!blade1HasWafer && !blade2HasWafer)
  152. return Hand.Both;
  153. else if (blade1HasWafer)
  154. return Hand.Blade2;
  155. else
  156. return Hand.Blade1;
  157. }
  158. #endregion Atm System
  159. }
  160. }