LoadPortWriteCarrierIdRoutine.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using Aitex.Core.RT.Routine;
  2. using Aitex.Core.RT.SCCore;
  3. using System;
  4. namespace VirgoRT.Modules.LPs
  5. {
  6. class LoadPortWriteCarrierIdRoutine : ModuleRoutine, IRoutine
  7. {
  8. enum RoutineStep
  9. {
  10. WriteCarrierId,
  11. }
  12. public string CarrierIdSetPoint { get; set; }
  13. private int _timeout = 0;
  14. private LoadPortModule _lpModule;
  15. public LoadPortWriteCarrierIdRoutine(LoadPortModule lpModule)
  16. {
  17. _lpModule = lpModule;
  18. Module = lpModule.Module;
  19. Name = "Write Carrier ID";
  20. }
  21. public Result Start(params object[] objs)
  22. {
  23. Reset();
  24. _timeout = SC.GetValue<int>("EFEM.LoadPort.MotionTimeout");
  25. Notify($"Start");
  26. return Result.RUN;
  27. }
  28. public Result Monitor()
  29. {
  30. try
  31. {
  32. WriteCarrierId((int)RoutineStep.WriteCarrierId, _timeout);
  33. }
  34. catch (RoutineBreakException)
  35. {
  36. return Result.RUN;
  37. }
  38. catch (RoutineFaildException)
  39. {
  40. return Result.FAIL;
  41. }
  42. Notify("Finished");
  43. return Result.DONE;
  44. }
  45. public void WriteCarrierId(int id, int timeout)
  46. {
  47. Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
  48. {
  49. Notify($"Start write carrier id {CarrierIdSetPoint} to {_lpModule.LPDevice.Module}");
  50. _lpModule.LPDevice.WriteCarrierID(CarrierIdSetPoint);
  51. return true;
  52. }, () =>
  53. {
  54. if (_lpModule.LPDevice.IsError)
  55. return null;
  56. if (_lpModule.LPDevice.IsBusy)
  57. return false;
  58. return true;
  59. }, timeout * 1000);
  60. if (ret.Item1)
  61. {
  62. if (ret.Item2 == Result.FAIL)
  63. {
  64. Stop(string.Format("failed."));
  65. throw (new RoutineFaildException());
  66. }
  67. else if (ret.Item2 == Result.TIMEOUT) //timeout
  68. {
  69. Stop(string.Format("timeout, can not complete in {0} seconds", timeout));
  70. throw (new RoutineFaildException());
  71. }
  72. else
  73. throw (new RoutineBreakException());
  74. }
  75. }
  76. public void Abort()
  77. {
  78. }
  79. }
  80. }