SEMFPumpRoutine.cs 3.8 KB

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