LoadPortWriteCarrierIdRoutine.cs 1.8 KB

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