# モーション制御・停止APIのソース照合 この文書は提供された `dobot_ctrl.py` と `dobot_tcp.py` の実装を対象とする静的検証結果であり、MG400実機による試験結果ではない。 ## 停止APIの区別 - `DobotCtrl.halt()` は `DobotTcp.halt()` に委譲するが、後者は `_unsupported("halt")` を実行する。**非常停止の代用として使用できない**。 - `DobotCtrl.stop()` は `DobotTcp.stop()` に委譲するが、後者は `_unsupported("stop")` を実行する。 - `DobotTcp.task_stop()` も `_unsupported("task_stop")` を実行する。MG400固有の `stop_script()` と同義ではない。 - `DobotCtrl.hand_stop()` はハンド機器の仕様が定まっていないため未実装である。 ## 移動完了判定の区別 - `get_motion_complete()` は `busy_status` に基づく。値が `None` の場合は `False` を返し、それ以外は `not bool(running)` を返す。**移動指令の正常完了を保証する判定ではない**。 - `wait_for_complete()` は `DobotTcp` の `Sync()` を呼び、応答を検査した後に `_motion_error_active("Sync", query_error_id=True)` でエラーを確認する。応答成功だけでは先行モーションの正常終了と同義ではない。 - `DobotCtrl.wait_for_complete()` は引数を受け取らない。`DobotTcp.wait_for_complete(timeout=None, interval=0.02)` の `timeout` と `interval` は**使用されない**。時間制限付き待機として案内してはならない。 ## 制限 `drive()` は一部の軸移動処理に対応するが、`path_blend` の意味を保持する実装はない。MG400の物理軸に存在しないJ5/J6は駆動できない。`rotate()` の `plane`・`angle`・`center` を軌道コマンドに変換する処理は未実装である。 ## 運用上の注意 ソフトウェア上の `halt()` や `stop()` を安全停止系に組み込まないこと。安全停止とリスクアセスメントは、MG400のメーカー安全資料と設備全体の安全設計に従う必要がある。 ## 検証対象 - `dobot_ctrl(3).py`: `halt`, `stop`, `hand_stop`, `get_motion_complete`, `wait_for_complete`, `drive`, `rotate` - `dobot_tcp(2).py`: `halt`, `stop`, `task_stop`, `get_motion_complete`, `wait_for_complete`