# AUBO RobotArm 与控制柜 IO `AuboArm` 是 AUBO SDK v0.27.1 的 `RobotArm` 后端。控制柜 Standard 数字 IO 通过设备通用的 `executeJsonCommand` 接口访问,远程调用复用 `cmvr.api.SystemService/ExecuteJsonCommand`,不经过 `ArmService` 或 `MotorService`。 返回 [Devices 模块指南](../../README.md) 或 [项目总览](../../../../README.md)。 ## 代码与配置 - 实现:[`aubo_arm.h`](aubo_arm.h)、[`aubo_arm.cpp`](aubo_arm.cpp) - 测试:[`tests/aubo_arm_json_command_test.cpp`](tests/aubo_arm_json_command_test.cpp) - 设备配置:[`../../../config/devices/arm/aubo_arm.pb.txt`](../../../config/devices/arm/aubo_arm.pb.txt) - DeviceManager 配置: [`../../../config/manager/device_manager.pb.txt`](../../../config/manager/device_manager.pb.txt) - SystemService 实现: [`../../../service/grpc/src/grpc_system_service.cpp`](../../../service/grpc/src/grpc_system_service.cpp) - Proto:[`../../../../protos/cmvr/api/system_service.proto`](../../../../protos/cmvr/api/system_service.proto) 仓库配置使用 SDK RPC 端口 `30004`。现场部署必须填写真实控制器地址和凭据, 不要把生产密码提交到默认配置。 ## 控制柜 Standard 数字 IO 当前支持: | `operation` | 说明 | 必填字段 | | --- | --- | --- | | `get_di` | 读取控制柜数字输入 | `index` | | `get_do` | 读取控制柜数字输出及其 runstate | `index` | | `set_do` | 设置控制柜数字输出 | `index`、`value` | JSON 命令: ```json {"command":"cabinet_io","operation":"get_di","index":0} {"command":"cabinet_io","operation":"get_do","index":0} {"command":"cabinet_io","operation":"set_do","index":0,"value":true} ``` `index` 从 `0` 开始,运行时根据控制器返回的 IO 数量检查范围。 `set_do.value` 必须是 JSON 布尔值 `true` 或 `false`,不接受 `0/1` 或字符串。 `set_do` 成功响应中的 `requested_value` 只表示 SDK 已接受请求;确认实际输出时 必须再调用 `get_do`。 读取成功响应示例: ```json { "success": true, "command": "cabinet_io", "operation": "get_di", "index": 0, "count": 16, "value": false } ``` ## 通过 gRPC 调用 默认 gRPC 端口为 `50052`。读取 DI0: ```shell grpcurl -plaintext \ -d '{ "header":{"deviceId":"aubo_arm"}, "requestJson":"{\"command\":\"cabinet_io\",\"operation\":\"get_di\",\"index\":0}" }' \ 127.0.0.1:50052 \ cmvr.api.SystemService/ExecuteJsonCommand ``` 设置 DO0 为高电平: ```shell grpcurl -plaintext \ -d '{ "header":{"deviceId":"aubo_arm"}, "requestJson":"{\"command\":\"cabinet_io\",\"operation\":\"set_do\",\"index\":0,\"value\":true}" }' \ 127.0.0.1:50052 \ cmvr.api.SystemService/ExecuteJsonCommand ``` 使用源码默认配置时: 1. 在 `cmvr-es/config/devices/arm/aubo_arm.pb.txt` 填写正确地址和登录信息; 2. 在 `cmvr-es/config/manager/device_manager.pb.txt` 将 `aubo_arm.enable` 改为 `true`; 3. 重新安装配置并启动安装产物。 ```shell cmake --install build ./output/bin/cmvr_es ``` `output/bin/cmvr_es` 默认读取 `output/bin/config/`。使用 `--config` 时,应修改 对应外部配置根。设备未启用或初始化失败时,gRPC 返回 `Device not found: aubo_arm`。 ## 安全与语义边界 - 只访问控制柜 Standard 数字 IO,不访问工具端 IO、可配置 IO 或安全 IO; - `set_do` 不修改输出 runstate; - 只有 `StandardOutputRunState::None` 的通道允许写入,否则返回 `output_managed_by_runstate`; - 普通访问不会调用会重置全部输出配置的 `setDigitalOutputRunstateDefault()`; - 模拟量 IO 涉及 domain、单位和量程,当前 JSON 接口不开放; - gRPC/JSON 返回成功不代表目标 IO 具备功能安全等级; - 真实写测试前应确认通道用途、负载、电气隔离、默认电平和控制器程序所有权。 ## 测试 ```bash cmake --build build --target aubo_arm_json_command_test -j4 ctest --test-dir build \ -R '^aubo_arm_json_command_test$' \ --output-on-failure ``` 该测试覆盖 JSON 校验和无硬件错误路径,不代表已在真实 AUBO 控制柜完成 DI/DO 读取、写入或 runstate 拒绝验证。