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 toDobotTcp.halt(), which calls_unsupported("halt"). It is not an emergency-stop substitute.DobotCtrl.stop()delegates toDobotTcp.stop(), which calls_unsupported("stop").DobotTcp.task_stop()calls_unsupported("task_stop"); this is not synonymous with the MG400-specificstop_script().DobotCtrl.hand_stop()remains unsupported until a specific end-effector interface is defined.
Motion-completion semantics
get_motion_complete()checksbusy_status. It returnsFalseif the status isNone, otherwisenot bool(running). This does not prove that a motion command completed successfully.wait_for_complete()calls MG400Sync(), 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. AlthoughDobotTcp.wait_for_complete(timeout=None, interval=0.02)acceptstimeoutandinterval, 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,rotatedobot_tcp(2).py:halt,stop,task_stop,get_motion_complete,wait_for_complete