DosingCommonHelper.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Log;
  3. using PunkHPX8_Core;
  4. using PunkHPX8_RT.Devices.Reservoir;
  5. using PunkHPX8_RT.Modules.Reservoir;
  6. using MECF.Framework.Common.Persistent.Reservoirs;
  7. using MECF.Framework.Common.Persistent.Temperature;
  8. using MECF.Framework.Common.RecipeCenter;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Reflection;
  12. using static PunkHPX8_RT.Devices.Reservoir.DosingSystemHelper;
  13. namespace PunkHPX8_RT.Devices.Dose
  14. {
  15. public class DosingCommonHelper
  16. {
  17. public enum DoseState
  18. {
  19. Init,
  20. Idle,
  21. Error,
  22. Initializing
  23. }
  24. #region 内部变量
  25. /// <summary>
  26. /// ModuleName
  27. /// </summary>
  28. private string _moduleName;
  29. /// <summary>
  30. /// ReplenID
  31. /// </summary>
  32. private int _replenNum;
  33. /// <summary>
  34. /// 当前操作
  35. /// </summary>
  36. private List<DosingOperation> _currentDosingOperation;
  37. /// <summary>
  38. /// Replen Persistent Value
  39. /// </summary>
  40. private Dictionary<string, ReplenPersistentValue> _persistentValue = new Dictionary<string, ReplenPersistentValue>();
  41. /// <summary>
  42. /// DosingSystem初始化状态
  43. /// </summary>
  44. private RState _initializeRState;
  45. /// <summary>
  46. /// DosingSystemState
  47. /// </summary>
  48. private string _dosingSystemState;
  49. /// <summary>
  50. /// DosingSystemInitializeRoutine
  51. /// </summary>
  52. private DosingSystemInitializeRoutine _dosingSystemInitializeRoutine;
  53. /// <summary>
  54. /// DosingSystem是否已初始化
  55. /// </summary>
  56. private bool _isDosingSystemInitialized;
  57. #endregion
  58. #region 属性
  59. /// <summary>
  60. /// DosingSystem是否已经Initialized
  61. /// </summary>
  62. public bool IsDosingSystemInitialized { get { return _isDosingSystemInitialized; } }
  63. /// <summary>
  64. /// DosingSystem State
  65. /// </summary>
  66. public string DosingSystemState { get { return _dosingSystemState; } }
  67. /// <summary>
  68. /// DosingSystem Initialize State
  69. /// </summary>
  70. public RState InitializeState { get { return _initializeRState; } }
  71. #endregion
  72. /// <summary>
  73. /// 构造函数
  74. /// </summary>
  75. /// <param name="moduleName"></param>
  76. public DosingCommonHelper(string moduleName, int replenNum)
  77. {
  78. _moduleName = moduleName;
  79. _replenNum = replenNum;
  80. for (int i = 0; i < _replenNum; i++)
  81. {
  82. string replenName = "Replen" + (i + 1).ToString();
  83. _currentDosingOperation.Add(DosingOperation.None);
  84. _persistentValue[replenName] = ReplenPersistentManager.Instance.GetReplenPersistentValue(_moduleName, replenName);
  85. }
  86. _dosingSystemInitializeRoutine = new DosingSystemInitializeRoutine(_moduleName);
  87. _dosingSystemState = DoseState.Init.ToString();
  88. }
  89. /// <summary>
  90. /// ManualDose监控
  91. /// </summary>
  92. public void ManualDoseSystemMonitor()
  93. {
  94. for (int i = 0; i < _replenNum; i++)
  95. {
  96. string replenName = "Replen" + (i + 1).ToString();
  97. if (_currentDosingOperation[i] == DosingOperation.ManualDosing && !_persistentValue[replenName].IsDosingRunning)
  98. {
  99. _currentDosingOperation[i] = DosingOperation.None;
  100. }
  101. else if (_currentDosingOperation[i] == DosingOperation.ManualDosing && _persistentValue[replenName].IsDosingRunning)
  102. {
  103. continue;
  104. }
  105. }
  106. }
  107. public void CheckDoseOperation()
  108. {
  109. for (int i = 0; i < _replenNum; i++)
  110. {
  111. if (_currentDosingOperation[i] == DosingOperation.AutoDosing)
  112. {
  113. _currentDosingOperation[i] = DosingOperation.None;
  114. }
  115. }
  116. }
  117. /// <summary>
  118. /// Dose状态监控
  119. /// </summary>
  120. public void DoseStatusMonitor()
  121. {
  122. //DosingSystem Initialize监控
  123. if (_initializeRState == RState.Running)
  124. {
  125. DosingInitializingMonitor();
  126. }
  127. }
  128. /// <summary>
  129. /// 监控DosingSystem初始化
  130. /// </summary>
  131. /// <returns></returns>
  132. public void DosingInitializingMonitor()
  133. {
  134. _initializeRState = _dosingSystemInitializeRoutine.Monitor();
  135. if (_initializeRState == RState.Failed || _initializeRState == RState.Timeout)
  136. {
  137. _dosingSystemState = DoseState.Error.ToString();
  138. }
  139. if (_initializeRState == RState.End)
  140. {
  141. _isDosingSystemInitialized = true;
  142. _dosingSystemState = DoseState.Idle.ToString();
  143. }
  144. }
  145. /// <summary>
  146. /// DosingSystem初始化
  147. /// </summary>
  148. /// <param name="cmd"></param>
  149. /// <param name="args"></param>
  150. /// <returns></returns>
  151. public bool DosingInitialize()
  152. {
  153. _dosingSystemState = DoseState.Initializing.ToString();
  154. _isDosingSystemInitialized = false;
  155. _initializeRState = _dosingSystemInitializeRoutine.Start();
  156. if (_initializeRState == RState.Running) return true;
  157. return false;
  158. }
  159. /// <summary>
  160. /// Enetr Init State
  161. /// </summary>
  162. /// <param name="cmd"></param>
  163. /// <param name="args"></param>
  164. /// <returns></returns>
  165. public bool DosingEnterInit()
  166. {
  167. if (_dosingSystemState == DoseState.Idle.ToString())
  168. {
  169. _dosingSystemState = DoseState.Init.ToString();
  170. }
  171. _isDosingSystemInitialized = false;
  172. return true;
  173. }
  174. }
  175. }