模数轴
模数轴 (Modulo Axis) 定位是一种用于旋转轴的运动控制方法,当轴完成一个完整循环后,其位置会重复。例如,在模数范围为 0° 到 360° 的旋转轴中,若轴移动超过 360°,则位置会重置为 0°,而不会变为 361°。同样地,若轴向后移动超过 0°,则位置会绕回至 359°,而不会变为 -1°。
注意:从 KS 4.5.2 版本开始,支援模数轴。
KINGSTAR 模数轴范例
复制
// MoveAxisAbsolute, shortest path
KsCommandStatus moveCommand{};
KsCommandStatus setParaCmd{};
KsCommandStatus setPosOffsetCmd{};
setParaCmd = SetAxisParameter(TargetAxis, McAxisParameter::mcModuloAxisValue, 360, McExecutionMode::mcImmediately);
setParaCmd = WaitForCommand(10, true, setParaCmd);
setParaCmd = SetAxisParameter(TargetAxis, McAxisParameter::mcEnableModuloAxis, TRUE, McExecutionMode::mcImmediately);
setParaCmd = WaitForCommand(10, true, setParaCmd);
setPosOffsetCmd = SetAxisPositionOffset(TargetAxis, 0, FALSE, McExecutionMode::mcImmediately);
setPosOffsetCmd = WaitForCommand(10, true, setPosOffsetCmd)
moveCommand = MoveAxisAbsolute(TargetAxis, 360, 360, 3600, 3600, 360000, McDirection::mcShortestWay, McBufferMode::mcBuffered); // A
moveCommand = MoveAxisAbsolute(TargetAxis, 720, 360, 3600, 3600, 360000, McDirection::mcShortestWay, McBufferMode::mcBuffered); // B
moveCommand = MoveAxisAbsolute(TargetAxis, 60, 360, 3600, 3600, 360000, McDirection::mcShortestWay, McBufferMode::mcBuffered); // C
moveCommand = MoveAxisAbsolute(TargetAxis, 340, 360, 3600, 3600, 360000, McDirection::mcShortestWay, McBufferMode::mcBuffered); // D
moveCommand = MoveAxisAbsolute(TargetAxis, 90, 360, 3600, 3600, 360000, McDirection::mcShortestWay, McBufferMode::mcBuffered); // E
此范例包含以下设定:
- 将轴设定为模数轴,指定模数值为 360 并启用模数轴。
- 使用 MoveAxisAbsolute 指令将轴移动至五个绝对位置,确保轴采用最短路径。
上图表示了在各指令下,轴的移动状况:
指令 | 开始位置 | 目标位置 | 移动距离 (方向) | 模数结果 |
---|---|---|---|---|
A |
0° |
360° |
0° |
360 % 360 = 0 由于轴目前位于 0°,因此不会移动。 |
B |
0° |
720° |
0° |
720 % 360 = 0 由于轴目前位于 0°,因此不会移动。 |
C |
0° |
60° |
60° (正方向) |
60 % 360 = 60 轴目前位于 0°,前往 60° 的最短路径是朝正方向移动 60°。若朝负方向移动,则需移动 300°,移动距离较长。 |
D |
60° |
340° |
80° (负方向) |
340 % 360 = 340 轴目前位于 60°,前往 340° 的最短路径是朝负方向移动 80°。若朝正方向移动,则需移动 280°,移动距离较长。 |
E |
340° |
90° |
110° (正方向) |
90 % 360 = 90 轴目前位于 340°,前往 90° 的最短路径是朝正方向移动 110°。若朝负方向移动,则需移动 250°,移动距离较长。 |
KINGSTAR 模数轴
本节内容包含了 KINGSTAR 模数轴的相关资讯。
- 您可使用 mcEnableModuloAxis 与 mcModuloAxisValue 参数设定 KINGSTAR 模数轴。
- RT/Win32:请参阅 McAxisParameter
- .NET:请参阅 McAxisParameter
- 启用模数轴时,以下 API 中的位置输入和输出将转换为模数位置:
- 位置输入:
- SetAxisPosition
- SetAxisPositionOffset(在 Absolute 模式下)
- SetAxisParameter, mcSoftLimitPositive/mcSoftwareLimitPositive/mcSoftLimitNegative/mcSoftwareLimitNegative
- SetAxisTouchProbe
- SetAxisCamSwitch
- MoveAxisAbsolute
- SimulateAxisAbsolute
- MoveAxisContinuousAbsolute
- SetAxisGearInPos, MasterSyncPosition
- UpdateCommand
- 位置输入:
- 启用模数轴时,以下 API 中的距离输入不会转换为模数设定:
- 启用模数轴时,以下 API 中的位置输入不会被模数设定影响:
- SetAxisCyclicSwitch
- SetAxisCam
- SetTrigger(使用者需自行将触发值转换为模数值)
- Group motion APIs 不可使用模数轴。
- 转换后模数值的属性:
- 转换后的模数值永远为正数 (0, modulo_value]。例如,假设模数值设为 360。若使用者指令的目标位置为 -20,KINGSTAR 会将目标位置视为 340。
- 预设的模数值为 UINT_MAX。
- 当正方向或距离指令超过模数范围时,不会回传错误。
- 当轴处于位置 0 (modulo_value) 时,实际位置可能会稍微偏离 0。例如,假设模数值设为 360。若位置偏移 -0.001,使用者将取得位置 359.999。
- 驱动器的模数功能:
- 由于驱动器应被视为线性轴,因此不建议启用驱动器本身的模数功能。
- 以 Sanyodenki 的 RS3 为例,该驱动器的模数功能仰赖于 0x607B (CiA),此为一个可选物件,不保证一定存在。
- 若使用者仍想使用驱动器的模数功能,建议您:
- 关闭 KINGSTAR 模数轴。
- 自行维护模数位置。
- 由于驱动器应被视为线性轴,因此不建议启用驱动器本身的模数功能。