SEMFPumpRoutine.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using Aitex.Core.RT.Log;
  2. using Aitex.Core.RT.Routine;
  3. using Aitex.Core.RT.SCCore;
  4. using Aitex.Core.Util;
  5. using MECF.Framework.Common.Equipment;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using Venus_Core;
  12. using Venus_RT.Devices;
  13. using Venus_RT.Devices.TM;
  14. namespace Venus_RT.Modules.TM.VenusEntity
  15. {
  16. public class SEMFPumpRoutine : ModuleRoutineBase, IRoutine
  17. {
  18. public enum PumpDownStep
  19. {
  20. seWaitModuleReady,
  21. seOpenSoftPump,
  22. seSwitchFastPump,
  23. seClosePumpValves,
  24. seDelayForSafe,
  25. seReleasePump
  26. }
  27. private double _pumpBasePressure;
  28. private double _pumpCrossingPressure;
  29. private int _pumpingTimeout;
  30. private int _switchPumpDelay;
  31. private readonly TMBase _TM;
  32. public SEMFPumpRoutine(TMBase tm,ModuleName module) : base(module)
  33. {
  34. _TM = tm;
  35. Name = "Pump Down";
  36. }
  37. public RState Start(params object[] objs)
  38. {
  39. if (ModuleHelper.IsVCE(Module) && !Singleton<RouteManager>.Instance.GetVCE(Module).VCEOutDoorClosed)
  40. {
  41. LOG.Write(eEvent.ERR_VCE_COMMON_Failed, Module, $"cannot pumpdown as {Module}outdoor is open.");
  42. return RState.Failed;
  43. }
  44. //待补充 lid purge状态检查 没有相关IO
  45. if (_TM.CheckVentValveClosed(Module))
  46. {
  47. Reset();
  48. _pumpBasePressure = SC.GetValue<double>($"{Module}.PumpBasePressure");
  49. _pumpCrossingPressure = SC.GetValue<double>($"{Module}.PumpCrossingPressure");
  50. _pumpingTimeout = SC.GetValue<int>($"{Module}.PumpingTimeout") * 1000;
  51. _switchPumpDelay = SC.GetValue<int>($"{Module}.SwitchPumpDelay");
  52. return Runner.Start(Module, Name);
  53. }
  54. return RState.Failed;
  55. }
  56. public RState Monitor()
  57. {
  58. Runner
  59. .Wait(PumpDownStep.seWaitModuleReady, WaitPump, _delay_60s)
  60. .Run(PumpDownStep.seOpenSoftPump, OpenSoftPump, ArriveCrossPressure, _pumpingTimeout)
  61. .Run(PumpDownStep.seSwitchFastPump, SwitchFastPump, IsPressureReady, _pumpingTimeout)
  62. .Delay(PumpDownStep.seDelayForSafe, _switchPumpDelay)
  63. .Run(PumpDownStep.seClosePumpValves, ClosePumpValves, NullFun)
  64. .End(PumpDownStep.seReleasePump, ReleaseTMPump, NullFun);
  65. return Runner.Status;
  66. }
  67. private bool WaitPump()
  68. {
  69. if (!IsPressureReady())
  70. {
  71. return _TM.TryGetPump(Module);
  72. }
  73. return true;
  74. }
  75. private bool OpenSoftPump()
  76. {
  77. if (!IsPressureReady())
  78. {
  79. _TM.TurnSoftPumpValve(Module, true);
  80. }
  81. return true;
  82. }
  83. private bool ArriveCrossPressure()
  84. {
  85. return _TM.GetModulePressure(Module) < _pumpCrossingPressure;
  86. }
  87. public bool SwitchFastPump()
  88. {
  89. if (!IsPressureReady())
  90. {
  91. _TM.TurnSoftPumpValve(Module,false);
  92. _TM.TurnFastPumpValve(Module,true);
  93. }
  94. return true;
  95. }
  96. public bool IsPressureReady()
  97. {
  98. return _TM.GetModulePressure(Module) < _pumpBasePressure;
  99. }
  100. public bool ClosePumpValves()
  101. {
  102. _TM.TurnFastPumpValve(Module, false);
  103. _TM.TurnSoftPumpValve(Module, false);
  104. return true;
  105. }
  106. public bool ReleaseTMPump()
  107. {
  108. _TM.ReleasePump(Module);
  109. return true;
  110. }
  111. public void Abort()
  112. {
  113. //关闭所有阀体 释放使用权
  114. _TM.TurnFastPumpValve(Module, false);
  115. _TM.TurnSoftPumpValve(Module, false);
  116. _TM.ReleasePump(Module);
  117. }
  118. }
  119. }