SEMFVentRoutine.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using Aitex.Core.RT.Log;
  2. using Aitex.Core.RT.Routine;
  3. using Aitex.Core.RT.SCCore;
  4. using MECF.Framework.Common.Equipment;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Venus_Core;
  11. using Venus_RT.Devices;
  12. using Venus_RT.Devices.TM;
  13. namespace Venus_RT.Modules.TM.VenusEntity
  14. {
  15. public class SEMFVentRoutine : ModuleRoutineBase, IRoutine
  16. {
  17. private enum SEVentStep
  18. {
  19. seTryGetVent,
  20. seOpenSoftVent,
  21. seSwitchFastVent,
  22. seDelayForClose,
  23. seCloseVentValves,
  24. seReleaseVent
  25. }
  26. private int _venttimeout;
  27. private int _ventcrosspressure;
  28. private int _ventDelay;
  29. private readonly TMBase _tm;
  30. //private SEVentStatus
  31. public SEMFVentRoutine(TMBase tm, ModuleName module) : base(module)
  32. {
  33. _tm = tm;
  34. Name = "Vent";
  35. }
  36. public RState Start(params object[] objs)
  37. {
  38. if (_tm.CheckPumpValveClosed(Module))
  39. {
  40. Reset();
  41. _venttimeout = SC.GetValue<int>($"{Module}.VentingTimeout") * 1000;
  42. _ventcrosspressure = SC.GetValue<int>($"{Module}.SoftVentEndPressure");
  43. _ventDelay = SC.GetValue<int>($"{Module}.OverVentDelay")*1000;
  44. return Runner.Start(Module, Name);
  45. }
  46. else
  47. {
  48. LOG.Write(eEvent.ERR_DEVICE_INFO,Module, "Pump Valve not all Close! Cannot Vent!");
  49. return RState.Failed;
  50. }
  51. }
  52. public RState Monitor()
  53. {
  54. Runner.Wait(SEVentStep.seTryGetVent, TryGetVent ,_delay_60s)
  55. .Run(SEVentStep.seOpenSoftVent, OpenSoftVentValve, IsSoftVentEnd)
  56. .Run(SEVentStep.seSwitchFastVent, SwitchFastVentValve, IsPressureReady, _venttimeout)
  57. .Delay(SEVentStep.seDelayForClose, _ventDelay)
  58. .Run(SEVentStep.seCloseVentValves, CloseVentValve, NullFun, _delay_50ms)
  59. .End(SEVentStep.seReleaseVent, ReleaseVent, NullFun, _delay_50ms);
  60. return Runner.Status;
  61. }
  62. private bool ReleaseVent()
  63. {
  64. _tm.ReleaseVent(Module);
  65. return true;
  66. }
  67. private bool TryGetVent()
  68. {
  69. return _tm.TryGetVent(Module);
  70. }
  71. private bool OpenSoftVentValve()
  72. {
  73. _tm.TurnSoftVentValve(Module, true);
  74. return true;
  75. }
  76. private bool IsSoftVentEnd() => _tm.GetModulePressure(Module) > _ventcrosspressure;
  77. private bool SwitchFastVentValve()
  78. {
  79. if (Module == ModuleName.TM)
  80. _tm.SetTMFlow(100);
  81. _tm.TurnSoftVentValve(Module, false);
  82. _tm.TurnFastVentValve(Module, true);
  83. return true;
  84. }
  85. private bool IsPressureReady()
  86. {
  87. switch (Module)
  88. {
  89. case ModuleName.TM:
  90. return _tm.IsTMATM;
  91. case ModuleName.VCE1:
  92. return _tm.IsVCEATM;
  93. case ModuleName.VCEA:
  94. return _tm.IsVCEAATM;
  95. case ModuleName.VCEB:
  96. return _tm.IsVCEBATM;
  97. }
  98. return false;
  99. }
  100. private bool CloseVentValve()
  101. {
  102. _tm.TurnSoftVentValve(Module,false);
  103. _tm.TurnFastVentValve(Module,false);
  104. if (Module == ModuleName.TM)
  105. _tm.SetTMFlow(0);
  106. return true;
  107. }
  108. public void Abort()
  109. {
  110. _tm.TurnFastVentValve(Module,false);
  111. _tm.TurnSoftVentValve(Module, false);
  112. _tm.ReleaseVent(Module);
  113. }
  114. }
  115. }