GrabBag/App/WorkpieceHole/Doc/工件孔检测TCP通信协议.md

305 lines
7.6 KiB
Markdown
Raw 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.

# WorkpieceHole工件孔检测系统 - TCP通信协议
## 版本历史
| 版本 | 日期 | 修改内容 |
|------|------|----------|
| 1.0 | 2026-01-27 | 初始版本,定义基本通信协议 |
---
## 1. 协议概述
本文档定义了上位机与WorkpieceHole工件孔检测系统之间的TCP/IP通信协议。协议采用JSON格式进行数据交换支持扫描请求、结果返回和错误通知。
### 1.1 通信方式
- **传输协议**: TCP/IP
- **数据格式**: JSON
- **端口**: 7800默认
- **编码**: UTF-8
### 1.2 通信模式
- 服务端WorkpieceHole工件孔检测系统
- 客户端:上位机控制系统
## 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": "2026-01-27 10:30:00",
"Data": {
"ScanMode": ""
}
}
```
**Data字段说明**
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| ScanMode | String | 否 | 扫描模式(预留字段) |
### 3.2 扫描响应ScanResponse
工件孔检测系统收到扫描请求后,立即发送此消息确认收到请求。
**消息格式:**
```json
{
"MessageType": "ScanResponse",
"Timestamp": "2026-01-27 10:30:00",
"Data": {
"Status": "Accepted"
}
}
```
**Data字段说明**
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| Status | String | 是 | 请求状态Accepted-已接受 |
### 3.3 扫描结果ScanResult
工件孔检测系统完成检测后,发送此消息返回检测结果。
**消息格式:**
```json
{
"MessageType": "ScanResult",
"Timestamp": "2026-01-27 10:30:01",
"Data": {
"WorkpieceType": 1,
"Holes": [
{"x": 100.50, "y": 200.30, "z": 50.20},
{"x": 150.60, "y": 250.40, "z": 50.25},
{"x": 200.70, "y": 300.50, "z": 50.30},
{"x": 250.80, "y": 350.60, "z": 50.35}
],
"HolesDir": [
{"x": 0.00, "y": 0.00, "z": 1.00},
{"x": 0.00, "y": 0.00, "z": 1.00},
{"x": 0.00, "y": 0.00, "z": 1.00},
{"x": 0.00, "y": 0.00, "z": 1.00}
],
"Center": {"x": 175.50, "y": 275.45, "z": 50.28},
"Y_Dir": {"x": 0.00, "y": 1.00, "z": 0.00},
"Z_Dir": {"x": 0.00, "y": 0.00, "z": 1.00}
}
}
```
**Data字段说明**
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| WorkpieceType | Integer | 是 | 工件类型标识 |
| Holes | Array | 是 | 孔位置列表,每个元素包含 x, y, z 坐标 |
| HolesDir | Array | 是 | 孔方向列表,每个元素包含 x, y, z 方向向量 |
| Center | Object | 是 | 工件中心点坐标 |
| Y_Dir | Object | 是 | 工件Y方向向量 |
| Z_Dir | Object | 是 | 工件Z方向向量 |
**孔位置格式Holes数组元素**
```json
{
"x": 100.50, // X坐标毫米
"y": 200.30, // Y坐标毫米
"z": 50.20 // Z坐标毫米
}
```
**孔方向格式HolesDir数组元素**
```json
{
"x": 0.00, // X方向分量
"y": 0.00, // Y方向分量
"z": 1.00 // Z方向分量单位向量
}
```
**中心点格式Center**
```json
{
"x": 175.50, // 中心点X坐标毫米
"y": 275.45, // 中心点Y坐标毫米
"z": 50.28 // 中心点Z坐标毫米
}
```
**方向向量格式Y_Dir / Z_Dir**
```json
{
"x": 0.00, // X方向分量
"y": 1.00, // Y方向分量
"z": 0.00 // Z方向分量单位向量
}
```
**坐标说明:**
- 所有坐标均为机械臂坐标系下的3D坐标
- 单位毫米mm
- 方向向量为单位向量
### 3.4 错误响应Error
当系统发生错误时,发送此消息通知上位机。
**消息格式:**
```json
{
"MessageType": "Error",
"Timestamp": "2026-01-27 10:30:00",
"Data": {
"ErrorCode": -3,
"ErrorMessage": "未知消息类型: InvalidType"
}
}
```
**Data字段说明**
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| ErrorCode | Integer | 是 | 错误码 |
| ErrorMessage | String | 是 | 错误描述信息 |
## 4. 通信流程
### 4.1 正常检测流程
```
上位机 工件孔检测系统
| |
|-------- ScanRequest ------------>|
| |
|<------ ScanResponse -------------|
| |
| | (执行检测)
| |
|<------- ScanResult --------------|
| |
```
### 4.2 错误处理流程
```
上位机 工件孔检测系统
| |
|-------- ScanRequest ------------>|
| |
| | (检测失败)
| |
|<--------- Error -----------------|
| |
```
## 5. 示例
### 5.1 完整交互示例
**步骤1上位机发送扫描请求**
```json
{
"MessageType": "ScanRequest",
"Timestamp": "2026-01-27 10:30:00",
"Data": {}
}
```
**步骤2系统返回确认响应**
```json
{
"MessageType": "ScanResponse",
"Timestamp": "2026-01-27 10:30:00",
"Data": {
"Status": "Accepted"
}
}
```
**步骤3系统返回检测结果**
```json
{
"MessageType": "ScanResult",
"Timestamp": "2026-01-27 10:30:02",
"Data": {
"WorkpieceType": 1,
"Holes": [
{"x": 120.50, "y": 180.30, "z": 45.20},
{"x": 180.60, "y": 180.40, "z": 45.25},
{"x": 180.70, "y": 240.50, "z": 45.30},
{"x": 120.80, "y": 240.60, "z": 45.35}
],
"HolesDir": [
{"x": 0.00, "y": 0.00, "z": 1.00},
{"x": 0.00, "y": 0.00, "z": 1.00},
{"x": 0.00, "y": 0.00, "z": 1.00},
{"x": 0.00, "y": 0.00, "z": 1.00}
],
"Center": {"x": 150.65, "y": 210.45, "z": 45.28},
"Y_Dir": {"x": 0.00, "y": 1.00, "z": 0.00},
"Z_Dir": {"x": 0.00, "y": 0.00, "z": 1.00}
}
}
```
## 6. 注意事项
1. **连接管理**
- 客户端应实现断线重连机制
- 建议使用心跳机制保持连接活跃
2. **数据解析**
- 所有JSON数据必须使用UTF-8编码
- 接收数据时应处理粘包和分包情况
3. **错误处理**
- 客户端应正确处理所有错误码
- 网络异常时应有重试机制
4. **性能考虑**
- 单次检测时间约为500ms-2s
- 建议客户端设置合理的超时时间建议10秒
5. **数据精度**
- 坐标精度小数点后2位毫米
- 方向向量为单位向量