2026-09-19 09:47:22 +08:00
|
|
|
|
# 锥形工件定位 / 转子钢芯定位 TCP 协议
|
2026-08-04 14:23:07 +08:00
|
|
|
|
|
|
|
|
|
|
## 1. 概述
|
|
|
|
|
|
|
|
|
|
|
|
- 传输协议:TCP/IP
|
|
|
|
|
|
- 数据编码:UTF-8 文本
|
|
|
|
|
|
- 服务模式:视觉侧作为 TCP 服务端
|
|
|
|
|
|
- 默认端口:`7800`
|
|
|
|
|
|
- 报文结束符:`\r\n`
|
|
|
|
|
|
- 字段分隔符:`_`
|
|
|
|
|
|
- 当前模式:眼在手外
|
|
|
|
|
|
- 请求和响应均不使用 JSON
|
|
|
|
|
|
|
|
|
|
|
|
## 2. 请求报文
|
|
|
|
|
|
|
2026-10-01 21:26:34 +08:00
|
|
|
|
以下尺寸序号扩展仅适用于 `WorkpieceRotorApp`,`WorkpieceTaperedApp` 请求格式不变。
|
|
|
|
|
|
|
|
|
|
|
|
转子工件检测格式:
|
2026-08-04 14:23:07 +08:00
|
|
|
|
|
|
|
|
|
|
```text
|
2026-10-01 21:26:34 +08:00
|
|
|
|
S相机索引_工件序号\r\n
|
2026-08-04 14:23:07 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
示例:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
2026-10-01 21:26:34 +08:00
|
|
|
|
S1_2\r\n
|
2026-08-04 14:23:07 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
字段说明:
|
|
|
|
|
|
|
|
|
|
|
|
| 字段 | 说明 |
|
|
|
|
|
|
|---|---|
|
2026-10-01 21:26:34 +08:00
|
|
|
|
| `S1` | `S`=工件检测,`1` 为相机索引,从 1 开始 |
|
|
|
|
|
|
| `2` | 工件尺寸序号,对应“工件尺寸”Tab 中的序号,范围 `1–65535` |
|
|
|
|
|
|
|
|
|
|
|
|
`S1_2` 表示使用相机 1,按列表中 2 号工件的标称半径和高度检测。
|
|
|
|
|
|
序号按“工件尺寸”Tab 的行顺序从 1 连续编号;上下移动或删除后会重新编号,默认工件跟随尺寸项移动,删除默认项后改为第一项。保存后请同步调整 PLC 中引用的工件序号。尺寸序号不是结果中的 `Type` 或算法目标编号。
|
|
|
|
|
|
未配置的序号、无效尺寸列表会拒绝启动;格式错误返回 `Error_-3_...`,启动失败返回 `Error_-5_...`。
|
|
|
|
|
|
例如 `S1_0`、`S1_`、`S1__2` 均为非法请求。
|
|
|
|
|
|
|
|
|
|
|
|
兼容旧请求 `S1\r\n`,省略工件序号时使用配置的默认工件;界面“开始”和离线复检也使用默认工件。
|
|
|
|
|
|
本轮启动后固定半径、高度,期间修改列表或收到重复请求不会改变正在执行的检测。
|
|
|
|
|
|
结果报文格式保持不变,不额外插入尺寸序号字段。
|
2026-08-04 14:23:07 +08:00
|
|
|
|
|
|
|
|
|
|
本项目为眼在手外,检测请求不需要传入机械臂当前 `X/Y/Z/A/B/C`。
|
2026-09-19 09:47:22 +08:00
|
|
|
|
工件检测算法会在定位过程中同步计算所需的料框信息,不需要发送单独的料框检测请求,
|
|
|
|
|
|
也不通过 TCP/IP 返回料框几何数据。
|
2026-08-04 14:23:07 +08:00
|
|
|
|
|
|
|
|
|
|
## 3. 工件检测返回报文
|
|
|
|
|
|
|
2026-10-01 21:26:34 +08:00
|
|
|
|
格式(每次检测最多返回当前抓取目标 1 个工件):
|
2026-08-04 14:23:07 +08:00
|
|
|
|
|
|
|
|
|
|
```text
|
2026-10-01 21:26:34 +08:00
|
|
|
|
PointNum_Type_X_Y_Z_A_B_C\r\n
|
2026-08-04 14:23:07 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-10-01 21:26:34 +08:00
|
|
|
|
在 `WorkpieceRotorApp` 中,算法结果可能包含多个候选/上层工件,但 TCP 每次只返回本次抓取目标(算法结果中的第一个工件),不会把全部候选结果拼接到同一帧。协议字段布局不变,因此有目标时 `PointNum` 固定为 `1`;`PointNum=0` 时表示未检测到有效抓取目标,报文只有一个字段:
|
2026-08-04 14:23:07 +08:00
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
0\r\n
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
示例:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
1_2_100.500_200.300_50.100_15.500_-2.300_45.000\r\n
|
|
|
|
|
|
0\r\n
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
字段说明:
|
|
|
|
|
|
|
|
|
|
|
|
| 字段 | 说明 |
|
|
|
|
|
|
|---|---|
|
2026-10-01 21:26:34 +08:00
|
|
|
|
| `PointNum` | 本次返回的抓取工件数量;有有效抓取目标时固定为 `1`,无目标时为 `0` |
|
2026-08-04 14:23:07 +08:00
|
|
|
|
| `Type` | 工件类型 `workpieceType` |
|
|
|
|
|
|
| `X/Y/Z` | 工件位置,单位 mm,保留 3 位小数 |
|
|
|
|
|
|
| `A/B/C` | 工件姿态,单位 deg,保留 3 位小数 |
|
|
|
|
|
|
|
2026-09-19 09:47:22 +08:00
|
|
|
|
`Type`(`workpieceType`)取值含义如下:
|
|
|
|
|
|
|
|
|
|
|
|
| `workpieceType` | 含义 |
|
|
|
|
|
|
|---:|---|
|
|
|
|
|
|
| `0` | 中央 |
|
|
|
|
|
|
| `1` | 上边 |
|
|
|
|
|
|
| `2` | 下边 |
|
|
|
|
|
|
| `3` | 左边 |
|
|
|
|
|
|
| `4` | 右边 |
|
|
|
|
|
|
| `5` | 左上角 |
|
|
|
|
|
|
| `6` | 右上角 |
|
|
|
|
|
|
| `7` | 左下角 |
|
|
|
|
|
|
| `8` | 右下角 |
|
|
|
|
|
|
| `9` | 隔板 |
|
|
|
|
|
|
|
2026-08-04 14:23:07 +08:00
|
|
|
|
本项目不输出接近点坐标,只输出工件定位结果。
|
|
|
|
|
|
|
|
|
|
|
|
## 4. 错误响应
|
|
|
|
|
|
|
|
|
|
|
|
格式:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
Error_code_message\r\n
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
示例:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
Error_-5_工件检测启动失败\r\n
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 5. 姿态输出顺序
|
|
|
|
|
|
|
|
|
|
|
|
返回报文中的 `A/B/C` 由网络配置中的 `poseOutputOrder` 控制。
|
|
|
|
|
|
|
|
|
|
|
|
支持顺序:
|
|
|
|
|
|
|
|
|
|
|
|
- `RPY`
|
|
|
|
|
|
- `RYP`
|
|
|
|
|
|
- `PRY`
|
|
|
|
|
|
- `PYR`
|
|
|
|
|
|
- `YRP`
|
|
|
|
|
|
- `YPR`
|
|
|
|
|
|
|
|
|
|
|
|
## 6. 配置相关
|
|
|
|
|
|
|
|
|
|
|
|
`config.xml` 中与协议相关的关键项:
|
|
|
|
|
|
|
|
|
|
|
|
- `TcpServerConfig.robotServerPort`:本 TCP/IP 协议服务端监听端口,默认 `7800`。
|
|
|
|
|
|
- `TcpServerConfig.poseOutputOrder`:TCP 和 Modbus 姿态输出顺序。
|
2026-10-01 21:26:34 +08:00
|
|
|
|
- `AlgorithmParams/RotorCoreParam/WorkpieceSizes.defaultIndex`:默认工件尺寸序号。
|
|
|
|
|
|
- `WorkpieceSizes/Workpiece`:每项包含 `index`、`radius`、`height`;尺寸单位 mm,必须为有限正数,界面上限为 `1000000`。
|
|
|
|
|
|
|
|
|
|
|
|
配置示例(第二项为示例尺寸,请按实际工件填写):
|
|
|
|
|
|
|
|
|
|
|
|
```xml
|
|
|
|
|
|
<WorkpieceSizes defaultIndex="1">
|
|
|
|
|
|
<Workpiece index="1" radius="45.0" height="20.0"/>
|
|
|
|
|
|
<Workpiece index="2" radius="60.0" height="70.0"/>
|
|
|
|
|
|
</WorkpieceSizes>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
旧配置没有 `WorkpieceSizes` 时,将原 `RotorCoreParam.radius/height` 迁移为 1 号工件。
|
|
|
|
|
|
隔板长宽、分层系数、边距系数和地面去除偏置仍是公共转子参数。
|
2026-08-04 14:23:07 +08:00
|
|
|
|
|
|
|
|
|
|
## 7. Modbus TCP 对接
|
|
|
|
|
|
|
|
|
|
|
|
除本 TCP/IP 服务端协议外,项目还支持 Modbus TCP Server 对接:
|
|
|
|
|
|
|
|
|
|
|
|
- 应用只作为 Modbus TCP Server/从设备。
|
|
|
|
|
|
- 客户 PLC/上位机作为 Modbus TCP Client,写触发寄存器并读取状态和结果。
|
|
|
|
|
|
- Modbus TCP Server 端口固定为应用内 `5020`;现场需要标准 `502` 时由系统映射到 `5020`。
|
|
|
|
|
|
- `robotServerPort` 不控制 Modbus 端口,只控制本 TCP/IP 文本协议端口。
|
|
|
|
|
|
|
2026-10-01 21:26:34 +08:00
|
|
|
|
寄存器地址配置和结果格式详见 `工件定位ModbusTCP协议.md`。
|