GrabBag/App/WeldSeam/Doc/WeldSeam_TCP_Protocol.md

134 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WeldSeam TCP 报文格式
## 1. 通信参数
| 项目 | 值 |
|---|---|
| 角色 | 视觉控制器为服务端,主控软件为客户端 |
| 默认端口 | `7800`,可在参数页面修改 |
| 编码 | UTF-8 文本 |
| 字段分隔符 | `_` |
| 报文结束符 | `\r\n` |
接收端必须按 `\r\n` 组帧,不能假定一次 TCP 接收对应一条完整报文。
## 2. 相机与机械臂对应关系
| 命令 | 用途 |
|---|---|
| `START_SCAN_1` | 启动物理相机 1 扫描 |
| `START_SCAN_3` | 启动物理相机 2 扫描 |
| `GET_RET_1` | 获取物理相机 1 检测得到的机械臂 1 坐标 |
| `GET_RET_2` | 获取物理相机 1 检测得到的机械臂 2 坐标 |
| `GET_RET_3` | 获取物理相机 2 检测得到的机械臂 3 坐标 |
| `GET_RET_4` | 获取物理相机 2 检测得到的机械臂 4 坐标 |
- 配置 1 个机械臂:物理相机 1 对应机械臂 1。
- 配置 2 个机械臂:物理相机 1 对应机械臂 1、2。
- 配置 3 个机械臂:物理相机 1 对应机械臂 1、2,物理相机 2 对应机械臂 3。
- 配置 4 个机械臂:物理相机 1 对应机械臂 1、2,物理相机 2 对应机械臂 3、4。
- 两个物理相机不允许同时扫描。
## 3. 扫描与查询时序
```text
主控软件 WeldSeam视觉控制器
|---- START_SCAN_1\r\n ------------->|
|<--- START_ACK\r\n -------------------|
| 收到确认后移动物理相机 1 |
|---- STOP_SCAN\r\n ------------------>|
|<--- STOP_ACK\r\n --------------------|
| | 自动检测
|<--- RESULT_READY\r\n ----------------|
|---- GET_RET_1\r\n ------------------->|
|<--- RESULT_OK_N_X1_Y1_Z1_...\r\n --| 机械臂 1 坐标
|---- GET_RET_2\r\n ------------------->|
|<--- RESULT_OK_N_X1_Y1_Z1_...\r\n --| 机械臂 2 坐标
```
视觉只负责采集和检测,不负责相机或机械臂运动控制。未收到 `START_ACK` 前,主控不得开始移动相机。
## 4. 请求与应答
### 4.1 开始动态扫描
```text
START_SCAN_1\r\n
START_SCAN_3\r\n
START_ACK\r\n
```
只允许使用 `START_SCAN_1` 和 `START_SCAN_3`:前者启动物理相机 1,后者启动物理相机 2。`START_SCAN_3` 仅在已配置物理相机 2 时有效。
### 4.2 停止扫描并自动计算
```text
STOP_SCAN\r\n
STOP_ACK\r\n
```
`STOP_ACK` 表示采集已停止且检测任务已开始,不表示检测已经完成。检测结束后,视觉控制器主动发送:
```text
RESULT_READY\r\n
```
`RESULT_READY` 只表示本次检测已经结束。主控收到该通知后,应通过 `GET_RET_n` 获取检测结果;检测是否成功以查询应答为准。
### 4.3 查询机械臂结果
```text
GET_RET_n\r\n
```
`n` 为已配置的机械臂编号 `1..4`,具体对应关系见第 2 节。
| 应答 | 含义 |
|---|---|
| `RESULT_PENDING` | 正在扫描或计算,结果尚未就绪 |
| `RESULT_EMPTY` | 对应物理相机尚无可用检测结果 |
| `RESULT_NG` | 检测失败、结果无效或手眼矩阵缺失 |
| `RESULT_OK_...` | 手眼转换成功,返回机械臂坐标 |
可以重复查询最近一次检测结果。
### 4.4 成功结果
```text
RESULT_OK_PointNum_X1_Y1_Z1_X2_Y2_Z2_..._Xn_Yn_Zn\r\n
```
示例:
```text
RESULT_OK_3_12.500_20.000_301.250_512.000_20.400_300.900_1012.750_21.100_300.500\r\n
```
- `PointNum` 必须等于后续 XYZ 点数量。
- 坐标单位为 mm,默认保留 3 位小数。
- 坐标系为 `GET_RET_n` 对应机械臂的坐标系。
- 点序固定为焊接行进方向,相邻路径点组成一段直线。
## 5. 错误报文
| 报文 | 含义 |
|---|---|
| `ERROR_UNKNOWN_COMMAND` | 命令无法识别 |
| `ERROR_INVALID_FORMAT` | 命令格式错误 |
| `ERROR_INVALID_CAMERA` | 启动编号不是 1/3、物理相机未配置,或查询的机械臂未配置 |
| `ERROR_BUSY` | 正在扫描或计算 |
| `ERROR_NOT_READY` | 相机未就绪,或当前状态不允许该命令 |
| `ERROR_INTERNAL_ERROR` | 停止采集等内部操作失败 |
## 6. 状态约束
```text
Ready --START_SCAN_1/3--> Scanning --STOP_SCAN--> Detecting --RESULT_READY--> Ready
|
+-- GET_RET_n
```
- `Scanning` 或 `Detecting` 状态收到 `START_SCAN_1/3`,返回 `ERROR_BUSY`。
- 非 `Scanning` 状态收到 `STOP_SCAN`,返回 `ERROR_NOT_READY`;计算期间返回 `ERROR_BUSY`。
- 扫描期间 TCP 断开,本次扫描立即取消;重新连接后必须从扫描起点重新开始。