11 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			11 KiB
		
	
	
	
	
	
	
	
硬件视觉调度时序图
概述
本文档描述了硬件视觉调度系统的完整时序流程,展示了从调度车托料完成到最终调度至立锯的全过程。
时序流程图
flowchart TB
    %% 初始阶段
    A[调度车托料完成]
    
    %% 视觉定位阶段
    A --> B[上位机发送取中拍照指令]
    B --> B1[侧面相机计算对中坐标]
    B1 --> C[等待中心坐标结果]
    C --> D[写入下位机顶中坐标<br/>顶针对中顶料]
    
    %% 物理定位阶段
    D --> E[顶料至预定位置<br/>上位机发送扫描指令至下位机]
    
    %% 并行分支:三方同时执行
    E --> F[上位机等待扫描完成指令<br/>下位机扫描完成]
    E --> G[下位机硬触发视觉相机扫描动作]
    E --> G1[发送原木长度与顶针至原木端面预留长度至视觉算法<br/>推送工单信息: 规格\等级...]
    
    %% 视觉算法处理
    G --> G2[视觉算法]
    G1 --> G2
    G2 --> H[等待视觉算法结果]
    
    %% 算法结果分支
    H --> H1[建模完成]
    H --> H2[算法完成]
    
    %% 四路汇聚
    F --> I[返回视觉算法数据<br/>写入下位机算法旋转角度]
    G --> I
    H1 --> I
    H2 --> I
    
    %% 后续流程
    I --> J[下位机执行旋转完成切割角度旋转]
    J --> K[调度车取料<br/>写入算法规划图]
    K --> L[下发调度指令<br/>调度至立锯]
    
    %% 超时重试机制(非主流程)
    C -.->|超时| C_retry[超时重试]
    C_retry -.-> C
    
    E -.->|超时| E_retry[超时重试]
    E_retry -.-> E
    
    F -.->|超时| F_retry[超时重试]
    F_retry -.-> F
    
    H2 -.->|超时| H_retry[超时重试]
    H_retry -.-> H
流程说明
1. 初始阶段
- 调度车托料完成: 系统开始进入视觉调度流程
 
2. 视觉定位阶段
- 上位机发送取中拍照指令: 启动视觉系统进行中心定位
 - 等待中心坐标结果: 等待视觉算法处理结果,支持超时重试机制
 
3. 物理定位阶段
- 写入下位机顶中坐标并顶料至线扫位置: 将获取的中心坐标传递给下位机,同时执行物理定位
 
4. 视觉扫描阶段
- 视觉扫描到达线扫速度并发送扫描指令: 系统准备进行线扫描并启动扫描流程,支持超时重试
 - 上位机等待扫描完成指令并写入下位机: 等待扫描完成信号并将完成指令传递给下位机,支持超时重试(三方并行执行)
 - 视觉相机硬触发扫描动作: 视觉相机执行硬件触发扫描操作,采集视觉数据(与上位机等待和算法处理并行执行)
 - 等待视觉算法处理: 视觉算法处理扫描数据,支持超时重试(与上位机等待和相机触发并行执行)
 
5. 数据处理与旋转阶段
- 返回视觉数据并写入算法旋转角度: 算法处理完成,返回结果并将旋转角度传递给下位机
 - 下位机执行旋转完成旋转: 执行物理旋转操作直至完成
 
6. 调度执行阶段
- 调度车取料并写入算法规划图: 调度车取走已处理的物料,同时将算法规划结果写入系统
 - 下发调度指令并调度至立锭: 发送调度执行指令并完成最终的调度至立锯操作
 
关键特性
- 超时重试机制: 在关键步骤(中心坐标获取、视觉扫描、扫描完成、视觉算法)设置了超时重试机制,确保系统稳定性
 - 三方并行执行: “上位机等待扫描完成指令”、“视觉相机硬触发扫描动作”和“等待视觉算法”为三方并行执行,提高执行效率
 - 分阶段执行: 整个流程分为视觉定位、物理定位、视觉扫描、旋转调整和调度执行五个主要阶段
 - 算法集成: 深度集成视觉算法,实现自动化的坐标定位和旋转角度计算
 
注意事项
- 每个阶段的执行都依赖于前一阶段的成功完成
 - 超时重试机制需要合理设置重试次数和超时时间
 - 视觉算法的准确性直接影响整个调度流程的效果
 - 上位机与下位机之间的通信稳定性至关重要
 - "上位机等待扫描完成指令"、"视觉相机硬触发扫描动作"和"等待视觉算法"是三方并行执行的,需要做好同步协调
 
