MaxonSwitchOffRoutine.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using Aitex.Core.RT.Routine;
  2. using MECF.Framework.Common.CommonData.PUF;
  3. using MECF.Framework.Common.Routine;
  4. using PunkHPX8_Core;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace PunkHPX8_RT.Devices.AXIS.CANOpen
  11. {
  12. public class MaxonSwitchOffRoutine : RoutineBase, IRoutine
  13. {
  14. private enum SwitchOffStep
  15. {
  16. ClearError,
  17. NoneModeOfOperation,
  18. WriteSwitchOffControlWord,
  19. SwitchOnDelay,
  20. CheckSwitchOff,
  21. End
  22. }
  23. #region 内部变量
  24. private JetAxisBase _axis;
  25. private BeckhoffCommonAxis _beckhoffCommonAxis;
  26. #endregion
  27. public MaxonSwitchOffRoutine(string module,JetAxisBase axis, BeckhoffCommonAxis beckhoffCommonAxis) : base(module)
  28. {
  29. _axis = axis;
  30. _beckhoffCommonAxis = beckhoffCommonAxis;
  31. }
  32. public void Abort()
  33. {
  34. Runner.Stop("Manual Abort");
  35. }
  36. public RState Monitor()
  37. {
  38. Runner.Run(SwitchOffStep.ClearError, ClearError,CheckError,1000)
  39. .Run(SwitchOffStep.NoneModeOfOperation, () => { return _beckhoffCommonAxis.WriteModeOfMode(AxisModeOfOperation.None); },
  40. ()=> { return CheckModeOfOperation((byte)AxisModeOfOperation.None); }, 1000)
  41. .Run(SwitchOffStep.WriteSwitchOffControlWord, () => { return _beckhoffCommonAxis.WriteControlWord(0x06); }, () => { return CheckControlWord(0x06); },1000)
  42. .Delay(SwitchOffStep.SwitchOnDelay,100)
  43. .Wait(SwitchOffStep.CheckSwitchOff,CheckSwitchOff,1000)
  44. .End(SwitchOffStep.End,NullFun,100);
  45. return Runner.Status;
  46. }
  47. /// <summary>
  48. /// 清除错误
  49. /// </summary>
  50. /// <returns></returns>
  51. private bool ClearError()
  52. {
  53. if(_axis.IsError)
  54. {
  55. return _beckhoffCommonAxis.WriteControlWord(128);
  56. }
  57. return true;
  58. }
  59. /// <summary>
  60. /// 检验是否存在错误
  61. /// </summary>
  62. /// <returns></returns>
  63. private bool CheckError()
  64. {
  65. return !_axis.IsError;
  66. }
  67. public bool CheckModeOfOperation(byte modeOfOperation)
  68. {
  69. return _axis.ModeOfOperation == modeOfOperation;
  70. }
  71. public bool CheckControlWord(ushort controlWord)
  72. {
  73. return _axis.ControlWord == controlWord;
  74. }
  75. private bool CheckSwitchOff()
  76. {
  77. return !_axis.IsSwitchOn;
  78. }
  79. public RState Start(params object[] objs)
  80. {
  81. return Runner.Start(Module, "Switch Off");
  82. }
  83. }
  84. }