SEMFPumpRoutine.cs 3.7 KB

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