移動指令の同期・非同期処理の実装照合
本書は提供された DobotCtrl / DobotTcp のソースコードに対する静的照合です。MG400実機試験ではありません。
公開インターフェース
DobotCtrl.move(target, *, motion_mode=None, coord_type=None, path_blend=None, offset=None, pose=None, speed=None, accel=None, decel=None, is_async=True) は、同名・同引数で DobotTcp.move() に委譲します。公開I/Fの is_async は、Pythonの async def やHTTP非同期実行を意味しません。移動コマンドの受付後に戻るか、Sync()でキュー完了を待つかを選ぶ引数です。
コマンドの選択
条件 |
送信コマンド |
備考 |
|---|---|---|
|
|
6要素公開J座標をMG400の4軸に変換 |
|
|
6要素公開P座標をMG400の4要素に変換 |
|
|
直線移動 |
|
未対応 ( |
単一目標だけでは円弧軌道を表現できない |
|
未対応 ( |
未実装 |
|
未対応 ( |
J座標の意味を保持できない |
pose 指定は未実装で False。offset はP座標だけに適用可能です。path_blend の非None指定は未対応の設定処理に依存します。速度はPTP/Jで set_jspeed()、LINEで set_speed() を呼びます。加速度・減速度は移動指令より前に設定されます。設定が途中で失敗した場合、移動コマンドは送信されませんが、それ以前の設定変更が巻き戻される保証はありません。
完了の意味とエラー
コマンドの応答を
_handle_command_reply()で判定します。応答コード0は受付成功であり、物理的な移動完了ではありません。is_async=Trueは_wait_motion_start_or_error()に進みます。既定の監視時間は0.25秒、間隔は0.01秒です。この戻り値がTrueでも、移動全期間の成功を保証しません。is_async=Falseはwait_for_complete()に進み、Sync()応答を検査した後、_motion_error_active(query_error_id=True)を実行します。ただし通信失敗を正常状態と区別できない経路があるため、戻り値Trueを安全上の完了保証に使用できません。get_motion_complete()はbusy_statusが取得できなければFalse、取得できればnot bool(busy_status)を返します。指令ごとの成功・失敗を追跡するものではありません。
drive() と制約
drive() は軸番号と値の組を受け取り、現在の関節角から目標J座標を組み立てて move(..., motion_mode="PTP", coord_type="J") に委譲します。軸番号は1始まりで1~6を受け付けますが、MG400に存在しないJ5/J6への非ゼロ指定は失敗します。relative=True は現在角度への加算です。現在角度の取得に失敗した場合も False です。rotate() は未実装です。
検証範囲
この照合は静的な分岐と委譲先の確認です。TCP応答の実時間挙動、複数指令の競合、タイムアウト、非常停止、安全インターロックは検証していません。