LoadWithSMIFRoutine.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Log;
  3. using Aitex.Core.RT.Routine;
  4. using Aitex.Core.RT.SCCore;
  5. using Aitex.Core.Util;
  6. using MECF.Framework.Common.Equipment;
  7. using MECF.Framework.RT.ModuleLibrary.VceModules;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Runtime.InteropServices;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using Venus_Core;
  15. using Venus_RT.Devices;
  16. using Venus_RT.Devices.SMIF;
  17. using Venus_RT.Modules.TM;
  18. using Venus_RT.Modules.TM.VenusEntity;
  19. using static Venus_RT.Modules.VCE.LoadRoutine;
  20. namespace Venus_RT.Modules.VCE
  21. {
  22. public class LoadWithSMIFRoutine : ModuleRoutineBase, IRoutine
  23. {
  24. private enum LoadWithSMIFStep
  25. {
  26. VceGotoLP,
  27. VceOuterDoorOpen,
  28. SMIFLoad,
  29. CloseOutDoor,
  30. Mapping,
  31. ReadMap,
  32. VcePumpDown,
  33. OpenInnerDoor,
  34. NotifyOver
  35. }
  36. private HongHuTM _tm;
  37. private VceModuleBase _vce;
  38. private ISMIF _smif;
  39. private int _VceMotionTimeout;
  40. private int _SMIFMotionTimeout;
  41. private SEMFPumpRoutine pumpRoutine;
  42. public LoadWithSMIFRoutine(ModuleName module, VceModuleBase vce, ISMIF smif) : base(module)
  43. {
  44. _vce = vce;
  45. _smif = smif;
  46. _tm = DEVICE.GetDevice<HongHuTM>("SETM");
  47. pumpRoutine = new SEMFPumpRoutine(_tm, module);
  48. }
  49. public RState Start(params object[] objs)
  50. {
  51. _VceMotionTimeout = SC.GetValue<int>($"{Module}.MotionTimeout") * 1000;
  52. _SMIFMotionTimeout = SC.GetValue<int>($"{Module}.SMIF.MotionTimeout") * 1000;
  53. //如果不是ATM 不允许执行
  54. if (!Singleton<RouteManager>.Instance.seTM.VCEIsATM)
  55. {
  56. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, Module, $"VCE is not atm cannot load prepare! Please Vent it First!");
  57. return RState.Failed;
  58. }
  59. if (!Singleton<RouteManager>.Instance.seTM.IsVCESlitDoorClosed)
  60. {
  61. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, Module, $"VCE Inner Door is open! Please close it First!");
  62. return RState.Failed;
  63. }
  64. Reset();
  65. return Runner.Start(Module,"Start Load with smif");
  66. }
  67. public RState Monitor()
  68. {
  69. Runner
  70. .Run(LoadWithSMIFStep.VceGotoLP, VceGotoLP, CheckVceStageDownDone, _VceMotionTimeout)
  71. .Run(LoadWithSMIFStep.VceOuterDoorOpen, VceOuterDoorOpen, CheckVceOuterDoorOpenDone, _VceMotionTimeout)
  72. .Run(LoadWithSMIFStep.SMIFLoad, SMIFLoad, CheckSMIFLoadDone, _SMIFMotionTimeout)
  73. .Run(LoadWithSMIFStep.CloseOutDoor, CloseOutDoor, CheckVceIdle, _VceMotionTimeout)
  74. .Run(LoadWithSMIFStep.Mapping, Mapping, CheckVceIdle, _VceMotionTimeout)
  75. .Run(LoadWithSMIFStep.ReadMap, ReadMap, CheckVceIdle, _VceMotionTimeout)
  76. .Run(LoadWithSMIFStep.VcePumpDown, PumpDown, CheckPumpOver, 2*60*1000)
  77. .Run(LoadWithSMIFStep.OpenInnerDoor, OpenInnerDoor, CheckInnerDoorOpen, _VceMotionTimeout)
  78. .End(LoadWithSMIFStep.NotifyOver, NullFun, 100);
  79. return Runner.Status;
  80. }
  81. private bool SMIFLoad()
  82. {
  83. //_smif.Load();
  84. return true;
  85. }
  86. private bool CheckSMIFLoadDone()
  87. {
  88. return true;
  89. }
  90. private bool VceGotoLP()
  91. {
  92. return _vce.GotoLP();
  93. }
  94. private bool VceOuterDoorOpen()
  95. {
  96. if (Singleton<RouteManager>.Instance.seTM.VCEIsATM && Singleton<RouteManager>.Instance.seTM.VCEPressure >= SC.GetValue<int>($"{Module}.OutDoorOpenPressure"))
  97. {
  98. return _vce.OpenDoor();
  99. }
  100. else
  101. {
  102. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, Module, $"{Module} is not ATM or Pressure not arrive {SC.GetValue<int>($"{Module}.OutDoorOpenPressure")}");
  103. return false;
  104. }
  105. }
  106. private bool CheckVceStageDownDone()
  107. {
  108. if (_vce.Status == RState.Timeout || _vce.Status == RState.Failed)
  109. {
  110. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, Module, $"VCE Stage Down failed");
  111. }
  112. return _vce.Status == RState.End;
  113. }
  114. private bool CheckVceOuterDoorOpenDone()
  115. {
  116. if (_vce.Status == RState.Timeout || _vce.Status == RState.Failed)
  117. {
  118. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, Module, $"VCE OuterDoor Open failed");
  119. }
  120. return _vce.Status == RState.End;
  121. }
  122. private bool CheckInnerDoorOpen()
  123. {
  124. return !_tm.VCESlitDoorClosed;
  125. }
  126. private bool OpenInnerDoor()
  127. {
  128. return _tm.TurnSlitDoor(Module, true);
  129. }
  130. //
  131. private bool CheckPumpOver()
  132. {
  133. RState ret = pumpRoutine.Monitor();
  134. if (ret == RState.Failed || ret == RState.Timeout)
  135. {
  136. Singleton<RouteManager>.Instance.VCE.PostMsg(VceMSG.Error);
  137. }
  138. return ret == RState.End;
  139. }
  140. private bool CheckVceIdle()
  141. {
  142. if (_vce.Status == RState.Failed || _vce.Status == RState.Timeout)
  143. {
  144. Singleton<RouteManager>.Instance.GetVCE(Module).PostMsg(VceMSG.Error);
  145. return false;
  146. }
  147. return _vce.Status == RState.End;
  148. }
  149. private bool PumpDown()
  150. {
  151. return pumpRoutine.Start() == RState.Running;
  152. }
  153. private bool ReadMap()
  154. {
  155. return _vce.ReadMap();
  156. }
  157. private bool Mapping()
  158. {
  159. return _vce.Map();
  160. }
  161. private bool CloseOutDoor()
  162. {
  163. return _vce.CloseDoor();
  164. }
  165. public void Abort()
  166. {
  167. }
  168. }
  169. }