# Software architecture ```text Application ├─ DobotCtrl ── DobotTcp ── DobotApiExt ── vendor dobot_api.py │ ├─ Dashboard TCP 29999 │ ├─ Motion TCP 30003 │ └─ Feedback TCP 30004 └─ SyncDobotClient / AsyncDobotClient / DeviceProxy │ HTTP / JSON FastApiServer + DeviceRouter │ automatic dispatch DobotCtrl ``` `DobotCtrl` is a thin delegation layer that defines the public interface. `DobotTcp` implements MG400-specific conversions, state access, and communication. `dobot_api.py` is the vendor API; subclasses in `dobot_api_ext.py` add logging and connection checks. `DobotTcp` receives 1440-byte feedback frames from port 30004 in a dedicated thread. `DobotErrorManager` handles errors. `RobotVarManager` persists local P/J/I/F/IO variables; these must not be confused with controller-resident robot variables.