SafetyAllOnRoutine.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  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 PunkHPX8_Core;
  6. using PunkHPX8_RT.Modules;
  7. using PunkHPX8_RT.Modules.SRD;
  8. using PunkHPX8_RT.Modules.Transporter;
  9. using MECF.Framework.Common.Beckhoff.ModuleIO;
  10. using MECF.Framework.Common.Equipment;
  11. using MECF.Framework.Common.Routine;
  12. namespace PunkHPX8_RT.Devices.Safety
  13. {
  14. internal class SafetyAllOnRoutine : RoutineBase, IRoutine
  15. {
  16. private enum SafetyAllOnStep
  17. {
  18. Ready,
  19. SwitchOnProcessTransporter,
  20. WaitSwitchOnProcessTransporter,
  21. SwitchOnLoaderTransporter,
  22. WaitSwitchOnLoaderTransporter,
  23. SwitchOnLoader,
  24. WaitSwitchOnLoader,
  25. SwitchOnPuf1,
  26. WaitSwitchOnPuf1,
  27. SwitchOnPuf2,
  28. WaitSwitchOnPuf2,
  29. SwitchOnSRD1,
  30. WaitSwitchOnSRD1,
  31. SwitchOnSRD2,
  32. WaitSwitchOnSRD2,
  33. End
  34. }
  35. #region 内部变量
  36. private SafetyDevice _device;
  37. /// <summary>
  38. /// SRD1
  39. /// </summary>
  40. private SRDEntity _srd1Entity;
  41. /// <summary>
  42. /// SRD2
  43. /// </summary>
  44. private SRDEntity _srd2Entity;
  45. #endregion
  46. /// <summary>
  47. /// 构造函数
  48. /// </summary>
  49. /// <param name="module"></param>
  50. public SafetyAllOnRoutine(string module) : base(module)
  51. {
  52. }
  53. /// <summary>
  54. /// 中止
  55. /// </summary>
  56. public void Abort()
  57. {
  58. Runner.Stop($"Safety All On Abort");
  59. }
  60. /// <summary>
  61. /// 监控
  62. /// </summary>
  63. /// <returns></returns>
  64. public RState Monitor()
  65. {
  66. Runner.Run(SafetyAllOnStep.Ready, CheckReady, _delay_1ms)
  67. .RunIf(SafetyAllOnStep.SwitchOnSRD1, _srd1Entity!=null, SwitchOnSRD1, _delay_1ms)
  68. .WaitWithStopCondition(SafetyAllOnStep.WaitSwitchOnSRD1, CheckSwitchOnSRD1Complete, CheckSwitchOnSRD1Error)
  69. .RunIf(SafetyAllOnStep.SwitchOnSRD2, _srd2Entity!=null, SwitchOnSRD2, _delay_1ms)
  70. .WaitWithStopCondition(SafetyAllOnStep.WaitSwitchOnSRD2, CheckSwitchOnSRD2Complete, CheckSwitchOnSRD2Error)
  71. .End(SafetyAllOnStep.End, NullFun, _delay_1ms);
  72. return Runner.Status;
  73. }
  74. private bool CheckReady()
  75. {
  76. _srd1Entity = Singleton<RouteManager>.Instance.GetModule<SRDEntity>(ModuleName.SRD1.ToString());
  77. _srd2Entity = Singleton<RouteManager>.Instance.GetModule<SRDEntity>(ModuleName.SRD2.ToString());
  78. return true;
  79. }
  80. #region SRD1
  81. /// <summary>
  82. /// Switch on SRD1 Motors
  83. /// </summary>
  84. /// <returns></returns>
  85. private bool SwitchOnSRD1()
  86. {
  87. return _srd1Entity.CheckToPostMessage<SRDState,SRDMSG>(eEvent.ERR_SRD, ModuleName.SRD1.ToString(), (int)SRDMSG.SwitchOn);
  88. }
  89. /// <summary>
  90. /// 检查SRD1 Motors switchon是否完成
  91. /// </summary>
  92. /// <returns></returns>
  93. private bool CheckSwitchOnSRD1Complete()
  94. {
  95. if(_srd1Entity==null)
  96. {
  97. return true;
  98. }
  99. if (_srd1Entity.IsRotationSwitchOn && _srd1Entity.IsArmSwitchOn)
  100. {
  101. return true;
  102. }
  103. return false;
  104. }
  105. /// <summary>
  106. /// 检查SRD1 Motors switchon是否出错
  107. /// </summary>
  108. /// <returns></returns>
  109. private bool CheckSwitchOnSRD1Error()
  110. {
  111. if (_srd1Entity == null)
  112. {
  113. return false;
  114. }
  115. if (_srd1Entity.IsError)
  116. {
  117. LOG.WriteLog(eEvent.ERR_SAFETY, Module, $"Switching On SRD1 Motors is failed");
  118. return true;
  119. }
  120. return false;
  121. }
  122. #endregion
  123. #region SRD2
  124. /// <summary>
  125. /// Switch on SRD2 Motors
  126. /// </summary>
  127. /// <returns></returns>
  128. private bool SwitchOnSRD2()
  129. {
  130. return _srd2Entity.CheckToPostMessage<SRDState,SRDMSG>(eEvent.ERR_SRD, ModuleName.SRD2.ToString(), (int)SRDMSG.SwitchOn);
  131. }
  132. /// <summary>
  133. /// 检查SRD2 Motors switchon是否完成
  134. /// </summary>
  135. /// <returns></returns>
  136. private bool CheckSwitchOnSRD2Complete()
  137. {
  138. if(_srd2Entity == null)
  139. {
  140. return true;
  141. }
  142. if (_srd2Entity.IsRotationSwitchOn && _srd2Entity.IsArmSwitchOn)
  143. {
  144. return true;
  145. }
  146. return false;
  147. }
  148. /// <summary>
  149. /// 检查SRD2 Motors switchon是否出错
  150. /// </summary>
  151. /// <returns></returns>
  152. private bool CheckSwitchOnSRD2Error()
  153. {
  154. if(_srd2Entity == null)
  155. {
  156. return false;
  157. }
  158. if (_srd2Entity.IsError)
  159. {
  160. LOG.WriteLog(eEvent.ERR_SAFETY, Module, $"Switching On SRD2 Motors is failed");
  161. return true;
  162. }
  163. return false;
  164. }
  165. #endregion
  166. /// <summary>
  167. /// 启动
  168. /// </summary>
  169. /// <param name="objs"></param>
  170. /// <returns></returns>
  171. public RState Start(params object[] objs)
  172. {
  173. _device = DEVICE.GetDevice<SafetyDevice>(Module);
  174. return Runner.Start(Module, $"Safety All On");
  175. }
  176. }
  177. }