GotoRoutine.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using System;
  2. using Aitex.Core.Common;
  3. using Aitex.Core.RT.Device;
  4. using Aitex.Core.RT.Event;
  5. using Aitex.Core.RT.Routine;
  6. using Aitex.Core.RT.SCCore;
  7. using Aitex.Sorter.Common;
  8. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot;
  9. using MECF.Framework.Common.Equipment;
  10. using MECF.Framework.Common.SubstrateTrackings;
  11. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
  12. using Aitex.Sorter.RT.SorterCommonFrame.Modules;
  13. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
  14. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.AlignersBase;
  15. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
  16. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts.LoadPortBase;
  17. using System.Threading;
  18. using Aitex.Core.RT.Log;
  19. using Aitex.Core.Util;
  20. using Aitex.Sorter.RT.SorterCommonFrame.SorterJobControl;
  21. namespace Aitex.Sorter.RT.SorterCommonFrame.Routines
  22. {
  23. public class GotoRoutine : CommonRoutineSorter, IRoutine
  24. {
  25. enum GotoStepEnum
  26. {
  27. Step1,
  28. Step2
  29. }
  30. private int _timeout = 0;
  31. public GotoRoutine(string module, string name)
  32. {
  33. Module = module;
  34. Name =name;
  35. }
  36. public bool Initalize()
  37. {
  38. Reset();
  39. IsRoutineActive = false;
  40. return true;
  41. }
  42. public ModuleName Source { get; set; }
  43. public int Slot { get; set; }
  44. public Hand Blade { get; set; }
  45. public RobotPostionEnum PositionCategory { get; set; }
  46. public ModuleName RobotModulename { get; set; } = ModuleName.Robot;
  47. public Result Start(params object[] objs)
  48. {
  49. Reset();
  50. Robot = DEVICE.GetDevice<RobotBaseDevice>(RobotModulename.ToString());
  51. _timeout = Robot.RobotCommandTimeout;
  52. EV.PostInfoLog("System",$"Start picking wafer from station:{Source} slot:{Slot+1} with blade {Blade}");
  53. IsRoutineActive = true;
  54. return Monitor();
  55. }
  56. public Result Monitor()
  57. {
  58. if (!IsRoutineActive) return Result.DONE;
  59. var ret = MonitorRoutine();
  60. if (ret == Result.FAIL)
  61. {
  62. IsRoutineActive = false;
  63. }
  64. if (ret == Result.DONE)
  65. {
  66. IsRoutineActive = false;
  67. }
  68. return ret;
  69. }
  70. private Result MonitorRoutine()
  71. {
  72. try
  73. {
  74. RtRobotArmGotoPosition((int)GotoStepEnum.Step1, Source,Slot, Blade, PositionCategory, _timeout, Notify, Stop);
  75. if (ExecuteResult.Item1)
  76. {
  77. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  78. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  79. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  80. if (ExecuteResult.Item2 == Result.DONE) return Result.DONE;
  81. }
  82. EV.PostInfoLog("System", $"Complete picking wafer from station:{Source} slot:{Slot + 1} with blade {Blade}.");
  83. IsRoutineActive = false;
  84. return Result.DONE;
  85. }
  86. catch (Exception ex)
  87. {
  88. EV.PostAlarmLog("System", $"Failed to pick wafer from station:{Source} slot:{Slot + 1} with blade {Blade}.");
  89. LOG.Write(ex);
  90. IsRoutineActive = false;
  91. return Result.FAIL;
  92. }
  93. }
  94. }
  95. }