Files
docsify-jsonrpc/zh-cn/hardware_vision_scheduling.md
2025-09-21 17:10:24 +08:00

273 lines
8.9 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.

# 硬件视觉调度时序图
## 概述
本文档描述了硬件视觉调度系统的完整时序流程,展示了从调度车托料完成到最终调度至立锯的全过程。
## 时序流程图
```mermaid
flowchart TD
A[调度车托料完成] --> B[上位机发送取中拍照指令]
B --> C[等待中心坐标结果]
C -->|超时| C_retry[超时重试]
C_retry --> C
C --> D[写入下位机顶中坐标<br/>顶针顶料至线扫位置]
D --> E[视觉扫描到达线扫速度<br/>上位机发送视觉扫描指令]
E -->|超时| E_retry[超时重试]
E_retry --> E
E --> F[上位机等待扫描完成指令<br/>写入下位机扫描完成指令]
E --> G[视觉相机硬触发扫描动作]
E --> H[等待视觉算法处理]
F -->|超时| F_retry[超时重试]
F_retry --> F
G --> I[返回视觉数据<br/>写入算法旋转角度]
H -->|超时| H_retry[超时重试]
H_retry --> H
F --> I
H --> I
I --> J[下位机执行旋转完成旋转]
J --> K[调度车取料<br/>写入算法规划图]
K --> L[下发调度指令<br/>调度至立锯]
```
---
## 流程说明
### 1. 初始阶段
- **调度车托料完成**: 系统开始进入视觉调度流程
### 2. 视觉定位阶段
- **上位机发送取中拍照指令**: 启动视觉系统进行中心定位
- **等待中心坐标结果**: 等待视觉算法处理结果,支持超时重试机制
### 3. 物理定位阶段
- **写入下位机顶中坐标并顶料至线扫位置**: 将获取的中心坐标传递给下位机,同时执行物理定位
### 4. 视觉扫描阶段
- **视觉扫描到达线扫速度并发送扫描指令**: 系统准备进行线扫描并启动扫描流程,支持超时重试
- **上位机等待扫描完成指令并写入下位机**: 等待扫描完成信号并将完成指令传递给下位机,支持超时重试(三方并行执行)
- **视觉相机硬触发扫描动作**: 视觉相机执行硬件触发扫描操作,采集视觉数据(与上位机等待和算法处理并行执行)
- **等待视觉算法处理**: 视觉算法处理扫描数据,支持超时重试(与上位机等待和相机触发并行执行)
### 5. 数据处理与旋转阶段
- **返回视觉数据并写入算法旋转角度**: 算法处理完成,返回结果并将旋转角度传递给下位机
- **下位机执行旋转完成旋转**: 执行物理旋转操作直至完成
### 6. 调度执行阶段
- **调度车取料并写入算法规划图**: 调度车取走已处理的物料,同时将算法规划结果写入系统
- **下发调度指令并调度至立锭**: 发送调度执行指令并完成最终的调度至立锯操作
## 关键特性
- **超时重试机制**: 在关键步骤(中心坐标获取、视觉扫描、扫描完成、视觉算法)设置了超时重试机制,确保系统稳定性
- **三方并行执行**: “上位机等待扫描完成指令”、“视觉相机硬触发扫描动作”和“等待视觉算法”为三方并行执行,提高执行效率
- **分阶段执行**: 整个流程分为视觉定位、物理定位、视觉扫描、旋转调整和调度执行五个主要阶段
- **算法集成**: 深度集成视觉算法,实现自动化的坐标定位和旋转角度计算
## 注意事项
1. 每个阶段的执行都依赖于前一阶段的成功完成
2. 超时重试机制需要合理设置重试次数和超时时间
3. 视觉算法的准确性直接影响整个调度流程的效果
4. 上位机与下位机之间的通信稳定性至关重要
5. "上位机等待扫描完成指令"、"视觉相机硬触发扫描动作"和"等待视觉算法"是三方并行执行的,需要做好同步协调
## TCP请求上位机数据接口
### 接口概述
硬件视觉调度系统通过TCP协议与上位机进行数据交互支持多种动作类型的请求处理。
### 通用请求格式
```json
{
"id": "req001",
"action": "test",
"data": {
"message": "hello server",
"param1": "value1"
},
"timestamp": 1705123456789
}
```
#### 请求参数说明
| 参数 | 类型 | 必填 | 说明 |
| ---- | ---- | ---- | ---- |
| id | string | 是 | 请求唯一标识符 |
| action | string | 是 | 动作类型,决定具体的处理逻辑 |
| data | object | 否 | 请求数据根据不同action有不同结构 |
| timestamp | number | 否 | 请求时间戳(毫秒) |
### 支持的动作类型
#### 1. midpoint_coordinate - 视觉写入侧面对中坐标
**功能说明:** 用于将视觉系统获取的原木端面对中坐标写入下位机,为后续的顶针定位操作提供准确的坐标参考。
**调用方法:** `s.hardwareController.WriteVisionPinCoordinate()`
**请求示例:**
```json
{
"id": "req001",
"action": "midpoint_coordinate",
"data": {
"left_x": 100.5,
"left_y": 200.3,
"right_x": 300.7,
"right_y": 150.8
},
"timestamp": 1705123456789
}
```
**data参数说明**
| 参数 | 类型 | 必填 | 说明 |
| ---- | ---- | ---- | ---- |
| left_x | float64 | 是 | 左侧X坐标 |
| left_y | float64 | 是 | 左侧Y坐标 |
| right_x | float64 | 是 | 右侧X坐标 |
| right_y | float64 | 是 | 右侧Y坐标 |
**响应示例:**
```json
{
"id": "req001",
"success": true,
"data": {
"message": "视觉顶针坐标写入成功",
"coordinates": {
"left_x": 100.5,
"left_y": 200.3,
"right_x": 300.7,
"right_y": 150.8
}
},
"timestamp": 1705123456789
}
```
#### 2. scan_completed - 视觉扫描完成
**功能说明:** 用于通知系统视觉扫描已完成触发硬件控制器将M106寄存器设置为true标记扫描流程的完成。
**调用方法:** `s.hardwareController.ProcessVisionScanComplete()`
**寄存器操作:** 将M106寄存器设置为true
**请求示例:**
```json
{
"id": "req002",
"action": "scan_completed",
"timestamp": 1705123456789
}
```
**说明:** 此动作不需要data参数用于通知系统视觉扫描已完成。系统接收到此请求后会自动将M106寄存器设置为true。
**响应示例:**
```json
{
"id": "req002",
"success": true,
"data": {
"message": "视觉扫描完成处理成功",
"action": "scan_completed",
"register": "M106=true"
},
"timestamp": 1705123456789
}
```
#### 3. algorithm_coordinates - 算法坐标和旋转角度
**功能说明:** 用于处理视觉算法计算得出的最终坐标和旋转角度,将这些数据传递给下位机进行物理旋转操作。
**调用方法:** `s.hardwareController.ProcessVisionScanCoordinate()`
**参数处理:** 将坐标数据构建为[4]float32数组旋转角度转换为float32
**请求示例:**
```json
{
"id": "req003",
"action": "algorithm_coordinates",
"data": {
"left_x": 120.5,
"left_y": 180.3,
"right_x": 280.7,
"right_y": 160.8,
"rotation_angle": 15.5
},
"timestamp": 1705123456789
}
```
**data参数说明**
| 参数 | 类型 | 必填 | 说明 |
| ---- | ---- | ---- | ---- |
| left_x | float64 | 是 | 左侧X坐标 |
| left_y | float64 | 是 | 左侧Y坐标 |
| right_x | float64 | 是 | 右侧X坐标 |
| right_y | float64 | 是 | 右侧Y坐标 |
| rotation_angle | float64 | 是 | 旋转角度(度) |
**响应示例:**
```json
{
"id": "req003",
"success": true,
"data": {
"message": "视觉算法坐标处理成功",
"coordinates": {
"left_x": 120.5,
"left_y": 180.3,
"right_x": 280.7,
"right_y": 160.8
},
"rotation_angle": 15.5
},
"timestamp": 1705123456789
}
```
### 错误响应格式
当请求处理失败时,系统会返回错误响应:
```json
{
"id": "req001",
"success": false,
"error": "错误描述信息",
"timestamp": 1705123456789
}
```
#### 常见错误类型
1. **请求解析失败**: `"请求解析失败: invalid JSON format"`
2. **硬件控制器未初始化**: `"硬件控制器未初始化"`
3. **缺少必要数据**: `"缺少坐标数据"``"缺少坐标和角度数据"`
4. **数据格式错误**: `"坐标数据格式错误需要left_x, left_y, right_x, right_y字段"`
5. **硬件操作失败**: `"写入视觉顶针坐标失败: [specific error]"`
### 接口使用注意事项
1. **数据格式**所有请求必须是有效的JSON格式系统会自动清理前后空白字符和换行符
2. **坐标精度**坐标值支持float64精度系统内部会转换为float32处理
3. **硬件控制器**:所有涉及硬件操作的接口都需要硬件控制器已正确初始化
4. **请求ID**建议使用唯一的请求ID便于追踪和调试系统会在响应中返回相同ID
5. **超时处理**:建议客户端设置合理的超时时间,特别是涉及硬件操作的请求
6. **错误处理**客户端应当处理所有可能的错误响应包括JSON解析错误、硬件操作失败等
7. **日志记录**:系统会记录所有请求的处理过程,包括成功和失败情况,方便问题排查
8. **并发处理**:系统支持并发处理多个请求,但建议按照时序发送相关请求