Files
cnc_wams/web-rtcp-5axis-sim-plan/docs/traceability-matrix.md
wangdequan 626bcfe8e3 继续完成 web-rtcp-5axis-sim-plan
结论:完成 LinuxCNC kinematics WASM ABI 覆盖,并将 web-rtcp-5axis-sim-plan 的 RTCP frame/boundary adapter 接到 xyzac-trt kinematics SDK;Node、build、browser smoke 验证通过。
2026-06-21 16:44:29 +08:00

468 lines
19 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.
# 5 轴数控系统 Web 仿真实现追溯文档
生成时间2026-06-20 CST
## 1. 目的
本文件用于追溯后续实现中的每个主要功能来自哪里、参考了哪些 LinuxCNC 源文件/配置/图片、属于什么边界、如何验证。
追溯原则:
```text
界面形态可参考 LinuxCNC Python GUI
CNC 语义必须来自 LinuxCNC source/WASM/source-derived boundary
浏览器代码只负责 UI、状态编排、文件会话、可视化和调用边界
任何 fixture 或 UI-only 结果不得冒充 LinuxCNC runtime proof。
```
## 2. 总体追溯表
| 功能 | Web 实现位置 | LinuxCNC 参考 | 边界分类 | 验证方式 |
| --- | --- | --- | --- | --- |
| gmoccapy 风格 shell | `app/src/ui/gmoccapy-shell.ts` | `docs/src/gui/images/gmoccapy_5_axis.png`, `configs/sim/gmoccapy/gmoccapy_XYZAC.ini` | UI reference | browser shell smoke |
| 大号 DRO | `app/src/ui/gmoccapy-dro-panel.ts` | gmoccapy 5 axis screenshot, LinuxCNC DRO conventions | UI rendering of runtime state | DOM smoke + state smoke |
| 右侧模式按钮栏 | `app/src/ui/gmoccapy-status-sidebar.ts` | gmoccapy screenshot | UI action dispatch | browser button/action smoke |
| 底部运行控制 | `app/src/ui/gmoccapy-bottom-controls.ts` | gmoccapy/AXIS run controls | UI action dispatch | playback smoke |
| G-code 当前行 | `app/src/ui/gmoccapy-gcode-panel.ts` | AXIS/gmoccapy program display | LinuxCNC output rendering | active-line smoke |
| 上电/急停/复位/模式操作 | `app/src/state/store.js`, `app/src/ui/gmoccapy-shell.js` | gmoccapy/AXIS operator workflow | browser UI runtime fixture | node smoke + browser operator smoke |
| JOG/MDI 操作 | `app/src/state/store.js`, `app/src/ui/gmoccapy-shell.js` | AXIS Manual/MDI workflow | browser UI runtime fixture | node smoke + browser operator smoke |
| G-code 文件加载 | `app/src/ui/gmoccapy-shell.js`, `app/src/state/store.js` | AXIS/gmoccapy open program workflow | file text staging only, not LinuxCNC interpreter proof | node smoke + browser operator smoke |
| 程序执行当前行显示 | `app/src/state/store.js`, `app/src/ui/gmoccapy-shell.js` | AXIS/gmoccapy current line display | fixture line playback until LinuxCNC interpreter is connected | node smoke + browser operator smoke |
| 刀具预览 | `app/src/ui/gmoccapy-shell.js`, `app/src/visualization/five-axis-scene.js` | gmoccapy/vismach tool display | visualization/runtime state display | browser operator smoke |
| 3D 五轴预览 | `app/src/visualization/five-axis-scene.js` | `qtvismach_5axis_gantry.png`, `lib/python/vismach.py` | visualization | canvas nonblank smoke |
| Vismach transform tree | `app/src/visualization/machine-model.ts` | `lib/python/vismach.py`, `src/hal/user_comps/vismach/*.py` | visualization from GUI reference | scene graph smoke |
| `xyzac-trt` profile | `app/src/profiles/xyzac-trt.js` | `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini` | source/config reference | profile boundary node smoke |
| `xyzac-trt` source reference map | `app/src/profiles/source-reference-map.js` | `xyzac-trt.ini`, `xyzac-trt.xml`, `switchkins_postgui.hal`, `xyzac-trt_cmds.hal`, `xyzac-trt-kins.c`, `trtfuncs.c`, `switchkins.c` | profile/source map only, not runtime proof | profile boundary node smoke |
| `xyzbc-trt` profile | `app/src/profiles/xyzbc-trt.ts` | `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini` | source/config reference | profile node smoke |
| SWITCHKINS panel | `app/src/panel-schema/xyzac-trt-pyvcp.js` | `xyzac-trt.xml`, `switchkins_postgui.hal` | UI/HAL binding reference | profile boundary node smoke + browser DOM smoke |
| M428/M429/M430 state | `app/src/profiles/xyzac-trt.js`, `app/src/panel-schema/xyzac-trt-pyvcp.js` | `remap_subs/428remap.ngc`, `429remap.ngc`, `430remap.ngc` | LinuxCNC remap/source reference only until runtime adapter is connected | profile boundary node smoke |
| LinuxCNC boundary adapter | `app/src/runtime/linuxcnc-boundary-adapter.js` | LinuxCNC interpreter/kinematics WASM future adapter point | adapter entrypoint only, runtime not connected | profile boundary node smoke + browser DOM smoke |
| Five-axis kinematics | `core/linuxcnc_kinematics_wasm` | `trtfuncs.c`, `xyzac-trt-kins.c`, `xyzbc-trt-kins.c`, `5axiskins.c` | LinuxCNC source-derived WASM | Node roundtrip smoke |
| RTCP/TCP frame | `app/src/runtime/rtcp-frame.js` | LinuxCNC kinematics output + canonical events | fixture frame plumbing until kinematics WASM is ready | RTCP/store node smoke + browser DOM smoke |
| OPFS session | `app/src/runtime/session-*` | current `wasm-port/runtime/opfs` | host-side persistence | save/restore smoke |
## 3. 源文件追溯清单
### UI 图片
```text
linuxcnc/docs/src/gui/images/gmoccapy_5_axis.png
linuxcnc/docs/src/gui/images/qtvismach_5axis_gantry.png
linuxcnc/docs/src/gui/images/axis.png
linuxcnc/docs/src/gui/images/axis-pyvcp.png
linuxcnc/docs/src/gui/images/qtdragon.png
linuxcnc/docs/src/gui/images/qtdragon_hd.png
```
本项目副本:
```text
assets/reference/linuxcnc-gui/
```
### Python GUI
```text
src/emc/usr_intf/axis/scripts/axis.py
lib/python/vismach.py
src/hal/user_comps/vismach/5axisgui.py
src/hal/user_comps/vismach/xyzac-trt-gui.py
src/hal/user_comps/vismach/xyzbc-trt-gui.py
configs/sim/gmoccapy/gmoccapy_XYZAC.ini
configs/sim/qtvcp_screens/qtdragon/README
```
使用方式:
```text
UI/visualization reference only
```
### 5 轴配置
```text
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
configs/sim/axis/vismach/5axis/bridgemill/5axis.ini
configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.ini
```
### PyVCP/HAL
```text
configs/sim/axis/vismach/5axis/bridgemill/5axis.xml
configs/sim/axis/vismach/5axis/bridgemill/5axis_postgui.hal
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.xml
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-dual-rotary/xyzab-tdr.xml
configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr-postgui.hal
```
### 5 轴运动学源码
```text
src/emc/kinematics/trtfuncs.c
src/emc/kinematics/xyzac-trt-kins.c
src/emc/kinematics/xyzbc-trt-kins.c
src/emc/kinematics/5axiskins.c
src/emc/kinematics/switchkins.c
src/emc/kinematics/switchkins.h
src/emc/kinematics/userkfuncs.c
src/emc/kinematics/kins_util.c
```
## 4. 边界状态
| 边界 | 当前状态 | 说明 |
| --- | --- | --- |
| gmoccapy UI style | ready | 可直接 Web 化 |
| Three.js preview | implemented_basic_canvas_scene | 已显示基础五轴机床、刀具/TCP marker、刀轴、刀路并消费 `rtcpFrame` |
| LinuxCNC interpreter WASM | existing_project_capability | 可参考 `wasm-port` 现有 SDK |
| LinuxCNC 5-axis kinematics WASM | node_proof_ready | `createLinuxCncKinematicsSdk({ moduleId: "xyzac-trt" })` 已由 web adapter 加载Node smoke 验证 forward/inverse frame |
| RTCP frame UI plumbing | implemented_fixture_and_kinematics_wasm | fixture fallback 仍为 `linuxCncKinematicsReady=false`Node kinematics proof 为 `source-derived-kinematics-wasm` / `linuxcnc_kinematics_wasm_c_abi` |
| Operator workflow | implemented_fixture_only | 上电/急停/复位/模式/JOG/MDI/G-code 加载/当前行显示已闭环;执行仍是 fixture line playback |
| LinuxCNC boundary adapter | kinematics_runtime_connected_node | `web-rtcp-5axis-linuxcnc-boundary-adapter` 可区分 kinematics-only ready 与 interpreter/remap missing |
| PyVCP/HAL panel schema | implemented_reference_only | `xyzac-trt-switchkins-pyvcp` 已整理 SWITCHKINS 控件与 HAL nets不执行 native HAL |
| Python GUI runtime | not_ported | 只参考,不运行 |
| Python remap runtime | blocked | 不在第一版实现 |
| tool DB runtime | blocked | 不在第一版实现 |
| external user-M process | blocked | 不在第一版实现 |
| native hard realtime | out_of_scope | Web 仿真不实现 |
## 5. 每批开发追溯记录模板
后续每批完成后追加:
```text
Batch:
Date:
Files changed:
Feature:
LinuxCNC references:
Boundary:
Tests:
Result:
Remaining risk:
Next:
```
## 6. 首批追溯记录
```text
Batch: M0-docs-preparation
Date: 2026-06-20 CST
Files changed:
README.md
docs/implementation-plan.md
docs/technical-roadmap.md
docs/program-implementation-guide.md
docs/development-continuation.md
docs/traceability-matrix.md
docs/linuxcnc-python-gui-reference.md
docs/linuxcnc-gui-reference-gallery.md
Feature:
完成 5 轴数控系统 Web 仿真程序开发前准备文档。
LinuxCNC references:
gmoccapy_5_axis.png
qtvismach_5axis_gantry.png
axis.py
vismach.py
xyzac-trt.ini
xyzbc-trt.ini
trtfuncs.c
5axiskins.c
Boundary:
docs_only
Tests:
git diff --check -- web-rtcp-5axis-sim-plan
Result:
ready_for_M1_web_shell_gmoccapy
Remaining risk:
尚未实现 app 代码LinuxCNC kinematics WASM ABI 尚未建立。
Next:
M1-web-shell-gmoccapy
```
## 7. M1 追溯记录
```text
Batch: M1-web-shell-gmoccapy
Date: 2026-06-20 CST
Files changed:
.gitignore
app/index.html
app/package.json
app/tsconfig.json
app/scripts/build-static.mjs
app/src/main.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
app/src/styles/gmoccapy.css
tests/browser/gmoccapy_shell_smoke.html
tests/browser/verify_gmoccapy_shell_browser.sh
Feature:
实现 gmoccapy 5 轴风格 Web shell并补齐 M1 build gate。
LinuxCNC references:
docs/src/gui/images/gmoccapy_5_axis.png
docs/src/gui/images/qtvismach_5axis_gantry.png
configs/sim/gmoccapy/gmoccapy_XYZAC.ini
Boundary:
ui_reference_only
sourceMode=fixture-ui-only
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run build
web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
git diff --check -- web-rtcp-5axis-sim-plan
Result:
gmoccapy_static_build=ok
gmoccapy_shell_smoke=ok
Remaining risk:
M1 shell/build gate 已闭环Three.js 真实场景、LinuxCNC interpreter/WASM、5 轴 kinematics ABI 仍未接入。
Next:
M2-state-and-controls
```
## 8. M2 追溯记录
```text
Batch: M2-state-and-controls
Date: 2026-06-20 CST
Files changed:
app/package.json
app/src/profiles/xyzac-trt.js
app/src/runtime/rtcp-frame.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
app/src/styles/gmoccapy.css
tests/node/verify_rtcp_store.mjs
tests/browser/gmoccapy_shell_smoke.html
docs/development-continuation.md
docs/traceability-matrix.md
Feature:
实现 gmoccapy store/control 链路,并加入 RTCP fixture frame plumbing。
Run/Step 会推进 fixture motion frameTCP/IDENTITY 会切换 RTCP on/off
DRO、preview badge 和 info diagnostics 显示 TCP pose、tool axis vector、frame readiness。
Preview view/Fit/Clear、Rapid/Feed override、Spindle override、Flood/Mist、
Reload/Home/Full 已接入 store action并由 node/browser smoke 覆盖。
LinuxCNC references:
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.xml
configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
src/emc/kinematics/xyzac-trt-kins.c
src/emc/kinematics/trtfuncs.c
Boundary:
sourceMode=fixture-ui-only
semanticBoundary=fixture_frame_ui_plumbing_not_linuxcnc_kinematics_proof
linuxCncKinematicsReady=false
promotionAllowed=false
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
gmoccapy_static_build=ok
rtcp_store_smoke=ok
gmoccapy_shell_smoke=ok
Remaining risk:
RTCP 当前是 UI/runtime frame plumbing不是 LinuxCNC/source-derived kinematics WASM proof
Three.js 仍是 SVG placeholderM3 需要接入真实 canvas scene 并消费 rtcpFrame。
Next:
M3-threejs-preview
```
## 9. M3 追溯记录
```text
Batch: M3-threejs-preview
Date: 2026-06-21 CST
Files changed:
app/src/vendor/three/three.module.js
app/src/vendor/three/three.core.js
app/src/visualization/five-axis-scene.js
app/src/ui/gmoccapy-shell.js
tests/browser/gmoccapy_shell_smoke.html
docs/development-continuation.md
docs/traceability-matrix.md
Feature:
将 preview 区域从占位内容升级为 Three.js WebGL canvas。
场景显示基础五轴工作区、工作台、刀具/TCP marker、刀轴和刀路
tool marker 消费 store 的 tcpPose刀轴消费 toolAxisVectorRTCP on/off 影响可见刀轴长度和姿态数据。
LinuxCNC references:
docs/src/gui/images/qtvismach_5axis_gantry.png
lib/python/vismach.py
src/hal/user_comps/vismach/xyzac-trt-gui.py
Boundary:
visualization_only
sourceMode=fixture-ui-only
semanticBoundary=fixture_frame_ui_plumbing_not_linuxcnc_kinematics_proof
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
gmoccapy_static_build=ok
rtcp_store_smoke=ok
gmoccapy_shell_smoke=ok
Remaining risk:
Three.js 当前消费 fixture frame五轴运动学仍未接入 LinuxCNC/source-derived WASM。
Next:
M4-profile-and-linuxcnc-boundary
```
## 10. M4 追溯记录
```text
Batch: M4-profile-and-linuxcnc-boundary
Date: 2026-06-21 CST
Files changed:
app/package.json
app/src/profiles/xyzac-trt.js
app/src/profiles/source-reference-map.js
app/src/panel-schema/xyzac-trt-pyvcp.js
app/src/runtime/linuxcnc-boundary-adapter.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
tests/node/verify_rtcp_store.mjs
tests/node/verify_profile_boundary.mjs
tests/browser/gmoccapy_shell_smoke.html
docs/development-continuation.md
docs/program-implementation-guide.md
docs/traceability-matrix.md
Feature:
建立 `xyzac-trt` profile/source reference map、PyVCP/HAL SWITCHKINS panel schema
和 LinuxCNC boundary adapter 接入点。store/UI 暴露 boundary readiness
并明确保持 `linuxCncKinematicsReady=false`、`promotionAllowed=false`。
本批后续已进一步按 LinuxCNC `xyzac-trt.ini`、`xyzac-trt_cmds.hal`、
`switchkins_postgui.hal`、`xyzac-trt.tbl`、`428/429/430remap.ngc` 显式整理
DISPLAY/RS274NGC/TRAJ、axis/joint limits、HALCMD feedback/offset nets、
HALUI MDI commands、tool table 和 remap IO 约束,使 M4 在 source-aligned
profile/schema/adapter 层面完整闭环。
LinuxCNC references:
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.xml
configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt_cmds.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
src/emc/kinematics/xyzac-trt-kins.c
src/emc/kinematics/trtfuncs.c
src/emc/kinematics/switchkins.c
Boundary:
sourceMapBoundary=profile_source_map_only_not_runtime_proof
panelSchemaBoundary=pyvcp_hal_schema_reference_only
adapterBoundary=adapter_entrypoint_only_runtime_not_connected
linuxCncKinematicsReady=false
promotionAllowed=false
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
gmoccapy_static_build=ok
rtcp_store_smoke=ok
profile_boundary_smoke=ok
gmoccapy_shell_smoke=ok
Remaining risk:
Adapter 目前只是接入点;尚未连接 LinuxCNC interpreter/kinematics WASM ABI。
Next:
linuxcnc_kinematics_wasm_abi
```
## 11. M5 追溯记录
```text
Batch: M5-operator-program-workflow
Date: 2026-06-21 CST
Files changed:
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
app/src/styles/gmoccapy.css
tests/node/verify_rtcp_store.mjs
tests/browser/gmoccapy_shell_smoke.html
docs/development-continuation.md
docs/traceability-matrix.md
Feature:
补齐 operator workflow上电、急停、AUTO/MANUAL/JOG/MDI、复位、
本地 G-code 文件加载、刀具预览、程序执行当前行显示和高亮。
LinuxCNC references:
gmoccapy operator workflow
AXIS program loading/current-line workflow
vismach tool preview conventions
Boundary:
operatorWorkflowBoundary=browser_ui_runtime_fixture
gcodeLoadBoundary=file_text_staging_only
programExecutionBoundary=fixture_line_playback_not_linuxcnc_interpreter
linuxCncKinematicsReady=false
promotionAllowed=false
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
gmoccapy_static_build=ok
rtcp_store_smoke=ok
profile_boundary_smoke=ok
gmoccapy_shell_smoke=ok
Remaining risk:
程序执行仍是 fixture line playback下一步必须接 LinuxCNC interpreter/WASM 或
source-derived kinematics WASM才能把执行来源升级为 LinuxCNC-owned。
Next:
linuxcnc_interpreter_or_kinematics_wasm_execution_source
```
## 12. M6 追溯记录
```text
Batch: M6-linuxcnc-kinematics-frame-proof
Date: 2026-06-21 CST
Files changed:
app/package.json
app/src/runtime/linuxcnc-kinematics-runtime.js
app/src/runtime/linuxcnc-boundary-adapter.js
app/src/runtime/rtcp-frame.js
app/src/state/store.js
tests/node/verify_linuxcnc_kinematics_runtime.mjs
tests/node/verify_rtcp_store.mjs
tests/node/verify_profile_boundary.mjs
docs/program-implementation-guide.md
docs/development-continuation.md
docs/traceability-matrix.md
Feature:
将 RTCP frame/boundary adapter 从 fixture-only 接到
createLinuxCncKinematicsSdk({ moduleId: "xyzac-trt" })。
新增 web runtime adapter只加载共享 wasm-port SDK 并返回 LinuxCNC
forward/inverse 结果frame builder 使用 forward.pose 和 inverse.joints
生成 source-derived kinematics frame。
LinuxCNC references:
wasm-port/runtime/sdk/src/linuxcnc-kinematics.js
wasm-port/build/wasm/kinematics/linuxcnc_xyzac_trt_kinematics.wasm
src/emc/kinematics/xyzac-trt-kins.c
src/emc/kinematics/trtfuncs.c
src/emc/kinematics/switchkins.c
Boundary:
sourceMode=source-derived-kinematics-wasm
semanticBoundary=linuxcnc_kinematics_wasm_c_abi
linuxCncKinematicsReady=true
kinematicsFramePromotionAllowed=true
fullLinuxCncProgramExecutionReady=false
browserFallback=fixture-ui-only
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
gmoccapy_static_build=ok
linuxcnc_kinematics_runtime_smoke=ok
rtcp_store_smoke=ok
profile_boundary_smoke=ok
gmoccapy_shell_smoke=ok
Remaining risk:
Browser path still runs fixture fallback because kinematics WASM asset copy/worker
is not wired into app/src/main.js. Program RUN/STEP still advances fixture lines;
LinuxCNC interpreter/remap/planner execution is not promoted.
Next:
browser_kinematics_wasm_asset_worker_or_interpreter_execution_source
```