TCP请求上位机数据接口
接口概述
硬件视觉调度系统通过TCP协议与上位机进行数据交互,支持多种动作类型的请求处理。
通用请求格式
{
  "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()
请求示例:
{
  "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坐标 | 
响应示例:
{
  "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
请求示例:
{
  "id": "req002",
  "action": "scan_completed",
  "timestamp": 1705123456789
}
说明: 此动作不需要data参数,用于通知系统视觉扫描已完成。系统接收到此请求后会自动将M106寄存器设置为true。
响应示例:
{
  "id": "req002",
  "success": true,
  "data": {
    "message": "视觉扫描完成处理成功",
    "action": "scan_completed",
    "register": "M106=true"
  },
  "timestamp": 1705123456789
}
3. algorithm_coordinates - 算法坐标和旋转角度
功能说明: 用于处理视觉算法计算得出的最终坐标和旋转角度,将这些数据传递给下位机进行物理旋转操作。
调用方法: s.hardwareController.ProcessVisionScanCoordinate()
参数处理: 将坐标数据构建为[4]float32数组,旋转角度转换为float32
请求示例:
{
  "id": "req003",
  "action": "algorithm_coordinates",
  "data": {
    "left": [120.5, 120.5, 86.12],
    "right": [160.8, 124.5, 17.2],
    "rotation_angle": 15.5
  },
  "timestamp": 1705123456789
}
data参数说明:
| 参数 | 类型 | 必填 | 说明 | 
|---|---|---|---|
| left | float64 | 是 | 左侧锯路坐标 | 
| right | float64 | 是 | 右侧锯路坐标 | 
| rotation_angle | float64 | 是 | 旋转角度(度) | 
响应示例:
{
  "id": "req003",
  "success": true,
  "data": {
    "message": "视觉算法坐标处理成功",
    "coordinates": {
      "left": [120.5,32.4],
      "right": [160.8,12]
    },
    "rotation_angle": 15.5
  },
  "timestamp": 1705123456789
}
4. center_photo_taking - 视觉取中拍照命令下发
功能说明: 用于下发视觉取中拍照命令,指定需要拍照的原木ID,触发视觉系统进行中心定位拍照操作。
请求示例:
{
  "id": "",
  "action": "center_photo_taking",
  "data": {
    "left": {
      "x": 55050,
      "y": 32849,
      "z": 0
    },
    "right": {
      "x": 55050,
      "y": 32849,
      "z": 0
    },
    "wood_id": "WOOD_20251103_162602_004_2ace914e"
  },
  "timestamp": 1762158362326
}
data参数说明:
| 参数 | 类型 | 必填 | 说明 | 
|---|---|---|---|
| wood_id | string | 是 | 原木唯一标识ID | 
响应示例:
{
  "id": "",
  "success": true,
  "data": {
    "message": "视觉取中拍照命令下发成功",
    "wood_id": "WOOD_20251102_094718_004_8b369a99"
  },
  "timestamp": 1762048038500
}
5. order_info - 工单信息下发
功能说明: 用于下发工单信息至视觉系统,包含工单编号、规格和原木ID等关键信息,为后续的加工流程提供数据支持。
请求示例:
{
  "id": "",
  "action": "order_info",
  "data": {
    "grade": "等级A",
    "has_bark": true,
    "order_sn": "SO20251101000002",
    "order_spec": "11*12*12",
    "wood_id": "WOOD_20251103_162602_004_2ace914e"
  },
  "timestamp": 1762158534297
}
data参数说明:
| 参数 | 类型 | 必填 | 说明 | 
|---|---|---|---|
| order_sn | string | 是 | 工单编号 | 
| order_spec | string | 是 | 工单规格(格式:厚宽长) | 
| wood_id | string | 是 | 原木唯一标识ID | 
| grade | string | 否 | 原木等级 | 
| has_bark | bool | 否 | 是否有 bark (带树皮) | 
响应示例:
{
  "id": "",
  "success": true,
  "data": {
    "message": "工单信息下发成功",
    "order_sn": "SO20251101000002",
    "order_spec": "11*12*12",
    "wood_id": "WOOD_20251102_094814_007_e5337aa2"
  },
  "timestamp": 1762048153709
}
错误响应格式
当请求处理失败时,系统会返回错误响应:
{
  "id": "req001",
  "success": false,
  "error": "错误描述信息",
  "timestamp": 1705123456789
}
常见错误类型
- 请求解析失败: 
"请求解析失败: invalid JSON format" - 硬件控制器未初始化: 
"硬件控制器未初始化" - 缺少必要数据: 
"缺少坐标数据"或"缺少坐标和角度数据" - 数据格式错误: 
"坐标数据格式错误,需要left_x, left_y, right_x, right_y字段" - 硬件操作失败: 
"写入视觉顶针坐标失败: [specific error]" 
接口使用注意事项
- 数据格式:所有请求必须是有效的JSON格式,系统会自动清理前后空白字符和换行符
 - 坐标精度:坐标值支持float64精度,系统内部会转换为float32处理
 - 硬件控制器:所有涉及硬件操作的接口都需要硬件控制器已正确初始化
 - 请求ID:建议使用唯一的请求ID,便于追踪和调试,系统会在响应中返回相同ID
 - 超时处理:建议客户端设置合理的超时时间,特别是涉及硬件操作的请求
 - 错误处理:客户端应当处理所有可能的错误响应,包括JSON解析错误、硬件操作失败等
 - 日志记录:系统会记录所有请求的处理过程,包括成功和失败情况,方便问题排查
 - 并发处理:系统支持并发处理多个请求,但建议按照时序发送相关请求