SchedulerLoadPort.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Aitex.Core.Util;
  7. using Aitex.Sorter.Common;
  8. using MECF.Framework.Common.Equipment;
  9. using MECF.Framework.Common.Schedulers;
  10. using MECF.Framework.Common.SubstrateTrackings;
  11. using CyberX8_RT.Modules;
  12. namespace CyberX8_RT.Schedulers
  13. {
  14. public class SchedulerLoadPort : SchedulerModule
  15. {
  16. public override bool IsAvailable
  17. {
  18. get { return _entity.IsIdle && IsLoaded && CheckTaskDone(); }
  19. }
  20. public override bool IsOnline
  21. {
  22. get { return true; }
  23. }
  24. public override bool IsError
  25. {
  26. get { return _entity.IsError; }
  27. }
  28. public override bool IsIdle
  29. {
  30. get { return _entity.IsIdle; }
  31. }
  32. public bool IsLoaded
  33. {
  34. get { return _entity.EfemDevice[Module].IsLoaded; }
  35. }
  36. private EfemEntity _entity = null;
  37. public SchedulerLoadPort(ModuleName module) : base(module.ToString())
  38. {
  39. _module = module.ToString();
  40. _entity = Singleton<RouteManager>.Instance.EFEM;
  41. }
  42. public override bool IsReadyForPick(ModuleName robot, int slot, Hand blade)
  43. {
  44. return _entity.IsPrepareTransferReady(Module, EnumTransferType.Pick, slot)
  45. && WaferManager.Instance.CheckHasWafer(ModuleHelper.Converter(_module), slot);
  46. }
  47. public override bool IsReadyForPlace(ModuleName robot, int slot, Hand blade)
  48. {
  49. return _entity.IsPrepareTransferReady(Module, EnumTransferType.Place, slot)
  50. && WaferManager.Instance.CheckNoWafer(ModuleHelper.Converter(_module), slot);
  51. }
  52. public bool CheckTaskDone()
  53. {
  54. bool ret = false;
  55. switch (_task)
  56. {
  57. case TaskType.None:
  58. ret = true;
  59. break;
  60. case TaskType.PrepareTransfer:
  61. ret = _entity.IsPrepareTransferReady(ModuleName.EfemRobot, EnumTransferType.Pick, 0);
  62. break;
  63. }
  64. if (ret && _task != TaskType.None)
  65. {
  66. LogTaskDone(_task, "");
  67. _task = TaskType.None;
  68. }
  69. return ret;
  70. }
  71. internal bool CheckReadyRunJob()
  72. {
  73. return _entity.CheckReadyRunNewJob(this.Module);
  74. }
  75. internal bool CheckReadyTransfer()
  76. {
  77. return _entity.CheckReadyTransfer(this.Module);
  78. }
  79. internal bool CheckPlaced()
  80. {
  81. return _entity.CheckPlaced(this.Module);
  82. }
  83. public void NoteJobStart()
  84. {
  85. _entity.NoteJobStart(ModuleHelper.Converter(_module));
  86. }
  87. public void NoteJobComplete()
  88. {
  89. _entity.NoteJobComplete(ModuleHelper.Converter(_module));
  90. }
  91. }
  92. }