SafetyResetRoutine.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Routine;
  3. using MECF.Framework.Common.Routine;
  4. using CyberX8_Core;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using MECF.Framework.Common.Beckhoff.ModuleIO;
  11. using MECF.Framework.Common.TwinCat;
  12. using MECF.Framework.Common.IOCore;
  13. namespace CyberX8_RT.Devices.Safety
  14. {
  15. public class SafetyResetRoutine : RoutineBase, IRoutine
  16. {
  17. private enum SafetyResetStep
  18. {
  19. SrdArm,
  20. RunStop,
  21. ErrAck,
  22. LockProcessDoors,
  23. LockBufferDoors,
  24. LockLoaderDoors,
  25. TxSto1EstopRestart,
  26. TxEstopDelay,
  27. TxStoMonRestart,
  28. TxMonDelay,
  29. TxSto2EstopRestart,
  30. LdrPufSto1EstopRestart,
  31. LdrPufEstopDelay,
  32. LdrPufStoMonRestart,
  33. LdrPufMonDelay,
  34. LdrPufSto2EstopRestart,
  35. SrdStoEstopRestart,
  36. PumpStoEstopRestart,
  37. PumpEstopDelay,
  38. FluidEstopRestart,
  39. FluidEstopDelay,
  40. SlsRestart,
  41. End
  42. }
  43. #region 常量
  44. private const string RUNSTOP = "RunStop";
  45. #endregion
  46. #region 内部变量
  47. private SafetyArmResetRoutine _srdArmResetRoutine;
  48. private SafetyToggleRoutine _errAckToggleRoutine;
  49. private SafetyToggleRoutine _txSto1EstopRestartRoutine;
  50. private SafetyToggleRoutine _txStoMonRestartRoutine;
  51. private SafetyToggleRoutine _txSto2EstopRestartRoutine;
  52. private SafetyToggleRoutine _ldrPufSto1EstopRestart;
  53. private SafetyToggleRoutine _ldrPufStoMonRestart;
  54. private SafetyToggleRoutine _ldrPufSto2EstopRestart;
  55. private SafetyToggleRoutine _srdStoEstopRestart;
  56. private SafetyToggleRoutine _pumpStoEstopRestart;
  57. private SafetyToggleRoutine _fluidEstopRestart;
  58. private SafetyToggleRoutine _slsRestart;
  59. private SafetyDevice _device;
  60. #endregion
  61. /// <summary>
  62. /// 构造函数
  63. /// </summary>
  64. /// <param name="module"></param>
  65. public SafetyResetRoutine(string module) : base(module)
  66. {
  67. _errAckToggleRoutine = new SafetyToggleRoutine(module);
  68. _txSto1EstopRestartRoutine = new SafetyToggleRoutine(module);
  69. _txStoMonRestartRoutine=new SafetyToggleRoutine(module);
  70. _txSto2EstopRestartRoutine=new SafetyToggleRoutine(module);
  71. _ldrPufSto1EstopRestart=new SafetyToggleRoutine(module);
  72. _ldrPufStoMonRestart=new SafetyToggleRoutine(module);
  73. _ldrPufSto2EstopRestart=new SafetyToggleRoutine(module);
  74. _srdStoEstopRestart=new SafetyToggleRoutine(module);
  75. _pumpStoEstopRestart = new SafetyToggleRoutine(module);
  76. _fluidEstopRestart=new SafetyToggleRoutine(module);
  77. _slsRestart=new SafetyToggleRoutine(module);
  78. _srdArmResetRoutine=new SafetyArmResetRoutine(module);
  79. }
  80. /// <summary>
  81. /// 中止
  82. /// </summary>
  83. public void Abort()
  84. {
  85. Runner.Stop("Manaul abort safety reset");
  86. }
  87. /// <summary>
  88. /// 监控
  89. /// </summary>
  90. /// <returns></returns>
  91. public RState Monitor()
  92. {
  93. Runner.Run(SafetyResetStep.SrdArm, () => { return _srdArmResetRoutine.Start("SRDArmReset") == RState.Running; },
  94. () => { return CheckRoutineStatus(_srdArmResetRoutine); }, _delay_1s)
  95. .Run(SafetyResetStep.RunStop, RunStop, _delay_1ms)
  96. .Run(SafetyResetStep.ErrAck, () => { return _errAckToggleRoutine.Start("ErrAck") == RState.Running; },
  97. () => { return CheckRoutineStatus(_errAckToggleRoutine); }, _delay_1s)
  98. .Run(SafetyResetStep.LockProcessDoors, () => { return _device.LockProcessDoor(); }, _delay_1ms)
  99. .Run(SafetyResetStep.LockBufferDoors, () => { return _device.LockBufferDoor(); }, _delay_1ms)
  100. .Run(SafetyResetStep.LockLoaderDoors, () => { return _device.LockLoaderDoor(); }, _delay_1ms)
  101. .Run(SafetyResetStep.TxSto1EstopRestart, () => { return _txSto1EstopRestartRoutine.Start("TxSto1EstopRestart") == RState.Running; },
  102. () => { return CheckRoutineStatus(_txSto1EstopRestartRoutine); }, _delay_1s)
  103. .Delay(SafetyResetStep.TxEstopDelay,100)//100 delay
  104. .Run(SafetyResetStep.TxStoMonRestart, () => { return _txStoMonRestartRoutine.Start("TxStoMonRestart") == RState.Running; },
  105. () => { return CheckRoutineStatus(_txStoMonRestartRoutine); }, _delay_1s)
  106. .Delay(SafetyResetStep.TxMonDelay, 100)//100 delay
  107. .Run(SafetyResetStep.TxSto2EstopRestart, () => { return _txSto2EstopRestartRoutine.Start("TxSto2EstopRestart") == RState.Running; },
  108. () => { return CheckRoutineStatus(_txSto2EstopRestartRoutine); }, _delay_1s)
  109. .Run(SafetyResetStep.LdrPufSto1EstopRestart, () => { return _ldrPufSto1EstopRestart.Start("LdrPufSto1EstopRestart") == RState.Running; },
  110. () => { return CheckRoutineStatus(_ldrPufSto1EstopRestart); }, _delay_1s)
  111. .Delay(SafetyResetStep.LdrPufEstopDelay,_delay_1s)//1000 delay
  112. .Run(SafetyResetStep.LdrPufStoMonRestart, () => { return _ldrPufStoMonRestart.Start("LdrPufStoMonRestart") == RState.Running; },
  113. () => { return CheckRoutineStatus(_ldrPufStoMonRestart); }, _delay_1s)
  114. .Delay(SafetyResetStep.LdrPufMonDelay, 100)//100 delay
  115. .Run(SafetyResetStep.LdrPufSto2EstopRestart, () => { return _ldrPufSto2EstopRestart.Start("LdrPufSto2EstopRestart") == RState.Running; },
  116. () => { return CheckRoutineStatus(_ldrPufSto2EstopRestart); }, _delay_1s)
  117. .Run(SafetyResetStep.SrdStoEstopRestart, () => { return _srdStoEstopRestart.Start("SrdStoEstopRestart") == RState.Running; },
  118. () => { return CheckRoutineStatus(_srdStoEstopRestart); }, _delay_1s)
  119. .Run(SafetyResetStep.PumpStoEstopRestart, () => { return _pumpStoEstopRestart.Start("PumpStoEstopRestart") == RState.Running; },
  120. () => { return CheckRoutineStatus(_pumpStoEstopRestart); }, _delay_1s)
  121. .Delay(SafetyResetStep.PumpEstopDelay,100)//100 delay
  122. .Run(SafetyResetStep.FluidEstopRestart, () => { return _fluidEstopRestart.Start("FluidEstopRestart") == RState.Running; },
  123. () => { return CheckRoutineStatus(_fluidEstopRestart); }, _delay_1s)
  124. .Delay(SafetyResetStep.FluidEstopDelay,_delay_1s)
  125. .Run(SafetyResetStep.SlsRestart, () => { return _slsRestart.Start("SlsRestart") == RState.Running; },
  126. () => { return CheckRoutineStatus(_slsRestart); }, _delay_1s)
  127. .End(SafetyResetStep.End, NullFun, _delay_1ms);
  128. return Runner.Status;
  129. }
  130. /// <summary>
  131. ///
  132. /// </summary>
  133. /// <returns></returns>
  134. private bool RunStop()
  135. {
  136. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{RUNSTOP}");
  137. return IOModuleManager.Instance.WriteIoValue(ioName, true);
  138. }
  139. /// <summary>
  140. /// 检验是否完成
  141. /// </summary>
  142. /// <param name="routine"></param>
  143. /// <returns></returns>
  144. private bool CheckRoutineStatus (IRoutine routine)
  145. {
  146. RState rsState = routine.Monitor();
  147. return rsState == RState.End;
  148. }
  149. /// <summary>
  150. /// 检验Process door locked状态
  151. /// </summary>
  152. /// <returns></returns>
  153. private bool CheckProcessDoorLocked()
  154. {
  155. return _device.SafetyData.ProcessDoor1Locked && _device.SafetyData.ProcessDoor2Locked && _device.SafetyData.ProcessDoor3Locked &&
  156. _device.SafetyData.ProcessDoor4Locked;
  157. }
  158. /// <summary>
  159. /// 启动
  160. /// </summary>
  161. /// <param name="objs"></param>
  162. /// <returns></returns>
  163. public RState Start(params object[] objs)
  164. {
  165. _device = DEVICE.GetDevice<SafetyDevice>("Safety");
  166. return Runner.Start(Module, "Start Reset safety");
  167. }
  168. }
  169. }