PMPartialPressureRoutine.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using Aitex.Core.RT.Routine;
  2. using Aitex.Core.RT.SCCore;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using Venus_Core;
  9. using Venus_RT.Devices;
  10. namespace Venus_RT.Modules.PMs
  11. {
  12. class PMPartialPressureRoutine : PMRoutineBase, IRoutine
  13. {
  14. int gasIndex;
  15. int GasMaxScale;
  16. public int counter;
  17. int gasTime;
  18. ValveType[] valveTypes = new ValveType[4] { ValveType.PV11, ValveType.PV21, ValveType.PV31, ValveType.PV41 };
  19. private enum PartialPressureStep
  20. {
  21. kDelay_1s,
  22. kStartGas,
  23. kReadChamberPressure,
  24. kEnd,
  25. }
  26. public PMPartialPressureRoutine(JetPM chamber) : base(chamber)
  27. {
  28. Name = "PMPartialPressure";
  29. }
  30. public RState Start(params object[] objs)
  31. {
  32. if (!CheckTurboPump())
  33. {
  34. return RState.Failed;
  35. }
  36. if (_chamber.GetPVPosition() == 0)
  37. {
  38. Stop("钟摆阀没有打开");
  39. return RState.Failed;
  40. }
  41. _chamber.OpenValve(ValveType.Guage, true);
  42. _chamber.OpenValve(ValveType.TurboPumpPumping, true);
  43. _chamber.OpenValve(ValveType.TurboPumpPurge, true);
  44. counter = 1;
  45. Reset();
  46. gasIndex = (int)objs[0];
  47. gasTime = (int)objs[1];
  48. GasMaxScale = SC.GetValue<int>($"{Module}.MfcGas{gasIndex.ToString()}.MfcN2Scale");
  49. //_chamber.CloseValves();
  50. _chamber.SetPVPostion(1000);
  51. return Runner.Start(Module, Name);
  52. }
  53. public RState Monitor()
  54. {
  55. Runner.Delay((int)PartialPressureStep.kDelay_1s, 1000 * 1)
  56. .LoopStart((int)PartialPressureStep.kStartGas, "Partial Pressure Test", 10, () => SetGasPoint(), gasTime)
  57. .LoopEnd((int)PartialPressureStep.kReadChamberPressure, ReadChamberPressure, _delay_1s)
  58. .End((int)PartialPressureStep.kEnd, () =>
  59. {
  60. _chamber.CloseValves();
  61. return true;
  62. }, 500);
  63. return Runner.Status;
  64. }
  65. private bool SetGasPoint()
  66. {
  67. if (gasIndex <= 4)
  68. {
  69. _chamber.OpenValve(valveTypes[gasIndex - 1], true);
  70. }
  71. _chamber.OpenValve(ValveType.GasFinal, true);
  72. _chamber.FlowGas(gasIndex - 1, GasMaxScale * 0.1 * counter);
  73. return true;
  74. }
  75. private bool ReadChamberPressure()
  76. {
  77. counter += 1;
  78. return true;
  79. }
  80. public void Abort()
  81. {
  82. _chamber.CloseValves();
  83. }
  84. }
  85. }