SEMFHomeRoutine.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using Aitex.Core.RT.Routine;
  2. using Aitex.Core.RT.SCCore;
  3. using MECF.Framework.Common.Equipment;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using Venus_Core;
  10. using Venus_RT.Devices;
  11. using Venus_RT.Devices.PreAligner;
  12. namespace Venus_RT.Modules.TM.VenusEntity
  13. {
  14. public class SEMFHomeRoutine : ModuleRoutineBase, IRoutine
  15. {
  16. private enum HomeStep
  17. {
  18. seRobotHome,
  19. seRobotDelay,
  20. seSlitDoor,
  21. seSlitDoorDelay,
  22. seVPAHome,
  23. seEnd,
  24. }
  25. private int _robotHomingTimeout = 120 * 1000;
  26. private int _slitDoorHomingTimeout = 20 * 1000;
  27. private int _vpaHomingTimeout = 20 * 1000;
  28. private bool _TMHomeRBFlag = false; //是否仅仅home robot
  29. private readonly HongHuTM _HongHuTM;
  30. private readonly ITransferRobot _robot;
  31. private readonly IPreAlign _vpa;
  32. public int currentStepNo;
  33. public SEMFHomeRoutine(HongHuTM HongHuTM, ITransferRobot robot,IPreAlign vpa) : base(ModuleName.TM)
  34. {
  35. _HongHuTM = HongHuTM;
  36. _robot = robot;
  37. _vpa = vpa;
  38. Name = "SE TM Home";
  39. }
  40. public RState Start(params object[] objs)
  41. {
  42. if (objs.Length > 0 && objs[0].ToString() == "TMRobot")
  43. _TMHomeRBFlag = true;
  44. currentStepNo = 0;
  45. //没有Lid传感 检查
  46. Reset();
  47. _robotHomingTimeout = SC.GetValue<int>($"{Module}.HomeTimeout") * 1000;
  48. return Runner.Start(Module, Name);
  49. }
  50. //模式 指令名称 执行命令 检查结束命令 超时时长
  51. public RState Monitor()
  52. {
  53. Runner.Run(HomeStep.seRobotHome, HomeRobot, CheckRobotReady, _robotHomingTimeout)
  54. .Delay(HomeStep.seRobotDelay, 500)
  55. .Run(HomeStep.seSlitDoor, HomeSlitDoor, CheckSlitDoorReady, _slitDoorHomingTimeout)
  56. .Delay(HomeStep.seSlitDoorDelay, 500)
  57. .Run(HomeStep.seVPAHome, HomeVPA, CheckVPAReady, _vpaHomingTimeout)
  58. .End(HomeStep.seEnd, NullFun, _delay_50ms);
  59. return Runner.Status;
  60. }
  61. private bool CheckVPAReady()
  62. {
  63. //vpa 检查
  64. return _vpa.Status == RState.End;
  65. }
  66. private bool HomeVPA()
  67. {
  68. //vpa home
  69. return _vpa.Home();
  70. }
  71. private bool CheckSlitDoorReady()
  72. {
  73. //检查门状态
  74. if (_HongHuTM.AllPMSlitDoorClosed && _HongHuTM.VCESlitDoorClosed)
  75. return true;
  76. else
  77. return false;
  78. }
  79. private bool HomeSlitDoor()
  80. {
  81. _HongHuTM.HomeVceSlitDoor();
  82. currentStepNo = 2;
  83. return _HongHuTM.CloseAllSlitDoor();
  84. }
  85. private bool CheckRobotReady()
  86. {
  87. //robot状态结束
  88. return _robot.Status == RState.End;
  89. }
  90. private bool HomeRobot()
  91. {
  92. //robot开始Home
  93. currentStepNo = 1;
  94. return _robot.Home();
  95. }
  96. public void Abort()
  97. {
  98. }
  99. }
  100. }