LoaderSideTransBladderRoutine.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Routine;
  3. using Aitex.Core.RT.SCCore;
  4. using MECF.Framework.Common.Beckhoff.ModuleIO;
  5. using MECF.Framework.Common.CommonData.PUF;
  6. using MECF.Framework.Common.Equipment;
  7. using MECF.Framework.Common.Routine;
  8. using MECF.Framework.Common.TwinCat;
  9. using CyberX8_Core;
  10. using CyberX8_RT.Devices.Loader;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. using MECF.Framework.Common.IOCore;
  17. namespace CyberX8_RT.Devices.AXIS.CANOpen
  18. {
  19. public class LoaderSideTransBladderRoutine : RoutineBase, IRoutine
  20. {
  21. private enum TransBladderStep
  22. {
  23. WriteTransBladder,
  24. End
  25. }
  26. #region 常量
  27. private const string TRANS_BLADDER = "TransBladder";
  28. #endregion
  29. #region 内部变量
  30. private int _timeout = 5000;
  31. private LoaderSideDevice _loaderSide;
  32. private bool _transBladder = false;
  33. #endregion
  34. /// <summary>
  35. /// 构造函数
  36. /// </summary>
  37. /// <param name="module"></param>
  38. public LoaderSideTransBladderRoutine(string module) : base(module)
  39. {
  40. }
  41. /// <summary>
  42. /// 中止
  43. /// </summary>
  44. public void Abort()
  45. {
  46. Runner.Stop("Manual Abort");
  47. }
  48. /// <summary>
  49. /// 监控
  50. /// </summary>
  51. /// <returns></returns>
  52. public RState Monitor()
  53. {
  54. Runner.Run(TransBladderStep.WriteTransBladder, WriteTransBladder, CheckTransBladder,_timeout)
  55. .End(TransBladderStep.End,NullFun,100);
  56. return Runner.Status;
  57. }
  58. /// <summary>
  59. /// 写入Trans Bladder数值
  60. /// </summary>
  61. /// <returns></returns>
  62. private bool WriteTransBladder()
  63. {
  64. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{TRANS_BLADDER}");
  65. return IOModuleManager.Instance.WriteIoValue(ioName, _transBladder);
  66. }
  67. /// <summary>
  68. /// 检验Trans Bladder状态
  69. /// </summary>
  70. /// <returns></returns>
  71. private bool CheckTransBladder()
  72. {
  73. return _loaderSide.SideData.TransBladder == _transBladder && _loaderSide.SideData.TransRetracted == !_transBladder;
  74. }
  75. /// <summary>
  76. /// 启动
  77. /// </summary>
  78. /// <param name="objs"></param>
  79. /// <returns></returns>
  80. public RState Start(params object[] objs)
  81. {
  82. if (SC.ContainsItem($"{ModuleName.Loader1}.TranslateBladderTimeout"))
  83. {
  84. _timeout = SC.GetValue<int>($"{ModuleName.Loader1}.TranslateBladderTimeout");
  85. }
  86. _loaderSide = DEVICE.GetDevice<LoaderSideDevice>(Module);
  87. _transBladder = (bool)objs[0];
  88. return Runner.Start(Module, "Trans Bladder");
  89. }
  90. }
  91. }