LoadPortClampRoutine.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Aitex.Core.RT.Log;
  2. using Aitex.Core.RT.Routine;
  3. using Aitex.Core.RT.SCCore;
  4. using System;
  5. using CyberX8_Core;
  6. using MECF.Framework.Common.Equipment;
  7. namespace CyberX8_RT.Modules.LPs
  8. {
  9. class LoadPortClampRoutine : ModuleRoutineBase, IRoutine
  10. {
  11. enum RoutineStep
  12. {
  13. WaitEFEMIdle,
  14. Clamp,
  15. End,
  16. }
  17. public bool IsUnloadClamp { get; set; }
  18. private int _timeout = 0;
  19. private LoadPortModule _lpModule;
  20. public LoadPortClampRoutine(LoadPortModule lpModule) : base( ModuleHelper.Converter(lpModule.Module))
  21. {
  22. _lpModule = lpModule;
  23. Name = "Clamp";
  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.Clamp, Clamp, CheckDevice, _timeout * 1000)
  36. .End(RoutineStep.End, NullFun, _delay_1s);
  37. return Runner.Status;
  38. }
  39. public bool Clamp()
  40. {
  41. Notify($"Start clamp {_lpModule.LPDevice.Module}, unload clamp = {IsUnloadClamp}");
  42. _lpModule.LPDevice.Clamp(IsUnloadClamp);
  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. }