# Public API implementation traceability Public methods are extracted from `DobotCtrl` and matched against `DobotTcp`. This is structural source-code inspection, **not** hardware validation. Signatures come from `DobotCtrl`. Methods may still raise `NotImplementedError`, return placeholders, or have device-specific limitations. | Public method | MG400 implementation | |---|---| | `connect(self)` | `DobotTcp.connect` | | `get_version(self, rel_toml_path)` | `DobotTcp.get_version` | | `delete(self)` | `DobotTcp.delete` | | `disconnect(self)` | `DobotTcp.disconnect` | | `halt(self)` | `DobotTcp.halt` | | `task_stop(self)` | `DobotTcp.task_stop` | | `hand_stop(self)` | `DobotTcp.hand_stop` | | `stop(self)` | `DobotTcp.stop` | | `reset_error(self)` | `DobotTcp.reset_error` | | `release_arm(self)` | `DobotTcp.release_arm` | | `motion_complete(self)` | `DobotTcp.motion_complete` | | `get_motion_complete(self)` | `DobotTcp.get_motion_complete` | | `wait_for_complete(self)` | `DobotTcp.wait_for_complete` | | `change_work(self, work_no)` | `DobotTcp.change_work` | | `get_current_work_no(self)` | `DobotTcp.get_current_work_no` | | `get_work(self, work_no=None)` | `DobotTcp.get_work` | | `set_work(self, work_no, work_define, work_attribute=0)` | `DobotTcp.set_work` | | `change_tool(self, work_no)` | `DobotTcp.change_tool` | | `get_current_tool(self)` | `DobotTcp.get_current_tool` | | `get_current_tool_no(self)` | `DobotTcp.get_current_tool_no` | | `get_tool_define(self, tool_no)` | `DobotTcp.get_tool_define` | | `get_tool(self, tool_no)` | `DobotTcp.get_tool` | | `set_tool_define(self, tool_no, tool_define)` | `DobotTcp.set_tool_define` | | `set_tool(self, tool_no, tool_define)` | `DobotTcp.set_tool` | | `take_arm(self)` | `DobotTcp.take_arm` | | `give_arm(self)` | `DobotTcp.give_arm` | | `coord_type(self, coord_type)` | `DobotTcp.coord_type` | | `set_coord_type(self, coord_type)` | `DobotTcp.set_coord_type` | | `get_coord_type(self)` | `DobotTcp.get_coord_type` | | `path_blend(self, value)` | `DobotTcp.path_blend` | | `set_path_blend(self, path_blend)` | `DobotTcp.set_path_blend` | | `get_path_blend(self)` | `DobotTcp.get_path_blend` | | `motion_mode(self, value)` | `DobotTcp.motion_mode` | | `set_motion_mode(self, mode)` | `DobotTcp.set_motion_mode` | | `get_motion_mode(self)` | `DobotTcp.get_motion_mode` | | `task(self)` | `DobotTcp.task` | | `task_state(self)` | `DobotTcp.task_state` | | `get_task_status(self)` | `DobotTcp.get_task_status` | | `current_position(self)` | `DobotTcp.current_position` | | `current_angle(self)` | `DobotTcp.current_angle` | | `speed(self)` | `DobotTcp.speed` | | `jspeed(self)` | `DobotTcp.jspeed` | | `extspeed(self)` | `DobotTcp.extspeed` | | `accel(self)` | `DobotTcp.accel` | | `decel(self)` | `DobotTcp.decel` | | `extaccel(self)` | `DobotTcp.extaccel` | | `extdecel(self)` | `DobotTcp.extdecel` | | `lock(self)` | `DobotTcp.lock` | | `busy_status(self)` | `DobotTcp.busy_status` | | `is_running(self)` | `DobotTcp.is_running` | | `state(self)` | `DobotTcp.state` | | `servo_on(self)` | `DobotTcp.servo_on` | | `direct_mode(self)` | `DobotTcp.direct_mode` | | `get_direct_mode(self)` | `DobotTcp.get_direct_mode` | | `get_current_position(self)` | `DobotTcp.get_current_position` | | `get_current_pose(self)` | `DobotTcp.get_current_pose` | | `get_current_angle(self)` | `DobotTcp.get_current_angle` | | `error_code(self)` | `DobotTcp.error_code` | | `error_description(self)` | `DobotTcp.error_description` | | `get_current_error_info(self)` | `DobotTcp.get_current_error_info` | | `get_error(self)` | `DobotTcp.get_error` | | `get_error_code(self)` | `DobotTcp.get_error_code` | | `get_error_count(self)` | `DobotTcp.get_error_count` | | `get_error_info(self, index)` | `DobotTcp.get_error_info` | | `get_error_description(self, error_code)` | `DobotTcp.get_error_description` | | `print_error_info(self, e)` | `DobotTcp.print_error_info` | | `print_error(self, e)` | `DobotTcp.print_error` | | `set_speed(self, speed)` | `DobotTcp.set_speed` | | `get_speed(self)` | `DobotTcp.get_speed` | | `set_jspeed(self, speed)` | `DobotTcp.set_jspeed` | | `get_jspeed(self)` | `DobotTcp.get_jspeed` | | `set_accel(self, accel)` | `DobotTcp.set_accel` | | `get_accel(self)` | `DobotTcp.get_accel` | | `set_decel(self, decel)` | `DobotTcp.set_decel` | | `get_decel(self)` | `DobotTcp.get_decel` | | `set_extspeed(self, speed)` | `DobotTcp.set_extspeed` | | `get_extspeed(self)` | `DobotTcp.get_extspeed` | | `set_extaccel(self, extaccel)` | `DobotTcp.set_extaccel` | | `get_extaccel(self)` | `DobotTcp.get_extaccel` | | `set_extdecel(self, extdecel)` | `DobotTcp.set_extdecel` | | `get_extdecel(self)` | `DobotTcp.get_extdecel` | | `turn_on_motor(self)` | `DobotTcp.turn_on_motor` | | `turn_off_motor(self)` | `DobotTcp.turn_off_motor` | | `p2j(self, p_type_pos)` | `DobotTcp.p2j` | | `j2p(self, j_type_pos)` | `DobotTcp.j2p` | | `dev(self, base, offset)` | `DobotTcp.dev` | | `move(self, target, *, motion_mode=None, coord_type=None, path_blend=None, offset=None, pose=None, speed=None, accel=None, decel=None, is_async=True)` | `DobotTcp.move` | | `approach(self, lComp, vntPoseBase, vntPoseLen, bstrOpt=None)` | `DobotTcp.approach` | | `drive(self, target, *, relative=False, path_blend=None, speed=None, is_async=False)` | `DobotTcp.drive` | | `rotate(self, plane, angle, center, *, path_blend=None, speed=None, is_async=True)` | `DobotTcp.rotate` | | `get_IO(self, id_num)` | `DobotTcp.get_IO` | | `get_digital_input(self, id_num)` | `DobotTcp.get_digital_input` | | `set_IO(self, id_num, value)` | `DobotTcp.set_IO` | | `autocal(self, origin=False)` | `DobotTcp.autocal` | | `get_motion_preparation(self)` | `DobotTcp.get_motion_preparation` | | `run_script(self)` | `DobotTcp.run_script` | | `init_hand(self)` | `DobotTcp.init_hand` | | `open_hand(self, speed=None)` | `DobotTcp.open_hand` | | `hand_open(self, speed=None)` | `DobotTcp.hand_open` | | `hand(self, pos=None, *, position=None, force=None, direction=True, relative=False, speed=None, is_async=False)` | `DobotTcp.hand` | | `start_log(self)` | `DobotTcp.start_log` | | `stop_log(self)` | `DobotTcp.stop_log` | | `clear_log(self)` | `DobotTcp.clear_log` | | `start_servo_log(self)` | `DobotTcp.start_servo_log` | | `stop_servo_log(self)` | `DobotTcp.stop_servo_log` | | `clear_servo_log(self)` | `DobotTcp.clear_servo_log` | | `get_log_count(self)` | `DobotTcp.get_log_count` | | `get_log_record(self, index)` | `DobotTcp.get_log_record` | **Note:** Name matching does not establish equivalent argument semantics, supported motion modes, stop behavior, or safety functions.