PlatingCellVerticalEntity.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. using Aitex.Core.RT.Fsm;
  2. using Aitex.Core.RT.Log;
  3. using Aitex.Core.Util;
  4. using Aitex.Core.Utilities;
  5. using MECF.Framework.Common.Equipment;
  6. using MECF.Framework.Common.Persistent.Reservoirs;
  7. using MECF.Framework.Common.Persistent.Temperature;
  8. using MECF.Framework.Common.ToolLayout;
  9. using PunkHPX8_Core;
  10. using PunkHPX8_RT.Modules.Reservoir;
  11. using PunkHPX8_RT.Modules.VpwCell;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Linq;
  15. using System.Text;
  16. using System.Threading.Tasks;
  17. using static PunkHPX8_RT.Modules.PlatingCell.PlatingCellEntity;
  18. namespace PunkHPX8_RT.Modules.PlatingCell
  19. {
  20. public class PlatingCellVerticalEntity : Entity, IEntity, IModuleEntity
  21. {
  22. public enum VerticalMsg
  23. {
  24. NONE,
  25. Error,
  26. ResumeError,
  27. Initialize,
  28. Abort,
  29. Init,
  30. Position
  31. }
  32. #region 内部变量
  33. private PlatingCellVerticalInitializeRoutine _initializeRoutine;
  34. #endregion
  35. #region 属性
  36. /// <summary>
  37. /// 模块名称
  38. /// </summary>
  39. public ModuleName Module { get; private set; }
  40. /// <summary>
  41. /// 是否Init
  42. /// </summary>
  43. public bool IsInit
  44. {
  45. get { return fsm.State == (int)PlatingCellVerticalState.Init; }
  46. }
  47. /// <summary>
  48. /// 是否Idle
  49. /// </summary>
  50. public bool IsIdle
  51. {
  52. get
  53. {
  54. return fsm.State == (int)PlatingCellVerticalState.Idle;
  55. }
  56. }
  57. /// <summary>
  58. /// 是否错误
  59. /// </summary>
  60. public bool IsError
  61. {
  62. get { return fsm.State == (int)PlatingCellVerticalState.Error; }
  63. }
  64. /// <summary>
  65. /// 正在忙碌
  66. /// </summary>
  67. public bool IsBusy
  68. {
  69. get { return fsm.State == (int)PlatingCellVerticalState.Initializing; }
  70. }
  71. /// <summary>
  72. /// 状态
  73. /// </summary>
  74. public int State { get { return fsm.State; } }
  75. public bool IsDisable { get { return false; } }
  76. public bool IsAuto { get { return true; } }
  77. public bool IsEngineering { get { return false; } }
  78. public bool IsProduction { get { return true; } }
  79. #endregion
  80. /// <summary>
  81. /// 构造函数
  82. /// </summary>
  83. /// <param name="module"></param>
  84. public PlatingCellVerticalEntity(ModuleName module)
  85. {
  86. Module = module;
  87. InitialFsm();
  88. }
  89. /// <summary>
  90. /// 初始化
  91. /// </summary>
  92. /// <returns></returns>
  93. protected override bool Init()
  94. {
  95. InitializeRoutine();
  96. return true;
  97. }
  98. /// <summary>
  99. /// 初始化Routine
  100. /// </summary>
  101. private void InitializeRoutine()
  102. {
  103. _initializeRoutine = new PlatingCellVerticalInitializeRoutine(Module.ToString());
  104. }
  105. /// 初始化状态机
  106. /// </summary>
  107. private void InitialFsm()
  108. {
  109. fsm = new StateMachine<PlatingCellVerticalEntity>(Module.ToString(), (int)PlatingCellVerticalState.Init, 100);
  110. fsm.EnableRepeatedMsg(true);
  111. AnyStateTransition(VerticalMsg.Initialize, InitializeAll, PlatingCellVerticalState.Initializing);
  112. Transition(PlatingCellVerticalState.Initializing, FSM_MSG.TIMER, InitializeAllMonitor, PlatingCellVerticalState.Idle);
  113. AnyStateTransition(VerticalMsg.Error, NullFunc, PlatingCellVerticalState.Error);
  114. //Enter Init
  115. Transition(PlatingCellVerticalState.Idle, VerticalMsg.Init, NullFunc, PlatingCellVerticalState.Init);
  116. EnumLoop<PlatingCellVerticalState>.ForEach((item) => { fsm.MapState((int)item, item.ToString()); });
  117. EnumLoop<VerticalMsg>.ForEach((item) => { fsm.MapMessage((int)item, item.ToString()); });
  118. }
  119. #region 初始化
  120. /// <summary>
  121. /// 初始化
  122. /// </summary>
  123. /// <returns></returns>
  124. private bool InitializeAll(object[] param)
  125. {
  126. return _initializeRoutine.Start() == RState.Running;
  127. }
  128. /// <summary>
  129. /// Initialize 监控
  130. /// </summary>
  131. /// <param name="param"></param>
  132. /// <returns></returns>
  133. private bool InitializeAllMonitor(object[] param)
  134. {
  135. RState rsstate = _initializeRoutine.Monitor();
  136. if (rsstate == RState.End)
  137. {
  138. return true;
  139. }
  140. else if (rsstate == RState.Failed || rsstate == RState.Timeout)
  141. {
  142. PostMsg(VerticalMsg.Error);
  143. return false;
  144. }
  145. return false;
  146. }
  147. #endregion
  148. public bool Check(int msg, out string reason, params object[] args)
  149. {
  150. reason = "";
  151. return true;
  152. }
  153. public bool CheckAcked(int msg)
  154. {
  155. return true;
  156. }
  157. public int Invoke(string function, params object[] args)
  158. {
  159. return (int)FSM_MSG.NONE;
  160. }
  161. }
  162. }