GrabBag/App/WheelMeasure/Doc/TCP_Protocol.md
2026-03-14 10:00:15 +08:00

132 lines
3.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.

# 轮眉测量 TCP/IP 通信协议
## 概述
- **协议类型**: TCP/IP 文本协议
- **默认端口**: 5000可在配置文件中修改
- **数据格式**: 纯文本UTF-8编码
- **通信模式**: 客户端-服务器模式(视觉系统作为服务器)
## 协议格式
### 1. 触发检测命令(客户端 → 服务器)
```
start,100
```
**格式说明**
- `start`: 命令关键字
- `100`: 参数(当前未使用,保留用于扩展)
**示例**
```
start,100
```
### 2. 检测结果响应(服务器 → 客户端)
#### 成功情况(所有相机检测成功)
```
1,100,200;2,100,200;3,100,200;4,100,200
```
**格式说明**
- 多个相机结果用分号 `;` 分隔
- 每个相机结果格式:`相机ID,中心点到地面距离,轮眉到地面距离`
- `相机ID`: 1-4对应4个相机
- `中心点到地面距离`: 整数单位mm
- `轮眉到地面距离`: 整数单位mm
**示例**
```
1,150,250;2,148,252;3,151,249;4,149,251
```
表示:
- 相机1中心距离150mm轮眉距离250mm
- 相机2中心距离148mm轮眉距离252mm
- 相机3中心距离151mm轮眉距离249mm
- 相机4中心距离149mm轮眉距离251mm
#### 失败情况(部分相机检测失败)
```
1,400;2,100,200;3,100,200;4,100,200
```
**错误码说明**
- `400`: 扫描/匹配失败
- `401`: 工件为空
**格式说明**
- 失败的相机只返回:`相机ID,错误码`
- 成功的相机返回:`相机ID,中心距离,轮眉距离`
**示例**
```
1,400;2,150,250;3,401;4,149,251
```
表示:
- 相机1扫描失败错误码400
- 相机2成功中心距离150mm轮眉距离250mm
- 相机3工件为空错误码401
- 相机4成功中心距离149mm轮眉距离251mm
## 通信流程
```
客户端 服务器(视觉系统)
| |
|-------- start,100 ------------------------>|
| |
| | 触发所有相机顺序检测
| | 相机1 → 相机2 → 相机3 → 相机4
| |
|<------- 1,150,250;2,148,252;... -----------|
| |
```
**时序说明**
1. 客户端发送 `start,100` 命令
2. 服务器收到命令后,依次触发所有启用的相机进行检测
3. 所有相机检测完成后,服务器发送汇总结果
4. 客户端接收结果并处理
## 错误处理
### 连接错误
- 如果TCP连接断开服务器会清除当前客户端的请求状态
- 客户端需要重新连接并发送命令
### 超时处理
- 建议客户端设置接收超时推荐60秒
- 如果超时未收到响应,可以重新发送命令
### 数据解析
- 客户端应验证返回数据格式
- 检查相机ID是否在1-4范围内
- 检查是否包含错误码400/401
## 配置说明
TCP服务器端口可在配置文件中修改
```xml
<ServerList>
<Server>
<Name>TCPServer</Name>
<IP>0.0.0.0</IP>
<Port>5000</Port>
</Server>
</ServerList>
```
## 注意事项
1. **数据单位**所有距离值单位为毫米mm
2. **相机顺序**相机ID固定为1-4对应配置文件中的相机顺序
3. **检测时间**完整检测所有相机通常需要30-50秒请设置合理的超时时间
4. **并发限制**:服务器同时只处理一个检测请求,多个客户端连接时按先后顺序处理
5. **数据精度**:返回的距离值已四舍五入为整数