SchedulerModule.cs 3.5 KB

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