LoadPortUnDockRoutine.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System;
  2. using Aitex.Core.RT.Device;
  3. using Aitex.Core.RT.Log;
  4. using Aitex.Core.RT.Routine;
  5. using Aitex.Core.RT.SCCore;
  6. using MECF.Framework.Common.Equipment;
  7. using CyberX8_Core;
  8. namespace CyberX8_RT.Modules.LPs
  9. {
  10. class LoadPortUnDockRoutine : ModuleRoutineBase, IRoutine
  11. {
  12. enum RoutineStep
  13. {
  14. WaitEFEMIdle,
  15. UnDock,
  16. End,
  17. }
  18. private int _timeout = 0;
  19. private LoadPortModule _lpModule;
  20. public LoadPortUnDockRoutine(LoadPortModule lpModule) : base(ModuleHelper.Converter(lpModule.Module))
  21. {
  22. _lpModule = lpModule;
  23. Name = "UnDock";
  24. }
  25. public RState Start(params object[] objs)
  26. {
  27. Reset();
  28. _timeout = SC.GetValue<int>("EFEM.LoadPort.MotionTimeout");
  29. Notify($"Start");
  30. return Runner.Start(Module, Name);
  31. }
  32. public RState Monitor()
  33. {
  34. Runner.Wait(RoutineStep.WaitEFEMIdle, () => _lpModule.IsRobotIdle)
  35. .Run(RoutineStep.UnDock, UnDock, CheckDevice, _timeout * 1000)
  36. .End(RoutineStep.End, NullFun, _delay_1s);
  37. return Runner.Status;
  38. }
  39. public bool UnDock()
  40. {
  41. Notify($"Start unDock {_lpModule.LPDevice.Module}");
  42. _lpModule.LPDevice.Undock();
  43. return true;
  44. }
  45. bool CheckDevice()
  46. {
  47. if (_lpModule.LPDevice.IsError)
  48. return false;
  49. if (_lpModule.LPDevice.IsBusy)
  50. return false;
  51. return true;
  52. }
  53. public void Abort()
  54. {
  55. }
  56. }
  57. }