SrdCommonLiftUpRoutine.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Log;
  3. using Aitex.Core.RT.Routine;
  4. using Aitex.Core.RT.SCCore;
  5. using CyberX8_Core;
  6. using MECF.Framework.Common.Beckhoff.ModuleIO;
  7. using MECF.Framework.Common.IOCore;
  8. using MECF.Framework.Common.Routine;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace CyberX8_RT.Devices.SRD
  15. {
  16. public class SrdCommonLiftUpRoutine : RoutineBase, IRoutine
  17. {
  18. #region 常量
  19. private const string LIFT_UP = "LiftUp";
  20. #endregion
  21. private enum LiftUpStep
  22. {
  23. LiftUp,
  24. Delay,
  25. End
  26. }
  27. #region 内部变量
  28. private bool _liftUp;
  29. private SrdCommonDevice _srdCommon;
  30. private int _timeout = 1000;
  31. #endregion
  32. /// <summary>
  33. /// 构造函数
  34. /// </summary>
  35. /// <param name="module"></param>
  36. public SrdCommonLiftUpRoutine(string module) : base(module)
  37. {
  38. }
  39. public void Abort()
  40. {
  41. Runner.Stop("Manual Abort");
  42. }
  43. public RState Monitor()
  44. {
  45. Runner.Run(LiftUpStep.LiftUp, LiftUp, CheckLiftUpStatus, _timeout)
  46. .DelayIf(LiftUpStep.Delay, !_liftUp, 500)
  47. .End(LiftUpStep.End, NullFun, 100);
  48. return Runner.Status;
  49. }
  50. private bool LiftUp()
  51. {
  52. string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{LIFT_UP}");
  53. return IOModuleManager.Instance.WriteIoValue(ioName, _liftUp);
  54. }
  55. private bool CheckLiftUpStatus()
  56. {
  57. if (_srdCommon.CommonData.LiftUpStatus == _liftUp)
  58. {
  59. LOG.WriteLog(eEvent.INFO_SRD, Module, $"LiftUp Sensor is {_liftUp}");
  60. return true;
  61. }
  62. else
  63. {
  64. LOG.WriteLog(eEvent.INFO_SRD, Module, $"LiftUp Sensor is {_liftUp}");
  65. return false;
  66. }
  67. }
  68. public RState Start(params object[] objs)
  69. {
  70. _liftUp = (bool)objs[0];
  71. _srdCommon = DEVICE.GetDevice<SrdCommonDevice>($"{Module}.Common");
  72. if (_liftUp)
  73. {
  74. if (!_srdCommon.CommonData.ChuckVacuum)
  75. {
  76. LOG.WriteLog(eEvent.ERR_SRD, Module, $"Chuck vacuum is on. Can't lift up");
  77. return RState.Failed;
  78. }
  79. int vacuumOffLimit = SC.GetValue<int>("SRD.ChuckVacuumOffLimit");
  80. if (_srdCommon.CommonData.VacuumValue < vacuumOffLimit)
  81. {
  82. LOG.WriteLog(eEvent.ERR_SRD, Module, $"Chuck vacuum is off, but VacuumValue:{_srdCommon.CommonData.VacuumValue} < VacuumOff Limit:{vacuumOffLimit}");
  83. return RState.Failed;
  84. }
  85. return Runner.Start(Module, "Lift Up On");
  86. }
  87. else
  88. {
  89. return Runner.Start(Module, "Lift Up Off");
  90. }
  91. }
  92. }
  93. }