Files
cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/01-项目功能内容.md
2026-07-02 23:53:51 -04:00

190 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 01-项目功能内容
## 目标
对标 LinuxCNC `xyzbc-trt` 当前运行配置,在 Web 中实现 XYZBC table rotary/tilting 五轴数控系统仿真界面。界面基于 HTML/JavaScript文件和会话持久化基于 OPFSCNC 核心能力通过 `wasm-port` 的 LinuxCNC-derived WASM/SDK 边界提供。
Native 对标基线:
- 后续以 `/home/mes123456/cnc_wams/linuxcnc` 作为 LinuxCNC `xyzbc-trt` 源码与真实执行基线。
- Web 数控仿真界面和逻辑必须根据该路径编译后执行 `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini` 的真实运行结果设计。
- native evidence 采集脚本应通过 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment` 启动/连接 LinuxCNC而不是继续依赖 `/home/mes123456/linuxcnc-master`
- `/home/mes123456/cnc_wams/linuxcnc` 已完成 run-in-place 编译,并已验证 `scripts/rip-environment``scripts/linuxcnc``bin/axis``bin/xyzbc-trt-gui``bin/milltask``bin/linuxcncsvr``bin/halui``rtlib/xyzbc-trt-kins.so``rtlib/tpmod.so``lib/python/linuxcnc.so` 存在可用。后续可以基于该路径重新生成真实 native JSON。
完全对标要求:
- `working` 下的设计、任务和验收必须逐项覆盖 `doc/xyzbc-trt-runtime-files.md` 中记录的运行进程、启动顺序、INI 配置、AXIS 界面行为、PyVCP、POSTGUI HAL、basic_sim、Vismach、switchkins/remap、G-code 子程序、tool table、parameter file、kinematics HAL pins、轴/关节限制和 JSON 执行证据。
- Web 不只展示五轴场景,还必须具备与 LinuxCNC 配置等价的运行状态、按钮行为、文件 staging、HAL/task 反馈、刀具预览路径、刀具执行路径和 native/Web JSON 对比闭环。
- 无法在浏览器中一比一复用的 LinuxCNC 桌面组件,例如 AXIS/Tk/PyVCP/Vismach 窗口,必须在 Web 中提供同语义等效实现,并在 evidence JSON 中说明替代边界。
## 对标文件
主对标文档:
```text
web-rtcp-5axis-xyzbc-trt-sim-plan/doc/xyzbc-trt-runtime-files.md
```
LinuxCNC 目标配置:
```text
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml
configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/xyzbc_switchkins_sub.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/centering.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_bc.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var
lib/hallib/basic_sim.tcl
src/hal/user_comps/vismach/xyzbc-trt-gui.py
src/emc/usr_intf/axis/scripts/axis.py
src/emc/kinematics/xyzbc-trt-kins.c
```
## 功能清单
| 功能 | Web 实现方式 | 当前状态 |
| --- | --- | --- |
| XYZBC 机型默认进入 | `app/src/state/store.js` 默认 profile 为 `xyzbc-trt` | 已落地 |
| INI 配置解析 | `linuxcnc-ini-runtime.js` 解析 vendored `xyzbc-trt.ini` | 已落地 |
| PyVCP switchkins 面板 | `xyzbc-trt` profile 复用并改写 PyVCP schema`IDENTITY``TCP:XYZBC``userk``vismach-clear` | 已落地 |
| M428/M429/M430 remap | profile 映射 remap 文件和 switchkins typeWASM interp/remap 由 `wasm-port` 支撑 | 已完成Web evidence 覆盖 remap staging、switchkins transitions 和 Ngcgui/remap 子程序执行 |
| `motion.switchkins-type` | profile 描述 `motion.analog-out-03 => motion.switchkins-type` | 已落地 |
| XYZBC kinematics | `wasm-port/runtime/sdk/src/linuxcnc-kinematics.js` 支持 `xyzbc-trt``linuxcnc_xyzbc_trt_kinematics.wasm` | 已完成WASM artifact 可用并通过 Web/runtime evidence |
| Vismach 等效三维仿真 | Web canvas/Three 风格五轴场景替代 Python Vismach GUI显示机床参考、刀路、TCP、刀轴 | 参考 app 已移植 |
| OPFS 机器文件 staging | `web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/...` | 已落地 |
| Tool table | `xyzbc-trt.tbl` staged 并进入 Web tool DB 仿真 | 已落地 |
| Parameter file | INI 指向 `xyzbc.var`;已从真实运行树导入 `wasm-port/vendor` 并加入 manifest | 已落地 |
| 默认程序 | `xyzbc_switchkins.ngc` 作为 `xyzbc-trt` 默认程序 | 已落地 |
| task/HAL runtime | `linuxcnc-task-hal-runtime.js` 连接 `wasm-port` task/HAL SDK | 已完成Web execution path 由 task/HAL WASM 反馈采集 |
| 刀具预览路径 JSON | native 与 Web 在预览阶段输出统一结构的 `previewPath` 曲线采样 | 已完成native/Web 均为 50ms 采样并进入 compare |
| 刀具执行路径 JSON | native 与 Web 在真实执行阶段输出统一结构的 `executionPath` 曲线采样 | 已完成native/Web 均为 50ms 采样并进入 compare |
| 预览/执行路径对比 | `compare-xyzbc-trt-evidence.json``previewPath``executionPath` 逐点/误差统计比对 | 已完成compare 输出 preview/execution 误差统计和缺样本清单 |
| AXIS 主界面等效 | Web 首屏必须是可操作 CNC 仿真界面包含程序、坐标、状态、override、工具、MDI/switchkins 控制 | 已完成browser smoke 与 Web evidence `axisMainUi.ready=true` |
| POSTGUI HAL 等效 | Web 需复现 `pyvcp.* -> halui.mdi-command-* -> M428/M429/M430` 连接关系 | 已完成Web evidence/compare 覆盖 PyVCP 到 HALUI POSTGUI nets |
| basic_sim 等效 | Web task/HAL runtime 需提供模拟回零、manual toolchange、spindle、joint feedback 基础仿真语义 | 已完成native/Web evidence 均记录 basic_sim 等效反馈 |
| Vismach 模型等效 | Web 3D 模型需按 `table-x/saddle-y/spindle-z/tilt-b/rotate-c/tool-offset/x-offset/z-offset` 驱动 | 已完成Web 3D 模型由 Vismach 等效 pin 驱动并通过 browser smoke |
| Ngcgui 子程序 | Web 需 stage 并可运行 `xyzbc_switchkins_sub.ngc``centering.ngc``helix_bc.ngc` | 已完成Web evidence 通过 WASM machine-file wrapper 执行全集 |
| 演示程序全集 | Web 需 stage `xyzbc_switchkins.ngc``boat-xyzbc.ngc`,默认打开前者 | 已完成staging/profile/evidence 覆盖两个演示程序 |
| 速度/限制/坐标显示 | Web 需对标 `GEOMETRY/JOG_AXES/POSITION_FEEDBACK/MAX_*`、TRAJ 和 AXIS/JOINT 限制 | 已完成Web evidence 覆盖 TRAJ/AXIS/JOINT 限制和 UI 状态 |
| Kinematics HAL pins | Web 需 expose/record `x-offset/z-offset/tool-offset/rot-point/conventional-directions` | 已完成native/Web evidence 覆盖 kinematics pins |
## 刀具预览与执行路径 JSON 要求
目标:把 LinuxCNC 真实系统和 Web 仿真系统中的刀具预览路径、刀具执行路径都写入 evidence JSON并在 compare JSON 中做同周期曲线比对。
统一采样规则:
- 对比采样周期暂定为 `samplePeriodMs = 50`,即 20 Hz。
- native 和 Web 可以保留各自原始采样,但写入 `previewPath.samples``executionPath.samples` 前必须重采样到同一个周期。
- 两侧样本必须使用相同的 `sampleIndex``timeMs` 序列,方便逐点比较。
- 曲线开始点以程序开始执行或预览路径第一段有效运动为 `timeMs = 0`
- 对于 `G0/G1/G2/G3` 等不同插补段JSON 中必须记录 `motionType`,用于区分快移、直线、圆弧和 remap/switchkins 前后的路径段。
native/Web evidence JSON 中都应增加:
```json
{
"pathSampling": {
"samplePeriodMs": 50,
"timeBase": "program-relative-ms",
"resampling": "linear-position-slerp-or-axis-linear",
"coordinateSystem": "machine-xyzbc-and-tcp"
},
"previewPath": {
"source": "linuxcnc-preview-or-web-preview",
"sampleCount": 0,
"samples": []
},
"executionPath": {
"source": "linuxcnc-stat-or-web-task-hal",
"sampleCount": 0,
"samples": []
}
}
```
每个 sample 至少包含:
```json
{
"sampleIndex": 0,
"timeMs": 0,
"line": 0,
"motionType": "G0|G1|G2|G3|remap|unknown",
"activeKinematics": "identity|xyzbc-tcp|userk|unknown",
"tool": {
"id": 0,
"length": 0,
"diameter": 0
},
"joint": {
"x": 0,
"y": 0,
"z": 0,
"b": 0,
"c": 0
},
"tcp": {
"x": 0,
"y": 0,
"z": 0
},
"toolAxis": {
"i": 0,
"j": 0,
"k": 1
},
"feed": 0,
"spindle": 0
}
```
compare JSON 应增加 `pathComparison`
- `previewVsPreview`native 预览路径与 Web 预览路径对比。
- `executionVsExecution`native 执行路径与 Web 执行路径对比。
- `previewVsExecutionNative`LinuxCNC 预览与真实执行之间的偏差。
- `previewVsExecutionWeb`Web 预览与 Web 执行之间的偏差。
- 误差统计至少包含 `maxTcpErrorMm``rmsTcpErrorMm``maxJointError``rmsJointError``maxToolAxisAngleDeg``sampleCountDelta``missingSamples`
## WASM 是否满足
结论:`wasm-port` 已经具备满足 `xyzbc-trt` Web 仿真的主要语义边界;当前目标 app 的 `dist/wasm-port/build/wasm` 已包含 kinematics/core/tp/task-hal 所需 artifactWeb evidence 不再以缺 artifact 作为 blocker。
已具备的证据:
- `wasm-port/runtime/sdk/src/linuxcnc-kinematics.js` 注册 `xyzbc-trt`,目标文件为 `linuxcnc_xyzbc_trt_kinematics.wasm`
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_xyzbc_trt_kinematics_probe.cpp` 覆盖 `xyzbc-trt-kins` forward/inverse/switchkins。
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_5axis_remap_execute_harness.cpp` 包含 `xyzbc-trt.ini``xyzbc_switchkins.ngc``boat-xyzbc.ngc` 执行路径。
- `wasm-port/docs/compatibility-validation.md` 记录 `xyzbc-trt` kinematics、remap、browser interp 覆盖。
- 当前 app build 已把 kinematics/core/tp/task-hal `.js/.wasm` artifact 打入 `app/dist/wasm-port/build/wasm`
当前闭环状态:
- `npm run smoke:node``npm run evidence:web``npm run evidence:compare``npm run build``npm run smoke:browser` 已通过。
- `web-xyzbc-trt-evidence.json.wasm.missing=[]`compare 摘要为 `checkCount=29/passCount=29/failCount=0/blockers=[]`
## Native/Web JSON 对比结论
证据文件:
```text
working/evidence/native-xyzbc-trt-evidence.json
working/evidence/web-xyzbc-trt-evidence.json
working/evidence/compare-xyzbc-trt-evidence.json
```
当前结果:
- native `xyzbc-trt` 通过 LinuxCNC Python API 真实执行并采集 `previewPath``executionPath`、状态流、basic_sim 等效反馈。
- Web 侧已完成 profile、INI、OPFS staging、PyVCP XML、remap、tool table、parameter file、默认程序、AXIS 首屏、Vismach pin 驱动模型、Ngcgui 执行和 task/HAL execution path 覆盖。
- 对比 35 项检查全部通过,`compare.summary.blockers=[]`
- native/Web 刀具预览路径和执行路径均使用 `samplePeriodMs=50`compare 已输出 preview/execution 路径误差统计。