更新时序图

This commit is contained in:
2026-06-30 08:32:15 +08:00
parent 877b95bb34
commit 8e18e4c1cd
+28 -26
View File
@@ -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
---