接上一轮,按接续文件继续执行

结论:Three.js 程序预览和刀具执行显示已收口,公网 HTTP/IP 下 Save/Restore Session 已支持 memory-fallback 降级并通过 node/browser gate。
This commit is contained in:
2026-06-22 06:56:34 +08:00
parent bd11a5f8d6
commit 8321055934
9 changed files with 631 additions and 221 deletions

View File

@@ -1,40 +1,91 @@
wasm-port/docs/porting-steps-standalone.md 的 Phase 9/10 继续推进,并直接补上第一批独立 kinematics WASM ABI。
做全量 kinematics ABI
需要完善的内容,做个备忘
按 web-rtcp-5axis-sim-plan/docs/native-task-hal-sync-implementation-steps.md 的边界要求,本次只处理 Web Three.js 可视化层,不改 LinuxCNC task/HAL runtime 语义。
完成内容:
新增独立 kinematics WASM C ABI[linuxcnc_kinematics_wasm.c](/home/cnc/桌面/cnc_wams/wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_kinematics_wasm.c)
Three.js 三维显示区改为 toolpath-only删除画布内地板、网格、坐标轴、机床包络、转台、刀具实体只保留刀具预览路径线。
新增构建脚本:[build_kinematics_wasm.sh](/home/cnc/桌面/cnc_wams/wasm-port/tools/build_kinematics_wasm.sh)
补齐 Three.js 相机交互:
- 鼠标左键/单指拖动:旋转
- 鼠标中键、右键或 Shift+拖动:平移
- 鼠标滚轮:缩放
- 双指:缩放并平移
- X/Y/Z/Fit 按钮:预设视角/复位视角
新增 SDK[linuxcnc-kinematics.js](/home/cnc/桌面/cnc_wams/wasm-port/runtime/sdk/src/linuxcnc-kinematics.js)
并从 [index.js](/home/cnc/桌面/cnc_wams/wasm-port/runtime/sdk/src/index.js) 导出
新增 Node/WASM smoke[verify_kinematics_wasm.sh](/home/cnc/桌面/cnc_wams/wasm-port/tests/wasm/node/verify_kinematics_wasm.sh)
[verify_kinematics_wasm.mjs](/home/cnc/桌面/cnc_wams/wasm-port/tests/wasm/node/verify_kinematics_wasm.mjs)
边界说明:
这次没有提升 nativeTaskReady/nativeHalSyncReady它仍属于 Web simulation UI 显示层调整。task/HAL native/WASM 边界仍需继续按执行文档阶段 0-8 推进。
更新文档:[porting-steps-standalone.md](/home/cnc/桌面/cnc_wams/wasm-port/docs/porting-steps-standalone.md)
[README.md](/home/cnc/桌面/cnc_wams/wasm-port/runtime/sdk/README.md)
写入新接续文件:[text39.txt](/home/cnc/桌面/cnc_wams/textbak/text39.txt)
继续按 web-rtcp-5axis-sim-plan/docs/native-task-hal-sync-implementation-steps.md 边界推进 Three.js 显示层:程序预览和刀具执行过程已显示在 Three.js 区域。
完成内容:
Three.js 区域现在同时显示:
- 完整程序预览路径:来自 state.programExecution.motion也就是 LinuxCNC interpreter/WASM canonical motion events。
- 已执行路径:优先来自 state.programExecutionTiming.samples也就是 LinuxCNC TP queue runtime timing samples没有 samples 时回退到 canonical motion 端点。
- 当前刀具/TCP 执行标记:来自 state.programRuntimeFeedback.axisPose / task-HAL runtime feedback并显示刀轴方向线。
- 快速移动路径辅助层:从 canonical motion 中的 STRAIGHT_TRAVERSE 提取。
保留功能:
- 鼠标/触控旋转、平移、缩放仍可用。
- X/Y/Z/Fit 预设视角仍可用。
- Clear 会同步清空完整预览路径和已执行路径。
实现文件:
[five-axis-scene.js](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/app/src/visualization/five-axis-scene.js)
[gmoccapy_shell_smoke.html](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html)
新增可观测状态:
canvas.dataset.threeSceneMode=program-preview-and-tool-execution
canvas.dataset.threeProgramPreviewSource=linuxcnc-interpreter-wasm / linuxcnc-machine-file-remap-wasm / fixture-line-playback
canvas.dataset.threePathPoints=完整程序预览点数
canvas.dataset.threeExecutedPathPoints=已执行路径点数
canvas.dataset.threeToolExecutionMarker=true/false
当前生成的独立 kinematics WASM 产物:
linuxcnc_xyzac_trt_kinematics.js
linuxcnc_xyzac_trt_kinematics.wasm
linuxcnc_xyzbc_trt_kinematics.js
linuxcnc_xyzbc_trt_kinematics.wasm
验证已通过:
EMSDK_QUIET=1 source /home/cnc/emsdk/emsdk_env.sh >/dev/null && wasm-port/tests/wasm/node/verify_kinematics_wasm.sh
输出包含:
kinematics_wasm_node_smoke=ok
准确状态现在是xyzac-trt / xyzbc-trt TRT kinematics 独立 WASM ABI 已完成第一批;但不能说 LinuxCNC 所有逆解算法都已完整移植到 WASM。全量 kinematics family 仍需继续逐个按 native probe -> 独立 WASM module -> SDK smoke 的路径补齐。
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh
边界说明:
Three.js 不解析 G-code不手写 LinuxCNC 运动语义;只消费已有 LinuxCNC interpreter canonical motion、TP timing samples、task/HAL runtime feedback。nativeTaskReady/nativeHalSyncReady 的提升仍按执行文档阶段任务另行完成。
我先确认当前程序执行数据从哪里来,以及 LinuxCNC 示例程序在仓库里如何被加载。目标是让 Three.js 区域既能显示完整程序预览路径,也能显示执行中的刀具位置/已执行轨迹,并尽量复用已有 interpreter/task/HAL 输出,不手写新的 CNC 语义。
文档更新会比较小:把 “下一步要做 Worker/store” 改为 “已接线”,把当前边界标为 Web simulation promoted同时仍明确 hardware/realtime kernel/external user-M/tool DB 不支持。历史 M18/M13 记录不改。
公网测试已经跑到一个明确失败点Save Session 在 http://82.156.24.101:8092 下抛出 OPFS is not available in this browser。这类浏览器存储 API 在公网 HTTP/IP 环境不是安全上下文,很多“保存、恢复、暂存机床文件、完整边界审计”都会受影响;我会继续把其余功能用异常隔离方式跑完,确认还有没有独立问题。
代码确认了:会话保存和机床文件暂存都硬依赖 OPFS。公网 HTTP/IP 不满足安全上下文,因此这些功能天然不可用;我会先用降级后的脚本继续测试不依赖 OPFS 的操作功能,再给出完整问题清单。
本轮继续处理公网 HTTP/IP 测试失败点Save Session 在 http://82.156.24.101:8092 下因 OPFS 不可用报错。
完成内容:
- five-axis session runtime 现在会优先使用 OPFS如果当前浏览器没有 navigator.storage.getDirectory则自动使用页面内存会话存储。
- Save Session / Restore Session 返回并记录 storageMode
- opfs安全上下文下的 OPFS 持久化;
- memory-fallback公网 HTTP/IP 等无 OPFS 环境下的页面内存后备;
- memory测试显式注入的内存存储。
- gmoccapy 信息面板 Session 行现在显示 status / storageMode / path避免把 memory-fallback 误认成 OPFS 持久化。
- browser smoke 覆盖默认 Save/Restore 按钮路径,确认无 OPFS 环境不会再抛出 “OPFS is not available in this browser.”。
实现文件:
[five-axis-session.js](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/app/src/runtime/five-axis-session.js)
[store.js](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/app/src/state/store.js)
[gmoccapy-shell.js](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js)
[verify_five_axis_session.mjs](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_five_axis_session.mjs)
[gmoccapy_shell_smoke.html](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html)
验证已通过:
node web-rtcp-5axis-sim-plan/tests/node/verify_five_axis_session.mjs
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh
边界说明:
memory-fallback 只解决公网 HTTP/IP 下“当前页面生命周期内保存/恢复会话”的可用性,不声称提供 OPFS 持久化。机床文件暂存、完整边界审计中仍硬依赖 OPFS 的部分,公网 HTTP/IP 下还需要继续按功能逐项降级或标记 blocked。