KollmorgenSwitchOnRoutine.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using Aitex.Core.RT.Routine;
  2. using MECF.Framework.Common.CommonData.PUF;
  3. using MECF.Framework.Common.Routine;
  4. using MECF.Framework.Common.TwinCat;
  5. using PunkHPX8_Core;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace PunkHPX8_RT.Devices.AXIS.Kollmorgen
  12. {
  13. public class KollmorgenSwitchOnRoutine : RoutineBase, IRoutine
  14. {
  15. private enum SwitchOnStep
  16. {
  17. NoneModeOfOperation,
  18. ClearError,
  19. WriteOffline,
  20. WriteOnline,
  21. CheckSwitchDisabled,
  22. WriteSwitchOnControlWord,
  23. SwitchOnDelay,
  24. CheckSwitchOn,
  25. End
  26. }
  27. #region 常量
  28. private const string TARGET_POSITION = "TargetPosition";
  29. #endregion
  30. #region 内部变量
  31. private JetAxisBase _axis;
  32. private bool _isSwitchDisabled = false;
  33. private BeckhoffCommonAxis _beckhoffCommonAxis;
  34. #endregion
  35. public KollmorgenSwitchOnRoutine(string module, JetAxisBase axis, BeckhoffCommonAxis beckhoffCommonAxis) : base(module)
  36. {
  37. _axis = axis;
  38. _beckhoffCommonAxis = beckhoffCommonAxis;
  39. }
  40. public void Abort()
  41. {
  42. Runner.Stop("Manual Abort");
  43. }
  44. public RState Monitor()
  45. {
  46. Runner.Run(SwitchOnStep.NoneModeOfOperation, () => { return _beckhoffCommonAxis.WriteModeOfMode(AxisModeOfOperation.None); },
  47. () => { return CheckModeOfOperation((byte)AxisModeOfOperation.None); }, 1000)
  48. .Run(SwitchOnStep.ClearError, ClearError, CheckError, 1000)
  49. .Run(SwitchOnStep.WriteOffline, () => { return _beckhoffCommonAxis.WriteControlWord(0x06); }, () => { return CheckControlWord(0x06); }, 1000)
  50. .Run(SwitchOnStep.WriteOnline, () => { return _beckhoffCommonAxis.WriteControlWord(0x07); }, () => { return CheckControlWord(0x07); }, 1000)
  51. .Run(SwitchOnStep.CheckSwitchDisabled, CheckSwitchDisabled, CheckReadyToSwitchOn, _delay_2s)
  52. .Run(SwitchOnStep.WriteSwitchOnControlWord, () => { return _beckhoffCommonAxis.WriteControlWord(0x0F); }, () => { return CheckControlWord(0x0F); }, 1000)
  53. .Delay(SwitchOnStep.SwitchOnDelay, 100)
  54. .Wait(SwitchOnStep.CheckSwitchOn, CheckSwitchOn, 500)
  55. .End(SwitchOnStep.End, NullFun, _delay_1ms);
  56. return Runner.Status;
  57. }
  58. /// <summary>
  59. /// 清除错误
  60. /// </summary>
  61. /// <returns></returns>
  62. private bool ClearError()
  63. {
  64. if (_axis.IsError)
  65. {
  66. return _beckhoffCommonAxis.WriteControlWord(128);
  67. }
  68. return true;
  69. }
  70. /// <summary>
  71. /// 检验SwitchDisabled
  72. /// </summary>
  73. /// <returns></returns>
  74. private bool CheckSwitchDisabled()
  75. {
  76. if (_axis.MotionData.Status == "Switch On Disabled")
  77. {
  78. _isSwitchDisabled = true;
  79. return _beckhoffCommonAxis.WriteControlWord(0x06);
  80. }
  81. return true;
  82. }
  83. /// <summary>
  84. /// 检验Ready to Switch On
  85. /// </summary>
  86. /// <returns></returns>
  87. private bool CheckReadyToSwitchOn()
  88. {
  89. if (_isSwitchDisabled)
  90. {
  91. return _axis.MotionData.Status == "Ready to Switch On";
  92. }
  93. else
  94. {
  95. return true;
  96. }
  97. }
  98. /// <summary>
  99. /// 检验是否存在错误
  100. /// </summary>
  101. /// <returns></returns>
  102. private bool CheckError()
  103. {
  104. return !_axis.IsError;
  105. }
  106. public bool CheckModeOfOperation(byte modeOfOperation)
  107. {
  108. return _axis.ModeOfOperation == modeOfOperation;
  109. }
  110. public bool CheckControlWord(ushort controlWord)
  111. {
  112. return _axis.ControlWord == controlWord;
  113. }
  114. private bool CheckSwitchOn()
  115. {
  116. return _axis.IsSwitchOn;
  117. }
  118. public RState Start(params object[] objs)
  119. {
  120. _isSwitchDisabled = false;
  121. return Runner.Start(Module, "Switch On");
  122. }
  123. }
  124. }