模數軸
模數軸 (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 模數軸。
- 自行維護模數位置。
- 由於驅動器應被視為線性軸,因此不建議啟用驅動器本身的模數功能。