增加硬件视觉时序文档
This commit is contained in:
		| @@ -11,4 +11,6 @@ | ||||
|   * [Ai服务接口列表](zh-cn/ai_service) | ||||
| * **EasyApp接口服务** | ||||
| * **Excel服务模块** | ||||
|   * [导出/导入](zh-cn/excel_output_process) | ||||
|   * [导出/导入](zh-cn/excel_output_process) | ||||
| * **硬件服务模块** | ||||
|   * [硬件视觉时序](zh-cn/hardware_vision_scheduling) | ||||
							
								
								
									
										271
									
								
								zh-cn/hardware_vision_scheduling.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										271
									
								
								zh-cn/hardware_vision_scheduling.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,271 @@ | ||||
| # 硬件视觉调度时序图 | ||||
|  | ||||
| ## 概述 | ||||
|  | ||||
| 本文档描述了硬件视觉调度系统的完整时序流程,展示了从调度车托料完成到最终调度至立锯的全过程。 | ||||
|  | ||||
| ## 时序流程图 | ||||
|  | ||||
| ```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. **并发处理**:系统支持并发处理多个请求,但建议按照时序发送相关请求 | ||||
		Reference in New Issue
	
	Block a user