LoaderSideVacuumRoutine.cs 2.8 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 LoaderSideVacuumRoutine : RoutineBase, IRoutine
  20. {
  21. private enum VacuumStep
  22. {
  23. WriteVacuum,
  24. End
  25. }
  26. #region 常量
  27. private const string CRS_VACUUM = "CRSVacuum";
  28. #endregion
  29. #region 内部变量
  30. private int _timeout = 5000;
  31. private LoaderSideDevice _loaderSide;
  32. private bool _vacuum = false;
  33. #endregion
  34. /// <summary>
  35. /// 构造函数
  36. /// </summary>
  37. /// <param name="module"></param>
  38. public LoaderSideVacuumRoutine(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(VacuumStep.WriteVacuum, WriteVacuum, CheckVacuum,_timeout)
  55. .End(VacuumStep.End,NullFun,100);
  56. return Runner.Status;
  57. }
  58. /// <summary>
  59. /// 写入Vacuum数值
  60. /// </summary>
  61. /// <returns></returns>
  62. private bool WriteVacuum()
  63. {
  64. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{CRS_VACUUM}");
  65. return IOModuleManager.Instance.WriteIoValue(ioName, _vacuum);
  66. }
  67. /// <summary>
  68. /// 检验Door Lock状态
  69. /// </summary>
  70. /// <returns></returns>
  71. private bool CheckVacuum()
  72. {
  73. return _loaderSide.SideData.CRSVacuum == _vacuum;
  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}.LSVacuumTimeout"))
  83. {
  84. _timeout = SC.GetValue<int>($"{ModuleName.Loader1}.LSVacuumTimeout");
  85. }
  86. _loaderSide = DEVICE.GetDevice<LoaderSideDevice>(Module);
  87. _vacuum = (bool)objs[0];
  88. return Runner.Start(Module, "Vacuum");
  89. }
  90. }
  91. }