Motion and stop API source audit

This page records static verification against the supplied dobot_ctrl.py and dobot_tcp.py sources; it is not a hardware test on an MG400.

Stop methods are not interchangeable

  • DobotCtrl.halt() delegates to DobotTcp.halt(), which calls _unsupported("halt"). It is not an emergency-stop substitute.

  • DobotCtrl.stop() delegates to DobotTcp.stop(), which calls _unsupported("stop").

  • DobotTcp.task_stop() calls _unsupported("task_stop"); this is not synonymous with the MG400-specific stop_script().

  • DobotCtrl.hand_stop() remains unsupported until a specific end-effector interface is defined.

Motion-completion semantics

  • get_motion_complete() checks busy_status. It returns False if the status is None, otherwise not bool(running). This does not prove that a motion command completed successfully.

  • wait_for_complete() calls MG400 Sync(), checks the command reply, and then checks _motion_error_active("Sync", query_error_id=True). A successful command response alone does not establish an alarm-free preceding motion.

  • DobotCtrl.wait_for_complete() takes no arguments. Although DobotTcp.wait_for_complete(timeout=None, interval=0.02) accepts timeout and interval, neither is used. Do not document this as a timeout-bounded wait.

Partial and unsupported behavior

drive() supports some axis motion operations, but does not preserve path_blend semantics. The MG400 has no J5/J6 axes. rotate() does not implement conversion of plane, angle, and center into a robot trajectory.

Safety

Do not integrate the unsupported software halt() or stop() methods as safety-stop functions. Equipment-level safety engineering and risk assessment must follow the manufacturer safety documentation.

Source scope

  • 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