VPWHomeRoutine.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Log;
  3. using Aitex.Core.RT.Routine;
  4. using Aitex.Core.Util;
  5. using MECF.Framework.Common.Routine;
  6. using PunkHPX8_Core;
  7. using PunkHPX8_RT.Devices.VpwCell;
  8. using PunkHPX8_RT.Devices.VpwMain;
  9. using SecsGem.Core.ItemModel;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. namespace PunkHPX8_RT.Modules.VpwMain
  16. {
  17. public class VPWHomeRoutine : RoutineBase, IRoutine
  18. {
  19. private enum HomeStep
  20. {
  21. ChameberUp,
  22. OpenCellDrainValve,
  23. End
  24. }
  25. #region 常量
  26. #endregion
  27. #region 内部变量
  28. /// <summary>
  29. /// Cell device集合
  30. /// </summary>
  31. private List<VpwCellDevice> _vpwCellDevices;
  32. /// <summary>
  33. /// Main Device
  34. /// </summary>
  35. private VpwMainDevice _mainDevice;
  36. /// <summary>
  37. /// cell集合
  38. /// </summary>
  39. private List<VpwCellDevice> _cellLst=new List<VpwCellDevice>();
  40. #endregion
  41. /// <summary>
  42. /// 构造函数
  43. /// </summary>
  44. /// <param name="module"></param>
  45. /// <param name="device"></param>
  46. public VPWHomeRoutine(string module) : base(module)
  47. {
  48. }
  49. /// <summary>
  50. /// 中止
  51. /// </summary>
  52. public void Abort()
  53. {
  54. Runner.Stop("Manual abort");
  55. }
  56. /// <summary>
  57. /// 监控
  58. /// </summary>
  59. /// <returns></returns>
  60. public RState Monitor()
  61. {
  62. Runner.Run(HomeStep.ChameberUp, _mainDevice.ChamberUp, CheckChamberClosed, _delay_1s)
  63. .Run(HomeStep.OpenCellDrainValve, OpenCellDrainValve, CheckCellDrainValveStatus, _delay_2s)
  64. .End(HomeStep.End,NullFun, _delay_1ms);
  65. return Runner.Status;
  66. }
  67. /// <summary>
  68. /// 检验Chamber关闭
  69. /// </summary>
  70. /// <returns></returns>
  71. private bool CheckChamberClosed()
  72. {
  73. return _mainDevice.CommonData.ChamberClosed && !_mainDevice.CommonData.ChamberOpened;
  74. }
  75. /// <summary>
  76. /// 打开所有cell valve
  77. /// </summary>
  78. /// <returns></returns>
  79. private bool OpenCellDrainValve()
  80. {
  81. foreach(var device in _vpwCellDevices)
  82. {
  83. VpwCellEntity vpwCellEntity = Singleton<RouteManager>.Instance.GetModule<VpwCellEntity>(device.Module);
  84. if (vpwCellEntity.IsAuto||vpwCellEntity.IsManual)
  85. {
  86. _cellLst.Add(device);
  87. bool result= device.DrainValveOn();
  88. if (!result)
  89. {
  90. LOG.WriteLog(eEvent.ERR_VPWMAIN, Module, $"{device.Module} open drain valve failed");
  91. CloseCellDrainValve();
  92. return false;
  93. }
  94. }
  95. }
  96. return true;
  97. }
  98. /// <summary>
  99. /// 检验Cell Drain状态
  100. /// </summary>
  101. /// <returns></returns>
  102. private bool CheckCellDrainValveStatus()
  103. {
  104. foreach (var item in _cellLst)
  105. {
  106. bool result = item.CommonData.DrainValve;
  107. if (!result)
  108. {
  109. LOG.WriteLog(eEvent.ERR_VPWMAIN, Module, $"{item.Module} drain valve is not opened");
  110. CloseCellDrainValve();
  111. return false;
  112. }
  113. }
  114. return true;
  115. }
  116. /// <summary>
  117. /// 关闭所有cell的Drain valve
  118. /// </summary>
  119. private void CloseCellDrainValve()
  120. {
  121. foreach (var item in _cellLst)
  122. {
  123. item.DrainValveOff();
  124. }
  125. }
  126. /// <summary>
  127. /// 启动
  128. /// </summary>
  129. /// <param name="objs"></param>
  130. /// <returns></returns>
  131. public RState Start(params object[] objs)
  132. {
  133. List<VpwCellDevice> lstDevice = (List<VpwCellDevice>)objs[0];
  134. _vpwCellDevices.Clear();
  135. _cellLst.Clear();
  136. for (int i = 0; i < lstDevice.Count; i++)
  137. {
  138. _vpwCellDevices.Add(lstDevice[i]);
  139. }
  140. _mainDevice = DEVICE.GetDevice<VpwMainDevice>(Module.ToString());
  141. return Runner.Start(Module,"VPW Home");
  142. }
  143. }
  144. }