GrabBag/App/Workpiece/Doc/上位机和3D相机控制器TCP通信协议.md

249 lines
6.3 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.

# Workpiece工件检测系统 - TCP通信协议
## 版本历史
| 版本 | 日期 | 修改内容 |
|------|------|----------|
| 1.0 | 2025-12-14 | 初始版本,定义基本通信协议 |
---
## 1. 协议概述
本文档定义了上位机与Workpiece工件检测系统之间的TCP/IP通信协议。协议采用JSON格式进行数据交换支持扫描请求、结果返回和错误通知。
### 1.1 通信方式
- **传输协议**: TCP/IP
- **数据格式**: JSON
- **端口**: 7800默认
- **编码**: UTF-8
### 1.2 通信模式
- 服务端Workpiece工件检测系统
- 客户端:上位机控制系统
## 2. 协议格式
所有消息均采用统一的JSON格式
```json
{
"MessageType": "消息类型标识",
"Timestamp": "时间戳",
"Data": {
// 数据内容
}
}
```
### 2.1 字段说明
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| MessageType | String | 是 | 消息类型标识,见下表 |
| Timestamp | String | 是 | 时间戳格式yyyy-MM-dd HH:mm:ss |
| Data | Object | 是 | 消息数据内容根据MessageType不同而不同 |
### 2.2 消息类型MessageType
| 类型值 | 方向 | 说明 |
|--------|------|------|
| ScanRequest | 上位机→相机 | 上位机请求开始扫描 |
| ScanResponse | 相机→上位机 | 相机响应扫描请求(确认收到) |
| ScanResult | 相机→上位机 | 相机发送扫描结果数据 |
| Error | 相机→上位机 | 错误信息通知 |
## 3. 消息定义
### 3.1 扫描请求ScanRequest
上位机点击扫描指令时,发送此消息到工件检测系统。
**消息格式:**
```json
{
"MessageType": "ScanRequest",
"Timestamp": "2025-12-14 17:10:25",
"Data": {
"ScanMode": ""
}
}
```
**Data字段说明**
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| ScanMode | String | 否 | 扫描模式(预留字段) |
### 3.2 扫描响应ScanResponse
工件检测系统收到扫描请求后,立即发送此消息确认收到请求。
**消息格式:**
```json
{
"MessageType": "ScanResponse",
"Timestamp": "2025-12-14 17:10:25",
"Data": {
"Status": "Accepted"
}
}
```
**Data字段说明**
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| Status | String | 是 | 请求状态Accepted-已接受 |
### 3.3 扫描结果ScanResult
工件检测系统完成检测后,发送此消息返回检测结果。
**消息格式:**
```json
{
"MessageType": "ScanResult",
"Timestamp": "2025-12-14 17:10:26",
"Data": {
"WorkpieceType": 1,
"1": {
"P1": [100.50, 200.30, 50.20],
"P2": [100.60, 250.40, 50.25],
"P3": [100.70, 300.50, 50.30]
},
"2": {
"P1": [150.80, 300.60, 50.35],
"P2": [200.90, 300.70, 50.40],
"P3": [250.10, 300.80, 50.45]
},
"3": {
"P1": [250.20, 300.90, 50.50],
"P2": [250.30, 250.10, 50.55],
"P3": [250.40, 200.20, 50.60]
},
"4": {
"P1": [250.50, 200.30, 50.65],
"P2": [200.60, 200.40, 50.70],
"P3": [150.70, 200.50, 50.75]
},
"Center": [175.50, 250.60, 50.80],
"Lengths": {
"len_A1": 123.45,
"len_A2": 234.56,
"len_B1": 345.67,
"len_B2": 456.78
}
}
}
```
**Data字段说明**
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| WorkpieceType | Integer | 是 | 工件类型1/2/3/4等 |
| 1 | Object | 是 | 边1角点组3个点 |
| 2 | Object | 是 | 边2角点组3个点 |
| 3 | Object | 是 | 边3角点组3个点 |
| 4 | Object | 是 | 边4角点组3个点 |
| Center | Array | 是 | 工件中心点坐标 [x, y, z] |
| Lengths | Object | 是 | 四个方向的长度信息 |
**角点组格式:**
每个角点组1/2/3/4包含3个点格式为
```json
{
"P1": [x, y, z],
"P2": [x, y, z],
"P3": [x, y, z]
}
```
**长度信息格式:**
```json
{
"len_A1": 123.45, // A1长度从工件中心135度方向
"len_A2": 234.56, // A2长度从工件中心225度方向
"len_B1": 345.67, // B1长度从工件中心45度方向
"len_B2": 456.78 // B2长度从工件中心315度方向
}
```
**坐标说明:**
- 所有坐标均为机械臂坐标系下的3D坐标
- 单位毫米mm
- 格式:[x, y, z]
### 3.4 错误响应Error
当系统发生错误时,发送此消息通知上位机。
**消息格式:**
```json
{
"MessageType": "Error",
"Timestamp": "2025-12-14 17:10:25",
"Data": {
"ErrorCode": -3,
"ErrorMessage": "未知消息类型: InvalidType"
}
}
```
**Data字段说明**
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| ErrorCode | Integer | 是 | 错误码 |
| ErrorMessage | String | 是 | 错误描述信息 |
## 4. 通信流程
### 4.1 正常检测流程
```
上位机 工件检测系统
| |
|-------- ScanRequest ------------>|
| |
|<------ ScanResponse -------------|
| |
| | (执行检测)
| |
|<------- ScanResult --------------|
| |
```
### 4.2 错误处理流程
```
上位机 工件检测系统
| |
|-------- ScanRequest ------------>|
| |
| | (检测失败)
| |
|<--------- Error -----------------|
| |
```
## 5. 注意事项
1. **连接管理**
- 客户端应实现断线重连机制
- 建议使用心跳机制保持连接活跃
2. **数据解析**
- 所有JSON数据必须使用UTF-8编码
- 接收数据时应处理粘包和分包情况
3. **错误处理**
- 客户端应正确处理所有错误码
- 网络异常时应有重试机制
4. **性能考虑**
- 单次检测时间约为500ms-2s
- 建议客户端设置合理的超时时间建议10秒