ReservoirEntity.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. using Aitex.Core.RT.Fsm;
  2. using Aitex.Core.RT.Log;
  3. using Aitex.Core.Utilities;
  4. using MECF.Framework.Common.Equipment;
  5. using MECF.Framework.Common.Persistent.Reservoirs;
  6. using MECF.Framework.Common.Persistent.Temperature;
  7. using PunkHPX8_Core;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace PunkHPX8_RT.Modules.Reservoir
  14. {
  15. public class ReservoirEntity : Entity, IEntity, IModuleEntity
  16. {
  17. #region 常量
  18. private const string STRATUS = "Stratus";
  19. private const string AUTO = "Auto";
  20. private const string MANUAL = "Manual";
  21. private const string DISABLED = "Disabled";
  22. private const string ENGINEERING = "Engineering";
  23. private const string PRODUCTION = "Production";
  24. #endregion
  25. #region 内部变量
  26. /// <summary>
  27. /// 持久化数值
  28. /// </summary>
  29. private ReservoirsPersistentValue _persistentValue;
  30. #endregion
  31. #region 属性
  32. /// <summary>
  33. /// 模块名称
  34. /// </summary>
  35. public ModuleName Module { get; private set; }
  36. /// <summary>
  37. /// 是否Init
  38. /// </summary>
  39. public bool IsInit
  40. {
  41. get { return fsm.State == (int)ReservoirState.Init; }
  42. }
  43. /// <summary>
  44. /// 是否Idle
  45. /// </summary>
  46. public bool IsIdle
  47. {
  48. get
  49. {
  50. return fsm.State == (int)ReservoirState.Idle;
  51. }
  52. }
  53. /// <summary>
  54. /// 是否错误
  55. /// </summary>
  56. public bool IsError
  57. {
  58. get { return fsm.State == (int)ReservoirState.Error; }
  59. }
  60. /// <summary>
  61. /// 正在忙碌
  62. /// </summary>
  63. public bool IsBusy
  64. {
  65. get { return fsm.State == (int)ReservoirState.Initializing; }
  66. }
  67. /// <summary>
  68. /// 是否禁用
  69. /// </summary>
  70. public bool IsDisable { get { return _persistentValue == null || _persistentValue.OperatingMode == DISABLED; } }
  71. /// <summary>
  72. /// 自动模式
  73. /// </summary>
  74. public bool IsAuto { get { return _persistentValue != null && _persistentValue.OperatingMode == AUTO; } }
  75. /// <summary>
  76. /// 自动模式
  77. /// </summary>
  78. public bool IsManual { get { return _persistentValue != null && _persistentValue.OperatingMode == MANUAL; } }
  79. /// <summary>
  80. /// 是否为工程模式
  81. /// </summary>
  82. public bool IsEngineering { get { return _persistentValue != null && _persistentValue.RecipeOperatingMode == ENGINEERING; } }
  83. /// <summary>
  84. /// 是否为产品模式
  85. /// </summary>
  86. public bool IsProduction { get { return _persistentValue != null && _persistentValue.RecipeOperatingMode == PRODUCTION; } }
  87. /// <summary>
  88. /// 状态机状态
  89. /// </summary>
  90. public ReservoirState State { get { return (ReservoirState)fsm.State; } }
  91. #endregion
  92. /// <summary>
  93. /// 构造函数
  94. /// </summary>
  95. /// <param name="module"></param>
  96. public ReservoirEntity(ModuleName module)
  97. {
  98. this.Module = module;
  99. InitializeParameter();
  100. InitialFsm();
  101. }
  102. /// <summary>
  103. /// 初始化
  104. /// </summary>
  105. /// <returns></returns>
  106. protected override bool Init()
  107. {
  108. InitializeRoutine();
  109. InitializeDATA();
  110. InitializeOperation();
  111. return true;
  112. }
  113. /// <summary>
  114. /// 初始化参数
  115. /// </summary>
  116. private void InitializeParameter()
  117. {
  118. _persistentValue = ReservoirsPersistentManager.Instance.GetReservoirsPersistentValue(Module.ToString());
  119. if (_persistentValue == null)
  120. {
  121. LOG.WriteLog(eEvent.ERR_RESERVOIR, Module.ToString(), "Persistent Value Object is not exist");
  122. }
  123. }
  124. /// <summary>
  125. /// 初始化Routine
  126. /// </summary>
  127. private void InitializeRoutine()
  128. {
  129. }
  130. /// <summary>
  131. /// 初始化DATA
  132. /// </summary>
  133. private void InitializeDATA()
  134. {
  135. }
  136. /// <summary>
  137. /// 初始化Operation
  138. /// </summary>
  139. private void InitializeOperation()
  140. {
  141. }
  142. /// 初始化状态机
  143. /// </summary>
  144. private void InitialFsm()
  145. {
  146. fsm = new StateMachine<ReservoirEntity>(Module.ToString(), (int)ReservoirState.Init, 100);
  147. fsm.EnableRepeatedMsg(true);
  148. AnyStateTransition(ReservoirMsg.Error, NullFunc, ReservoirState.Error);
  149. //Initialized
  150. Transition(ReservoirState.Error, ReservoirMsg.Initialize, InitializeAll, ReservoirState.Initializing);
  151. Transition(ReservoirState.Init, ReservoirMsg.Initialize, InitializeAll, ReservoirState.Initializing);
  152. Transition(ReservoirState.Idle, ReservoirMsg.Initialize, InitializeAll, ReservoirState.Initializing);
  153. Transition(ReservoirState.Initializing, FSM_MSG.TIMER, InitializeAllMonitor, ReservoirState.Idle);
  154. //直接进入Idle
  155. Transition(ReservoirState.Initialized, FSM_MSG.TIMER, NullFunc, ReservoirState.Idle);
  156. //Enter Init
  157. Transition(ReservoirState.Idle, ReservoirMsg.Init, NullFunc, ReservoirState.Init);
  158. EnumLoop<ReservoirState>.ForEach((item) => { fsm.MapState((int)item, item.ToString()); });
  159. EnumLoop<ReservoirMsg>.ForEach((item) => { fsm.MapMessage((int)item, item.ToString()); });
  160. }
  161. #region Initialize All
  162. /// <summary>
  163. /// 初始化
  164. /// </summary>
  165. /// <returns></returns>
  166. private bool InitializeAll(object[] param)
  167. {
  168. return true;
  169. }
  170. /// <summary>
  171. /// Initialize 监控
  172. /// </summary>
  173. /// <param name="param"></param>
  174. /// <returns></returns>
  175. private bool InitializeAllMonitor(object[] param)
  176. {
  177. return true;
  178. }
  179. #endregion
  180. public bool Check(int msg, out string reason, params object[] args)
  181. {
  182. reason = "";
  183. return true;
  184. }
  185. public bool CheckAcked(int msg)
  186. {
  187. throw new NotImplementedException();
  188. }
  189. public int Invoke(string function, params object[] args)
  190. {
  191. throw new NotImplementedException();
  192. }
  193. }
  194. }