SafetyNewAllOnRoutine.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. using MECF.Framework.Common.Utilities;
  13. using System.Runtime.InteropServices;
  14. namespace PunkHPX8_RT.Devices.Safety
  15. {
  16. internal class SafetyNewAllOnRoutine : RoutineBase, IRoutine
  17. {
  18. private enum SafetyAllOnStep
  19. {
  20. Ready,
  21. SwitchOnProcessTransporter,
  22. WaitSwitchOnProcessTransporter,
  23. SwitchOnLoaderTransporter,
  24. WaitSwitchOnLoaderTransporter,
  25. SwitchOnLoader,
  26. WaitSwitchOnLoader,
  27. SwitchOnPuf1,
  28. WaitSwitchOnPuf1,
  29. SwitchOnPuf2,
  30. WaitSwitchOnPuf2,
  31. SwitchOnSRD1,
  32. WaitSwitchOnSRD1,
  33. SwitchOnSRD2,
  34. WaitSwitchOnSRD2,
  35. End
  36. }
  37. #region 内部变量
  38. private SafetyDevice _device;
  39. private SRDSwitchOnRoutine _srd1SwitchOnRoutine;
  40. private SRDSwitchOnRoutine _srd2SwitchOnRoutine;
  41. #endregion
  42. /// <summary>
  43. /// 构造函数
  44. /// </summary>
  45. /// <param name="module"></param>
  46. public SafetyNewAllOnRoutine(string module) : base(module)
  47. {
  48. }
  49. /// <summary>
  50. /// 中止
  51. /// </summary>
  52. public void Abort()
  53. {
  54. Runner.Stop($"Safety All On Abort");
  55. }
  56. /// <summary>
  57. /// 监控
  58. /// </summary>
  59. /// <returns></returns>
  60. public RState Monitor()
  61. {
  62. Runner.RunIf(SafetyAllOnStep.SwitchOnSRD1, ModuleHelper.IsInstalled(ModuleName.SRD1), SwitchOnSRD1, _delay_1ms)
  63. .WaitWithStopCondition(SafetyAllOnStep.WaitSwitchOnSRD1, CheckSwitchOnSRD1Complete, CheckSwitchOnSRD1Error)
  64. .RunIf(SafetyAllOnStep.SwitchOnSRD2, ModuleHelper.IsInstalled(ModuleName.SRD2), SwitchOnSRD2, _delay_1ms)
  65. .WaitWithStopCondition(SafetyAllOnStep.WaitSwitchOnSRD2, CheckSwitchOnSRD2Complete, CheckSwitchOnSRD2Error)
  66. .End(SafetyAllOnStep.End, NullFun, _delay_1ms);
  67. return Runner.Status;
  68. }
  69. #region SRD1
  70. /// <summary>
  71. /// Switch on SRD1 Motors
  72. /// </summary>
  73. /// <returns></returns>
  74. private bool SwitchOnSRD1()
  75. {
  76. return _srd1SwitchOnRoutine.Start() == RState.Running;
  77. }
  78. /// <summary>
  79. /// 检查SRD1 Motors switchon是否完成
  80. /// </summary>
  81. /// <returns></returns>
  82. private bool CheckSwitchOnSRD1Complete()
  83. {
  84. if (!ModuleHelper.IsInstalled(ModuleName.SRD1))
  85. {
  86. return true;
  87. }
  88. return CommonFunction.CheckRoutineEndState(_srd1SwitchOnRoutine);
  89. }
  90. /// <summary>
  91. /// 检查SRD1 Motors switchon是否出错
  92. /// </summary>
  93. /// <returns></returns>
  94. private bool CheckSwitchOnSRD1Error()
  95. {
  96. if (!ModuleHelper.IsInstalled(ModuleName.SRD1))
  97. {
  98. return false;
  99. }
  100. return CommonFunction.CheckRoutineStopState(_srd1SwitchOnRoutine);
  101. }
  102. #endregion
  103. #region SRD2
  104. /// <summary>
  105. /// Switch on SRD2 Motors
  106. /// </summary>
  107. /// <returns></returns>
  108. private bool SwitchOnSRD2()
  109. {
  110. return _srd2SwitchOnRoutine.Start()==RState.Running;
  111. }
  112. /// <summary>
  113. /// 检查SRD2 Motors switchon是否完成
  114. /// </summary>
  115. /// <returns></returns>
  116. private bool CheckSwitchOnSRD2Complete()
  117. {
  118. if (!ModuleHelper.IsInstalled(ModuleName.SRD2))
  119. {
  120. return true;
  121. }
  122. return CommonFunction.CheckRoutineEndState(_srd2SwitchOnRoutine);
  123. }
  124. /// <summary>
  125. /// 检查SRD2 Motors switchon是否出错
  126. /// </summary>
  127. /// <returns></returns>
  128. private bool CheckSwitchOnSRD2Error()
  129. {
  130. if (!ModuleHelper.IsInstalled(ModuleName.SRD2))
  131. {
  132. return true;
  133. }
  134. return CommonFunction.CheckRoutineStopState(_srd2SwitchOnRoutine);
  135. }
  136. #endregion
  137. /// <summary>
  138. /// 启动
  139. /// </summary>
  140. /// <param name="objs"></param>
  141. /// <returns></returns>
  142. public RState Start(params object[] objs)
  143. {
  144. _srd1SwitchOnRoutine = new SRDSwitchOnRoutine(ModuleName.SRD1.ToString());
  145. _srd2SwitchOnRoutine = new SRDSwitchOnRoutine(ModuleName.SRD2.ToString());
  146. _device = DEVICE.GetDevice<SafetyDevice>(Module);
  147. return Runner.Start(Module, $"Safety All On");
  148. }
  149. }
  150. }