EfemMapDummyRoutine.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using Aitex.Core.Common;
  2. using MECF.Framework.Common.Equipment;
  3. using CyberX8_RT.Devices.EFEM;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using Aitex.Core.RT.Log;
  10. using Aitex.Core.RT.Routine;
  11. using Aitex.Sorter.Common;
  12. using MECF.Framework.Common.Schedulers;
  13. using MECF.Framework.Common.SubstrateTrackings;
  14. using System.Diagnostics;
  15. using CyberX8_Core;
  16. using Aitex.Core.RT.SCCore;
  17. using System.Threading;
  18. namespace CyberX8_RT.Modules.EFEM
  19. {
  20. public class EfemMapDummyRoutine:ModuleRoutineBase, IRoutine
  21. {
  22. private enum MapDummyStep
  23. {
  24. SetDummy1Size,
  25. MapDummy1,
  26. SetDummy2Size,
  27. MapDummy2,
  28. End,
  29. }
  30. EfemBase _efem;
  31. private int _waferSize = SC.GetValue<int>("System.WaferSize");
  32. /// <summary>
  33. /// 构造函数
  34. /// </summary>
  35. /// <param name="efem"></param>
  36. public EfemMapDummyRoutine(EfemBase efem) : base(ModuleName.EfemRobot)
  37. {
  38. _efem = efem;
  39. }
  40. /// <summary>
  41. /// 启动
  42. /// </summary>
  43. /// <param name="objs"></param>
  44. /// <returns></returns>
  45. public RState Start(params object[] objs)
  46. {
  47. return Runner.Start(Module, "Map Dummy");
  48. }
  49. /// <summary>
  50. /// 监控
  51. /// </summary>
  52. /// <returns></returns>
  53. public RState Monitor()
  54. {
  55. Runner.RunIf(MapDummyStep.SetDummy1Size, ModuleHelper.IsInstalled(ModuleName.Dummy1),
  56. () => { return SetWaferSize(ModuleName.Dummy1); }, CheckSetSizeDone,_delay_5s)
  57. .RunIf(MapDummyStep.MapDummy1, ModuleHelper.IsInstalled(ModuleName.Dummy1),
  58. () => { return Map(ModuleName.Dummy1);},CheckMapDone,40000)
  59. .RunIf(MapDummyStep.SetDummy2Size, ModuleHelper.IsInstalled(ModuleName.Dummy2),
  60. () => { return SetWaferSize(ModuleName.Dummy2); }, CheckSetSizeDone,_delay_5s)
  61. .RunIf(MapDummyStep.MapDummy2, ModuleHelper.IsInstalled(ModuleName.Dummy2),
  62. () => { return Map(ModuleName.Dummy2); }, CheckMapDone, 40000)
  63. .End(MapDummyStep.End, ActionDone, 0);
  64. return Runner.Status;
  65. }
  66. /// <summary>
  67. /// Map功能
  68. /// </summary>
  69. /// <returns></returns>
  70. private bool Map(ModuleName moduleName)
  71. {
  72. return _efem.Map(moduleName);
  73. }
  74. /// <summary>
  75. /// 设置晶圆尺寸
  76. /// </summary>
  77. /// <returns></returns>
  78. private bool SetWaferSize(ModuleName moduleName)
  79. {
  80. return _efem.SetWaferSize(moduleName,_waferSize);
  81. }
  82. private bool CheckMapDone()
  83. {
  84. if (_efem.Status == RState.End)
  85. {
  86. return true;
  87. }
  88. else if (_efem.Status != RState.Running)
  89. {
  90. LOG.Write(eEvent.ERR_EFEM_COMMON_FAILED, Module, $"Efem MapDummy failed: {_efem.Status}");
  91. return true;
  92. }
  93. return false;
  94. }
  95. private bool CheckSetSizeDone()
  96. {
  97. if (_efem.Status == RState.End)
  98. {
  99. return true;
  100. }
  101. else if (_efem.Status != RState.Running)
  102. {
  103. LOG.Write(eEvent.ERR_EFEM_COMMON_FAILED, Module, $"Efem SetDummySize failed: {_efem.Status}");
  104. return true;
  105. }
  106. return false;
  107. }
  108. private bool ActionDone()
  109. {
  110. return true;
  111. }
  112. public void Abort()
  113. {
  114. }
  115. }
  116. }