diff --git a/zh-cn/hardware_vision_scheduling.md b/zh-cn/hardware_vision_scheduling.md index 18aff23..8258c38 100644 --- a/zh-cn/hardware_vision_scheduling.md +++ b/zh-cn/hardware_vision_scheduling.md @@ -27,7 +27,6 @@ sequenceDiagram participant 调度车 participant 上位机Go participant 下位机PLC - participant 视觉算法C# box rgb(173, 216, 230) 硬件调度系统 participant 调度车 @@ -36,50 +35,52 @@ sequenceDiagram participant 上位机Go participant 下位机PLC end - box rgb(152, 251, 152) 算法系统 - participant 视觉算法C# + box rgb(152, 251, 152) 视觉算法系统 + participant 视觉算法 end - - Note over 调度车,视觉算法C#: 系统初始化阶段 + Note over 调度车,视觉算法: 系统初始化阶段 调度车->>上位机Go: 托料完成(M42上升沿) 上位机Go->>上位机Go: 生成WoodID、推送LED面板 - Note over 调度车,视觉算法C#: 视觉定位阶段(对中拍照) + Note over 调度车,视觉算法: 视觉定位阶段(对中拍照) 上位机Go->>下位机PLC: M809触发 + D2130=2630验证 上位机Go->>上位机Go: 打开红外测距仪、等待读数稳定 上位机Go->>下位机PLC: 写入D2152/D2154调整坐标、M119调整拍照位 上位机Go->>下位机PLC: M810就位 → 关闭红外、M130触发坐标调整 上位机Go->>上位机Go: M120就位 → 监控激光传感器读数 - 上位机Go->>视觉算法C#: center_photo_taking(wood_id+左右相机坐标) - 视觉算法C#-->>上位机Go: ACK: center_scanning - 视觉算法C#->>视觉算法C#: 异步拍照+端面中心计算 - 视觉算法C#->>上位机Go: center_photo_result(顶针目标坐标+直径) + 上位机Go->>视觉算法: center_photo_taking(wood_id+左右相机物理拍照坐标) + 视觉算法-->>上位机Go: ACK: center_scanning + 视觉算法->>视觉算法: 异步拍照+端面中心计算 + 视觉算法->>上位机Go: center_photo_result(顶针目标坐标+直径) 上位机Go->>上位机Go: 设置原木直径、触发托料装置升高 上位机Go->>下位机PLC: 写入D2024/D2026/D2028/D2030顶针坐标 上位机Go->>下位机PLC: 写入D2168/D2170轨道目标坐标 上位机Go->>下位机PLC: M49启动顶料 - Note over 调度车,视觉算法C#: 视觉扫描阶段 + Note over 调度车,视觉算法: 视觉扫描阶段 上位机Go->>上位机Go: M50上升沿 + D2130<1600 + D2042>=2300 - 上位机Go->>视觉算法C#: start_vision_algorithm(wood_id) - 视觉算法C#-->>上位机Go: ACK: vision_scanning - 视觉算法C#->>视觉算法C#: 异步启动相机采集 - 视觉算法C#->>上位机Go: capture_ready(status=ready) + 上位机Go->>视觉算法: start_vision_algorithm(wood_id) + 视觉算法-->>上位机Go: ACK: vision_scanning + 视觉算法->>视觉算法: 异步启动相机采集 + 视觉算法->>上位机Go: capture_ready(status=ready) 上位机Go->>下位机PLC: 写入M103启动扫描轨道 上位机Go->>上位机Go: 启动M104监控(等待工单推送触发) 下位机PLC->>下位机PLC: 扫描轨道运行、编码器触发采集 - Note over 调度车,视觉算法C#: 工单推送与算法处理阶段 + Note over 调度车,视觉算法: 工单推送与算法处理阶段 上位机Go->>上位机Go: M104上升沿 + M42=true 上位机Go->>上位机Go: 读取D2134计算原木长度 - 上位机Go->>视觉算法C#: order_info(工单信息+规格+长度) - 视觉算法C#-->>上位机Go: ACK: algorithm_coordinates_run(status=processing) - 视觉算法C#->>视觉算法C#: 停止采集→建模→顶针裁剪→多规格切割优化 - 视觉算法C#->>上位机Go: algorithm_coordinates(切割坐标+旋转角度+材积) - 视觉算法C#->>上位机Go: board_split_yield_result(板材拆分出材率) + 上位机Go->>视觉算法: order_info(工单信息+规格+长度) + 视觉算法-->>上位机Go: ACK: algorithm_coordinates_run(status=processing) + 视觉算法->>视觉算法: 等待帧就绪→停止采集 + 视觉算法->>视觉算法: 配对融合→体素降采样 + 视觉算法->>视觉算法: Y轴归一化→顶针裁剪 + 视觉算法->>视觉算法: 多规格切割算法优化 + 视觉算法->>上位机Go: algorithm_coordinates(切割坐标+旋转角度+材积) + 视觉算法->>上位机Go: board_split_yield_result(板材拆分出材率) - Note over 调度车,视觉算法C#: 旋转与调度执行阶段 - 上位机Go->>上位机Go: 保存视觉数据到数据库+推送LED面板 + Note over 调度车,视觉算法: 旋转与调度执行阶段 + 上位机Go->>上位机Go: 保存视觉数据到数据库+推送出材率等关键信息至LED面板 上位机Go->>下位机PLC: 写入D2038旋转角度 上位机Go->>下位机PLC: M45执行旋转 上位机Go->>下位机PLC: 写入D2136原木直径 @@ -115,7 +116,7 @@ sequenceDiagram - **M104上升沿**: 扫描结束触发,同时验证M42=true - **读取原木长度**: 从D2134寄存器读取长度值,减去315mm得到实际原木长度 - **推送工单信息**: Go发送`order_info`,包含工单规格、副规格、锯路厚度等参数 -- **异步算法处理**: C#端依次执行:停止采集→等待帧就绪→点云融合建模→Y轴归一化→顶针裁剪→多规格切割优化 +- **异步算法处理**: C#端(`ProcessScanAndOptimizeAsync`)依次执行:等待所有相机帧就绪(最多10秒)→停止采集→时间窗口配对转同步帧→多相机融合建模(含体素降采样+Y轴归一化)→顶针裁剪→材积报告→多规格切割优化(含板材拆分择优) - **推送算法结果**: C#推送`algorithm_coordinates`(切割坐标+旋转角度+材积+出材率) - **推送板材拆分**: C#异步推送`board_split_yield_result`(板材拆分出材率) @@ -135,7 +136,8 @@ sequenceDiagram - **顶针裁剪**: 根据扫描方向(left/right)从点云两端裁剪固定长度,移除机械顶针和过渡区点云 - **Y轴归一化**: scan_start="right"时翻转Y轴,确保Y=0始终对应同一物理端 - **寄存器回读验证**: 关键寄存器(D2038角度值、D2024-D2030顶针坐标)写入后立即回读验证 -- **材积基准统一**: TotalVolume使用middle Y截面R计算,与AvailableVolume同源,消除出材率偏高 +- **体素降采样**: 融合后点云超过100万点时自动触发体素网格降采样,加速后续建模与优化计算 +- **材积基准统一**: 出材率由`BoardSplitYieldService.ComputeEffectiveBoardYield`全局统一计算(旋转点云→构建板区间→Z方向木方规划→有效板材木方材积/原木总材积πR²L),结果覆盖`algorithm_coordinates`的AvailableVolume/TotalVolume/YieldRate ## 注意事项 @@ -451,7 +453,7 @@ sequenceDiagram } ``` -> **说明:** `order_info`代表扫描结束,C#收到后立即响应ACK,然后异步执行:停止采集→等待帧就绪→点云融合→建模→顶针裁剪→多规格切割优化→推送结果。 +> **说明:** `order_info`代表扫描结束,C#收到后立即响应ACK,然后异步执行(`ProcessScanAndOptimizeAsync`):等待所有相机帧就绪→停止采集→时间窗口配对转同步帧→多相机融合建模(体素降采样+Y轴归一化)→顶针裁剪→材积报告→多规格切割优化(含板材拆分择优评估)→推送algorithm_coordinates→异步推送board_split_yield_result。 ---