PMPostTransferRoutine.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using Aitex.Core.RT.Routine;
  3. using Aitex.Core.RT.SCCore;
  4. using VirgoRT.Devices;
  5. using VirgoCommon;
  6. namespace VirgoRT.Modules.PMs
  7. {
  8. class PMPostTransferRoutine : PMRoutineBase, IRoutine
  9. {
  10. enum RoutineStep
  11. {
  12. PumpDown,
  13. SetPinDown,
  14. SetSlitDoor,
  15. SlitDoorDelay,
  16. kEnd
  17. }
  18. private int _timeout;
  19. private MovementPosition _liftPinPosition;
  20. public PMPostTransferRoutine(JetPM chamber) : base(chamber)
  21. {
  22. Name = "PostTransfer";
  23. }
  24. public Result Start(params object[] objs)
  25. {
  26. Reset();
  27. GetLiftPinSetting(objs);
  28. _timeout = SC.GetValue<int>($"{Module}.PrepareTransferTimeout");
  29. Notify("Start");
  30. return Result.RUN;
  31. }
  32. public Result Monitor()
  33. {
  34. try
  35. {
  36. SetLiftPinPos((int)RoutineStep.SetPinDown, _liftPinPosition, _timeout);
  37. SetSlitDoor((int)RoutineStep.SetSlitDoor, false, _timeout);
  38. End((int)RoutineStep.kEnd);
  39. }
  40. catch (RoutineBreakException)
  41. {
  42. return Result.RUN;
  43. }
  44. catch (RoutineFaildException)
  45. {
  46. Notify("Error");
  47. return Result.FAIL;
  48. }
  49. catch (Exception ex)
  50. {
  51. Stop(ex.Message);
  52. return Result.FAIL;
  53. }
  54. Notify("Finish");
  55. return Result.DONE;
  56. }
  57. public override void Abort() { }
  58. private void GetLiftPinSetting(object[] objs)
  59. {
  60. _liftPinPosition = MovementPosition.Down;
  61. if (objs.Length >= 1 && (string)objs[0] != "Pick")
  62. {
  63. int pos = SC.GetValue<int>($"{Module}.LiftPinPositionAfterPlace");
  64. if (pos == 1)
  65. _liftPinPosition = MovementPosition.Middle;
  66. else if (pos == 2)
  67. _liftPinPosition = MovementPosition.Up;
  68. }
  69. }
  70. }
  71. }