SchedulerModule.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. using Aitex.Core.Common.DeviceData;
  2. using Aitex.Core.Util;
  3. using MECF.Framework.Common.Equipment;
  4. using MECF.Framework.Common.SubstrateTrackings;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Aitex.Core.RT.Device;
  11. using Aitex.Core.RT.Event;
  12. using Aitex.Core.RT.Log;
  13. using Aitex.Sorter.Common;
  14. using Virgo_DRT.Modules;
  15. using MECF.Framework.Common.Schedulers;
  16. using Virgo_DRT.Devices;
  17. namespace Virgo_DRT.Scheduler
  18. {
  19. public class SchedulerModule
  20. {
  21. protected enum TaskType
  22. {
  23. None,
  24. PrepareTransfer,
  25. Pick,
  26. Place,
  27. PickAndPlace,
  28. PostTransfer,
  29. Preprocess,
  30. Process,
  31. PostProcess,
  32. OpenCover,
  33. CloseCover,
  34. Load,
  35. Unload,
  36. Align,
  37. TransferTarget,
  38. Cooling,
  39. Heating,
  40. Map,
  41. }
  42. public ModuleName Module
  43. {
  44. get { return ModuleHelper.Converter(_module); }
  45. }
  46. public virtual bool IsAvailable { get; }
  47. public virtual bool IsOnline { get; }
  48. public virtual bool IsError { get; }
  49. protected string _module;
  50. protected TaskType _task = TaskType.None;
  51. protected EnumTransferType _inTransferType;
  52. protected int _inTransferSlot;
  53. protected ModuleName _inProcessRobot;
  54. public SchedulerModule(string module)
  55. {
  56. _module = module;
  57. }
  58. protected void LogTaskStart(TaskType cmd, string message)
  59. {
  60. EV.PostInfoLog("Scheduler", $"Task start:{_module}, {cmd}, {message}");
  61. }
  62. protected void LogTaskDone(TaskType cmd, string message)
  63. {
  64. EV.PostInfoLog("Scheduler", $"Task done:{_module}, {cmd}, {message}");
  65. }
  66. public void ResetTask()
  67. {
  68. _task = TaskType.None;
  69. }
  70. public bool WaitTransfer(ModuleName robot, EnumTransferType transferType, int slot)
  71. {
  72. _task = TaskType.TransferTarget;
  73. _inProcessRobot = robot;
  74. _inTransferType = transferType;
  75. _inTransferSlot = slot;
  76. LogTaskStart(_task, $"Note {robot} in transfer");
  77. return true;
  78. }
  79. public bool IsWaitTransfer(ModuleName robot)
  80. {
  81. return _task == TaskType.TransferTarget && _inProcessRobot == robot;
  82. }
  83. public virtual bool StopWaitTransfer(ModuleName robot)
  84. {
  85. LogTaskDone(_task, $"Note {robot} transfer complete");
  86. _inProcessRobot = ModuleName.System;
  87. _task = TaskType.None;
  88. return true;
  89. }
  90. public bool HasWafer(int slot)
  91. {
  92. return WaferManager.Instance.CheckHasWafer(ModuleHelper.Converter(_module), slot);
  93. }
  94. public bool NoWafer(int slot)
  95. {
  96. return WaferManager.Instance.CheckNoWafer(ModuleHelper.Converter(_module), slot);
  97. }
  98. public virtual bool IsReadyForPick(ModuleName robot, int slot)
  99. {
  100. return true;
  101. }
  102. public virtual bool IsReadyForPlace(ModuleName robot, int slot)
  103. {
  104. return true;
  105. }
  106. public virtual bool PrepareTransfer(ModuleName robot, EnumTransferType type, int slot)
  107. {
  108. return true;
  109. }
  110. public virtual bool PostTransfer(ModuleName robot, EnumTransferType type, int slot)
  111. {
  112. StopWaitTransfer(robot);
  113. return true;
  114. }
  115. public virtual bool PostTransfer(ModuleName robot )
  116. {
  117. StopWaitTransfer(robot);
  118. return true;
  119. }
  120. public virtual bool Process(string recipeName, bool isCleanRecipe, bool withDummyWafer)
  121. {
  122. return true;
  123. }
  124. public virtual bool Cooling(int coolingTime)
  125. {
  126. return true;
  127. }
  128. public virtual bool Preheating(float temperature)
  129. {
  130. return true;
  131. }
  132. }
  133. }