# Common Control Interface: Implementation Boundaries This page is based on `src/dobot/dobot_ctrl.py` and `src/dobot/dobot_tcp.py`. The **project-defined common robot-control interface** is shared across the COBOTTA, UR, and MG400 implementations. `DobotCtrl` is the **MG400 adapter** for that interface; the manufacturer's native MG400 API is not itself the common interface. ## Public and implementation layers `DobotCtrl.__init__(dobot_ip="192.168.1.6", instance_name="Ctrl", logger=None, log_level=None, auto_connect=True)` creates an internal `DobotTcp` instance. Calls such as `connect()`, `disconnect()`, and `get_current_pose()` delegate to that implementation. Both local and remote operation control the same MG400; `ese774_frame` transparently transports calls to the server-side controller. ## Motion parameters and actual support `move(target, *, motion_mode=None, coord_type=None, path_blend=None, offset=None, pose=None, speed=None, accel=None, decel=None, is_async=True)` preserves the common signature. The MG400 implementation covers **P+PTP→MovJ, P+LINE→MovL, and J+PTP→JointMovJ**. Semantics-preserving support is not established for `path_blend`, `decel`, `pose`, `CIRCLE`, or `SPLINE`. Accepting a parameter does not establish that the corresponding behavior is implemented. `drive(target, *, relative=False, path_blend=None, speed=None, is_async=False)` supports axis selection, relative motion, and speed selection; `path_blend` semantics remain unestablished. `dev(base, offset)` performs simple addition for **x/y/z/rz** only. The four-axis MG400 cannot realize **rx/ry or J5/J6**. `rotate(plane, angle, center, *, path_blend=None, speed=None, is_async=True)` is exposed but its conversion to a robot trajectory command is not implemented. `halt()`, `stop()`, and `task_stop()` must **not** be used as substitutes for an emergency stop: equivalent common-interface stopping semantics are not guaranteed. ## Two meanings of synchronous and asynchronous `SyncDobotClient` and `AsyncDobotClient` determine the **HTTP client invocation model**. The `is_async` argument to `move()` concerns **waiting for MG400 motion completion**. Successful HTTP completion does not establish that the robot safely reached its target. Check completion and alarm state separately, using `wait_for_complete()` as appropriate. ## Relationship to manufacturer documentation The DobotStudio Pro User Manual (MG400 & M1 Pro) documents connection, coordinate frames, and safety settings; it does not specify this Python library's APIs. The MG400 Maintenance Manual V1.2 (2026-04-23) covers inspection, safety, and alarms. Do not infer Python API implementation coverage from functions shown in the manufacturer's UI. ## Commissioning checklist 1. Verify workspace, tooling, payload, and emergency-stop arrangements according to the manufacturer instructions. 2. Distinguish the MG400 destination IP from the HTTP server's listening IP and port. 3. Test read-only status operations before issuing any motion commands. 4. Avoid unverified common-interface operations; monitor robot alarms and motion completion.