EfemHomeRoutine.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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 MECF.Framework.Common.Schedulers;
  12. using System.Collections.Generic;
  13. using Venus_RT.Devices.EFEM;
  14. namespace Venus_RT.Modules.EFEM
  15. {
  16. class EfemHomeRoutine : ModuleRoutineBase, IRoutine
  17. {
  18. private enum HomeStep
  19. {
  20. ClearError,
  21. InitRobot,
  22. HomeAllAxes,
  23. CheckWaferPresence,
  24. End,
  25. }
  26. private enum HomeModuleStep
  27. {
  28. Home,
  29. End,
  30. }
  31. private int _homeTimeout = 30 * 1000;
  32. ModuleName _targetModule;
  33. EfemBase _efem;
  34. public EfemHomeRoutine(EfemBase efem) : base(ModuleName.EfemRobot)
  35. {
  36. _efem = efem;
  37. }
  38. public RState Start(params object[] objs)
  39. {
  40. _targetModule = (ModuleName)objs[0];
  41. _homeTimeout = SC.GetValue<int>($"EFEM.HomeTimeout") * 1000;
  42. return Runner.Start(Module, $"Home {_targetModule}");
  43. }
  44. public RState Monitor()
  45. {
  46. if(_targetModule == ModuleName.System)
  47. {
  48. Runner.Run((int)HomeStep.ClearError, ClearError, IsStepComplete, _homeTimeout)
  49. .Run((int)HomeStep.InitRobot, HomeAll, IsStepComplete, _homeTimeout)
  50. .Run((int)HomeStep.HomeAllAxes, HomeAllAxes, IsStepComplete, _homeTimeout)
  51. .Run((int)HomeStep.CheckWaferPresence, CheckWaferPresence, IsStepComplete, _homeTimeout)
  52. .End((int)HomeStep.End, NullFun, _delay_50ms);
  53. }
  54. else
  55. {
  56. Runner.Run((int)HomeModuleStep.Home, HomeModule, IsStepComplete, _homeTimeout)
  57. .End((int)HomeModuleStep.End, NullFun, _delay_50ms);
  58. }
  59. return Runner.Status;
  60. }
  61. public void Abort()
  62. {
  63. }
  64. private bool IsStepComplete()
  65. {
  66. if (_efem.Status == RState.End)
  67. {
  68. return true;
  69. }
  70. else if (_efem.Status != RState.Running)
  71. {
  72. LOG.Write(eEvent.ERR_EFEM_ROBOT, Module, $"Efem home failed: {_efem.Status}");
  73. return true;
  74. }
  75. else
  76. return false;
  77. }
  78. private bool ClearError()
  79. {
  80. return _efem.ClearError();
  81. }
  82. private bool HomeAll()
  83. {
  84. return _efem.HomeAll();
  85. }
  86. private bool HomeModule()
  87. {
  88. return _efem.Home(_targetModule);
  89. }
  90. private bool HomeAllAxes()
  91. {
  92. return true;
  93. }
  94. private bool CheckWaferPresence()
  95. {
  96. return true;
  97. }
  98. }
  99. }