Keep the root README concise while documenting MotorService, the Modbus TCP PLC runtime, the motor stack, and AUBO cabinet IO next to their owning code.
125 lines
4.1 KiB
Markdown
125 lines
4.1 KiB
Markdown
# 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 拒绝验证。
|