LoadPortDockRoutine.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using Aitex.Core.RT.Log;
  2. using Aitex.Core.RT.Routine;
  3. using Aitex.Core.RT.SCCore;
  4. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
  5. using System;
  6. using CyberX8_Core;
  7. using MECF.Framework.Common.Equipment;
  8. namespace CyberX8_RT.Modules.LPs
  9. {
  10. class LoadPortDockRoutine : ModuleRoutineBase, IRoutine
  11. {
  12. enum RoutineStep
  13. {
  14. WaitEFEMIdle,
  15. Dock,
  16. End,
  17. }
  18. public bool IsUnloadDock { get; set; }
  19. private int _timeout = 0;
  20. private LoadPortModule _lpModule;
  21. public LoadPortDockRoutine(LoadPortModule lpModule) : base( ModuleHelper.Converter(lpModule.Module))
  22. {
  23. _lpModule = lpModule;
  24. Name = "Dock";
  25. }
  26. public RState Start(params object[] objs)
  27. {
  28. Reset();
  29. _timeout = SC.GetValue<int>("EFEM.LoadPort.MotionTimeout");
  30. Notify($"Start");
  31. return Runner.Start(Module, Name);
  32. }
  33. public RState Monitor()
  34. {
  35. Runner.Wait(RoutineStep.WaitEFEMIdle, () => _lpModule.IsRobotIdle)
  36. .Run(RoutineStep.Dock, Dock, CheckDevice, _timeout * 1000)
  37. .End(RoutineStep.End, NullFun, _delay_1s);
  38. return Runner.Status;
  39. }
  40. public bool Dock()
  41. {
  42. Notify($"Start Dock {_lpModule.LPDevice.Module}");
  43. return _lpModule.LPDevice.Dock();
  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. }