エラー取得・状態判定の多段呼び出し検証

対象は同梱 source_reference/dobot_core/dobot_tcp.py と dobot_error.py の静的ソース照合です。実機・通信試験ではありません。

呼び出し経路

公開API(DobotCtrl 経由)

DobotTcp

DobotErrorManager

取得・判定処理

get_error()

get_error()

get_error() → _get_error_records()

GetErrorID() 応答からID一覧

get_error_code()

get_error_code()

get_error_code() → _get_error_records()

先頭ID、レコードなしなら 0

get_error_count()

get_error_count()

get_error_count() → _get_error_records()

レコード件数

check_error()

check_error()

get_error_count() → _get_error_records()

件数が0なら True

get_error_info(index)

get_error_info(index)

get_error_info() → _get_error_records() → _error_record_info()

範囲外なら None

get_current_error_info()

同名

同名 → _get_error_records() → _error_record_info()

説明付きレコード一覧

error_description

同名プロパティ

同名プロパティ → get_current_error_info()

レコードなしなら空文字

通信異常と正常値が合流する箇所

  1. _get_error_records() は Dashboard オブジェクトが None の場合に [] を返す。

  2. GetErrorID() の先頭リターンコードが0以外(または解析不能)の場合、ログを出して [] を返す。

  3. _parse_error_groups() は空応答、括弧構造の不整合、JSON解析失敗、リスト以外の値で [] を返す。

  4. したがって get_error() の []、get_error_count() の 0、get_error_code() の 0、check_error() の True は、アラームが存在しないことを一意には表さない。

  5. ただし dashboard.GetErrorID() 自体が例外を送出した場合は _get_error_records() に捕捉節がなく、その例外が伝播し得る。あらゆる通信障害が空リストになるわけではない。

Feedbackを利用するモーションエラー判定

motion_error_active() は _state_getter("ErrorStatus", timeout=0.1) の RuntimeError を捕捉し、error_status=False に置き換える。query_error_id=False の場合、Feedbackからエラーを検出できなければ GetErrorID() を照会しない。query_error_id=True または ErrorStatus=True の場合は _get_error_records() を照会する。

wait_motion_start_or_error() は既定0.25秒の監視後、query_error_id=True で再判定する。これは受付直後の限定的な監視であり、移動全期間の成功確認ではない。

利用上の結論

  • check_error() の真偽だけで通信正常を判断しない。

  • エラーID取得失敗を確実に区別するには、現在の公開APIの戻り値だけでは不十分な経路がある。

  • 例外の発生範囲は外部Dashboard実装に依存するため、ここでは保証しない。

  • この資料は既存実装の観測可能な仕様を記録するもので、実装の修正は行っていない。