BoatShutterCycleTest.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Device.Unit;
  3. using Aitex.Core.RT.Event;
  4. using Aitex.Core.RT.Routine;
  5. using Aitex.Core.RT.SCCore;
  6. using Aitex.Core.Util;
  7. using Aitex.Sorter.Common;
  8. using MECF.Framework.Common.Alarms;
  9. using MECF.Framework.Common.Device.Bases;
  10. using MECF.Framework.Common.Equipment;
  11. using MECF.Framework.Common.SubstrateTrackings;
  12. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot;
  13. using System;
  14. using System.Collections.Generic;
  15. using System.Linq;
  16. using System.Text;
  17. using System.Threading.Tasks;
  18. using FurnaceRT.Equipments.Systems;
  19. using static Aitex.Core.RT.Device.Unit.IoBoat;
  20. using System.Diagnostics;
  21. using FurnaceRT.Devices;
  22. namespace FurnaceRT.Equipments.Boats
  23. {
  24. public class BoatShutterCycleTest : ModuleRoutine, IRoutine
  25. {
  26. enum RoutineStep
  27. {
  28. ShutterOpen,
  29. ShutterClose,
  30. Loop,
  31. EndLoop,
  32. Delay1,
  33. Delay2,
  34. Delay3,
  35. }
  36. private float _speed;
  37. private float _interval;
  38. private BoatModule _boatModule;
  39. private int _timeout = 0;
  40. private int _shutterTimeout = 0;
  41. private int _count;
  42. public BoatShutterCycleTest(BoatModule boatModule)
  43. {
  44. _boatModule = boatModule;
  45. Module = boatModule.Module;
  46. Name = "ShutterCycleTest";
  47. }
  48. public void Init()
  49. {
  50. }
  51. public Result Start(params object[] objs)
  52. {
  53. Reset();
  54. _timeout = 6;// SC.GetValue<int>($"Boat.BoatElevatorServo.MotionTimeout");
  55. _count = SC.GetValue<int>($"{Module}.AutoShutter.CycleCount");
  56. _interval = (float)SC.GetValue<double>($"Boat.BoatElevatorServo.IntervalTime");
  57. _shutterTimeout = SC.GetValue<int>($"{Module}.AutoShutter.MotionTimeout");
  58. string reason = string.Empty;
  59. if (!_boatModule.CheckPrepareMove(out reason, false))
  60. {
  61. _boatModule.BoatZAxisMoveFailedForInterlock.Set(reason);
  62. return Result.FAIL;
  63. }
  64. Notify($"Start");
  65. return Result.RUN;
  66. }
  67. public void Abort()
  68. {
  69. _boatModule.ShutterDevice.Reset();
  70. }
  71. public override Result Monitor()
  72. {
  73. try
  74. {
  75. Loop((int)RoutineStep.Loop, _count);
  76. ShutterOpen((int)RoutineStep.ShutterOpen, true, _shutterTimeout);
  77. Delay((int)RoutineStep.Delay1, 2);
  78. Delay((int)RoutineStep.Delay2, _interval);
  79. ShutterOpen((int)RoutineStep.ShutterClose, false, _shutterTimeout);
  80. Delay((int)RoutineStep.Delay3, _interval);
  81. EndLoop((int)RoutineStep.EndLoop);
  82. }
  83. catch (RoutineBreakException)
  84. {
  85. return Result.RUN;
  86. }
  87. catch (RoutineFaildException ex)
  88. {
  89. return Result.FAIL;
  90. }
  91. _boatModule.ShutterDevice.Reset();
  92. Notify("Finished");
  93. return Result.DONE;
  94. }
  95. private void ShutterOpen(int id, bool isOpen, int timeout)
  96. {
  97. Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
  98. {
  99. Notify($"shutter {(isOpen ? "open" : "close")}");
  100. string reason;
  101. if (!_boatModule.ShutterDevice.SetOpen(isOpen, out reason))
  102. {
  103. _boatModule.ShutterDevice.AutoShutterMoveFailedForInterlock.Set();
  104. return false;
  105. }
  106. return true;
  107. }, () =>
  108. {
  109. return isOpen ? _boatModule.ShutterDevice.OpenCloseStatus == DeviceStatus.Open : _boatModule.ShutterDevice.OpenCloseStatus == DeviceStatus.Close;
  110. }, timeout * 1000);
  111. if (ret.Item1)
  112. {
  113. if (ret.Item2 == Result.FAIL)
  114. {
  115. throw (new RoutineFaildException());
  116. }
  117. else if (ret.Item2 == Result.TIMEOUT) //timeout
  118. {
  119. if (isOpen)
  120. {
  121. _boatModule.ShutterDevice.AutoShutterOpenTimeOut.Set($"can not complete in {timeout} seconds");
  122. }
  123. else
  124. {
  125. _boatModule.ShutterDevice.AutoShutterCloseTimeOut.Set($"can not complete in {timeout} seconds");
  126. }
  127. throw (new RoutineFaildException());
  128. }
  129. else
  130. throw (new RoutineBreakException());
  131. }
  132. }
  133. }
  134. }