GrabBag/App/WheelMeasure/Doc/TCP_Protocol.md

132 lines
3.6 KiB
Markdown
Raw Normal View History

2026-03-14 10:00:15 +08:00
# 轮眉测量 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. **数据精度**:返回的距离值已四舍五入为整数