LoadPortMapRoutine.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using Aitex.Core.RT.Routine;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using Aitex.Core.RT.Log;
  8. using MECF.Framework.Common.Equipment;
  9. using Aitex.Core.RT.SCCore;
  10. using CyberX8_Core;
  11. using System.Windows.Controls;
  12. namespace CyberX8_RT.Modules.LPs
  13. {
  14. class LoadPortMapRoutine : ModuleRoutineBase, IRoutine
  15. {
  16. enum RoutineStep
  17. {
  18. GotoMapWaitIdle,
  19. GotoMap,
  20. WaitEFEMIdle,
  21. Map,
  22. RequestMapWaitIdle,
  23. RequestMap,
  24. BackWaitIdle,
  25. Back,
  26. End,
  27. }
  28. private int _timeout = 0;
  29. private LoadPortModule _lpModule;
  30. public LoadPortMapRoutine(LoadPortModule lpModule) : base(ModuleHelper.Converter(lpModule.Module))
  31. {
  32. _lpModule = lpModule;
  33. Name = "Map";
  34. }
  35. public RState Start(params object[] objs)
  36. {
  37. Reset();
  38. _timeout = SC.GetValue<int>("EFEM.LoadPort.MotionTimeout");
  39. Notify($"Start");
  40. return Runner.Start(Module, Name);
  41. }
  42. public RState Monitor()
  43. {
  44. Runner.Wait(RoutineStep.GotoMapWaitIdle, () => _lpModule.IsRobotIdle)
  45. .Run(RoutineStep.GotoMap,GotoMap,CheckDevice,_timeout*1000)
  46. .Wait(RoutineStep.WaitEFEMIdle,()=> _lpModule.IsRobotIdle)
  47. .Run(RoutineStep.Map, Map, CheckDevice, _timeout * 1000)
  48. .Wait(RoutineStep.RequestMapWaitIdle,()=> _lpModule.IsRobotIdle)
  49. .Run(RoutineStep.RequestMap,RequestMap,CheckDevice,_timeout*1000)
  50. .Wait(RoutineStep.BackWaitIdle,()=> _lpModule.IsRobotIdle)
  51. .Run(RoutineStep.Back,Back,CheckDevice,_timeout*1000)
  52. .End(RoutineStep.End, NullFun, _delay_1s);
  53. return Runner.Status;
  54. }
  55. private bool GotoMap()
  56. {
  57. return _lpModule.JetEfem.GotoMap(Module, Aitex.Sorter.Common.Hand.Blade1);
  58. }
  59. private bool Map()
  60. {
  61. Notify($"Start Map {_lpModule.LPDevice.Module}");
  62. _lpModule.LPDevice.Map();
  63. return true;
  64. }
  65. private bool Back()
  66. {
  67. return _lpModule.JetEfem.GotoMap(Module, Aitex.Sorter.Common.Hand.Blade1,"RE");
  68. }
  69. private bool RequestMap()
  70. {
  71. return _lpModule.JetEfem.RequestMapResult(Module);
  72. }
  73. bool CheckDevice()
  74. {
  75. if (_lpModule.LPDevice.IsError)
  76. return false;
  77. if (_lpModule.LPDevice.IsBusy)
  78. return false;
  79. return true;
  80. }
  81. public void Abort()
  82. {
  83. Runner.Stop("Manual Abort");
  84. }
  85. }
  86. }