Files
cnc_wams/web-rtcp-5axis-sim-plan/working/01-rtcp-toolpath-problem-review.md

2.4 KiB
Raw Blame History

01 RTCP 刀具轨迹问题复盘

生成时间2026-06-22

1. 测试来源

专项测试脚本:

qa/web-rtcp-5axis-site-test/capture-toolpath-preview-cases.mjs

专项报告:

qa/web-rtcp-5axis-site-test/output/web-rtcp-5axis-toolpath-preview-report-2026-06-22.docx

原始数据:

qa/web-rtcp-5axis-site-test/output/toolpath-preview-cases.json

2. 失败现象

失败场景:

06-running-rtcp-toolpath

失败前证据:

05-vendored-impeller-toolpath:
threeRtcpState=on
pathPoints=1498
executedPathPoints=1
programSource=linuxcnc-vendored-5axis-gcode
programExecution.summary.switchkinsEventCount=2
switchkinsCodes=M428,M429

失败时证据:

06-running-rtcp-toolpath:
threeRtcpState=off
state.rtcpState=off
state.kinsType=identity
programRuntimeFeedbackSource=linuxcnc-task-motion-hal-wasm

3. 影响

该问题影响 G-code 执行时的刀具轨迹可信度:

1. 预览路径显示程序已经进入 TCP/RTCP 区间。
2. RUN 后 task/HAL 状态把 kinsType 回退到 identity。
3. canvas 上的 TCP/刀轴/RTCP 状态与程序 switchkins 语义不一致。
4. 操作者可能误判当前刀具姿态和五轴 RTCP 执行状态。

4. 根因定位

代码落点:

web-rtcp-5axis-sim-plan/app/src/state/store.js

原逻辑:

const kinsType = kinsTypeFromSwitchkinsTypeValue(state, ui.switchkinsType);

问题:

task/HAL runtime status.ui.switchkinsType=0 时store 直接解析为 identity。
但当前 activeLine 对应的 interpreter/canonical motion 仍处于 M428 后的 TCP 区间。
因此 task/HAL status 覆盖了程序语义。

5. 正确边界

整改原则:

1. 不在可视化层硬编码 RTCP。
2. 不用 JavaScript 重新解释 G-code。
3. 优先消费 LinuxCNC interpreter 已输出的 canonical motion switchkins 信息。
4. task/HAL status 非零 switchkinsType 可直接采用。
5. task/HAL status 为 0 时,必须结合当前 activeLine 的 program motion 判断是否仍在 TCP 区间。

6. 修复目标

目标状态:

预览态:
threeRtcpState=on
state.kinsType=tcp-xyzac

RUN 后:
threeRtcpState=on
state.kinsType=tcp-xyzac
programRuntimeFeedbackSource=linuxcnc-task-motion-hal-wasm

同时,当程序执行到 M429/identity 区间时,仍允许正确回退:

activeLine 对应 motion.switchkinsType=0 -> kinsType=identity, rtcpState=off