Motion command: synchronous and asynchronous source audit
This document records static inspection of the supplied DobotCtrl and DobotTcp source, not an MG400 hardware test.
Public contract
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) delegates to DobotTcp.move() with the same arguments. is_async does not denote a Python async def or asynchronous HTTP request. It selects whether the call returns after command acceptance or waits for queued motion via Sync().
Dispatch
Condition |
Command |
Note |
|---|---|---|
|
|
Public six-component joints mapped to four MG400 joints |
|
|
Public six-component pose mapped to four MG400 components |
|
|
Linear motion |
|
Unsupported ( |
A single target cannot define an arc |
|
Unsupported ( |
Not implemented |
Joint coordinates with non-PTP mode |
Unsupported ( |
Joint semantics cannot be preserved |
pose is unsupported. offset is accepted only for P coordinates. Non-None path_blend depends on unsupported blending configuration. Speed is mapped to set_jspeed() for PTP/joint motion and set_speed() for LINE. Acceleration and deceleration settings are applied before dispatch; previously applied settings are not rolled back if a later step fails.
Return values and error handling
_handle_command_reply()checks command acceptance. A zero response code is not proof of completed physical motion.is_async=Trueinvokes_wait_motion_start_or_error()with default 0.25 s observation and 0.01 s interval. ATrueresult does not prove success over the entire motion.is_async=Falseinvokeswait_for_complete()usingSync()and then_motion_error_active(query_error_id=True). Existing error-handling paths may fail to distinguish communications failure from absence of alarm. ATrueresult must not serve as a safety completion guarantee.get_motion_complete()returnsFalsewhenbusy_statusis unavailable, otherwisenot bool(busy_status). It does not track success per command.
drive() and limits
drive() accepts axis/value pairs, builds a joint target from current joint positions, then calls move(..., motion_mode="PTP", coord_type="J"). Axis numbering is 1-based, nominally 1–6, but nonzero motion on nonexistent MG400 axes J5/J6 fails. relative=True adds the requested value to the current angle. Failure to obtain current angles returns False. rotate() is unimplemented.
Scope
This audit covers static branches and delegation only. It does not test live TCP behavior, competing commands, timeouts, emergency stop, or safety interlocks.