Files
cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/05-验收证据.md
2026-07-02 08:01:34 -04:00

492 lines
13 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.
# 05-验收证据
## DOCX 整合验收
### 源文件
```text
web-rtcp-5axis-xyzbc-trt-sim-plan/doc/xyzbc-trt-web-cnc-simulation-design-task-and-technical-plan.docx
```
### 输出文件
```text
web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md
```
### 包结构检查结论
```text
DOCX 正文段落数507
DOCX 图片数5
图片文件:
- word/media/xyzbc-trt-axis-window.png
- word/media/xyzbc-trt-desktop.png
- word/media/xyzbc-trt-json-compare-flow.png
- word/media/xyzbc-trt-logic-map.png
- word/media/xyzbc-trt-web-architecture.png
```
### Markdown 输出检查
```bash
wc -l web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md
rg -n "^## |图 1|图 2|图 3|图 4|图 5|状态联锁|Evidence JSON|开发任务分解|验收标准|风险" web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md
rg -n "!\\[" web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md
```
结果:
```text
364 web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md
检索到 1-11 章关键章节。
检索到 5 张图片引用,均指向 ../doc/assets/。
```
结论:
- DOCX 任务书已整合到 `working/09-设计任务书与技术方案整合.md`
- 该 Markdown 保留任务书、技术方案、开发任务分解、验收标准、风险控制、源码级程序逻辑分析和状态联锁章节。
- `working/README.md``04-任务矩阵.md` 已登记该整合项。
## 本轮命令证据
### 读取对标文档
```bash
sed -n '1,240p' web-rtcp-5axis-xyzbc-trt-sim-plan/doc/xyzbc-trt-runtime-files.md
sed -n '241,520p' web-rtcp-5axis-xyzbc-trt-sim-plan/doc/xyzbc-trt-runtime-files.md
```
结论:
- `xyzbc-trt.ini` 使用 `DISPLAY=axis``PYVCP=./xyzbc-trt.xml``OPEN_FILE=./demos/xyzbc_switchkins.ngc`
- `switchkins_postgui.hal` 连接 PyVCP 按钮到 `halui.mdi-command-00/01/02`
- `M429/M428/M430` 分别选择 identity、XYZBC TCP、userk。
### 检查 WASM 支撑
```bash
rg -n "xyzbc|xyzbc-trt|supportedLinuxCncKinematicsModules|linuxcnc_xyzbc" wasm-port web-rtcp-5axis-sim-plan/tests web-rtcp-5axis-sim-plan/app/src
```
结论:
- SDK 包含 `xyzbc-trt -> linuxcnc_xyzbc_trt_kinematics.wasm`
- native probe 包含 `linuxcnc_xyzbc_trt_kinematics_probe.cpp`
- remap 执行 harness 包含 `xyzbc-trt.ini``xyzbc_switchkins.ngc``boat-xyzbc.ngc`
### 检查当前 artifact
```bash
find wasm-port/build/wasm -maxdepth 3 -type f
```
结果:
```text
find: wasm-port/build/wasm: No such file or directory
```
结论:
- 当前仓库没有已生成的 WASM artifact。
- 完整浏览器运行前必须先构建 WASM。
### 检查参数文件基线
```bash
ls -l wasm-port/vendor/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var /home/mes123456/linuxcnc-master/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var
```
结果:
```text
/home/mes123456/linuxcnc-master/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var 存在
wasm-port/vendor/.../xyzbc.var 当前不存在
linuxcnc/.../xyzbc.var 当前不存在
```
结论:
- `xyzbc.var` 是需要补充导入的运行态参数文件基线。
- 历史轮次已从 `/home/mes123456/linuxcnc-master/.../xyzbc.var` 导入到 `wasm-port/vendor/linuxcnc/.../xyzbc.var`,并加入 `wasm-port/tools/source-manifest.txt`;后续若以 `/home/mes123456/cnc_wams/linuxcnc` 为新 native 基线,应重新核对该参数文件是否与当前运行树一致。
## 已运行验收
### native 基线切换验收
后续真实 LinuxCNC 对标基线统一为:
```text
/home/mes123456/cnc_wams/linuxcnc
```
必须先确认这些文件存在:
```bash
test -x /home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment
test -x /home/mes123456/cnc_wams/linuxcnc/bin/axis
test -x /home/mes123456/cnc_wams/linuxcnc/bin/xyzbc-trt-gui
test -f /home/mes123456/cnc_wams/linuxcnc/rtlib/xyzbc-trt-kins.so
test -f /home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
```
本轮自动检查结果:
```text
scripts/rip-environment: ok
scripts/linuxcnc: ok
bin/axis: ok
bin/xyzbc-trt-gui: ok
bin/milltask: ok
bin/linuxcncsvr: ok
bin/halui: ok
rtlib/xyzbc-trt-kins.so: ok
rtlib/tpmod.so: ok
lib/python/linuxcnc.so: ok
xyzbc-trt.ini: ok
```
说明:
- native evidence 的 `sourceRoot` 后续必须写为 `/home/mes123456/cnc_wams/linuxcnc`
- `/home/mes123456/linuxcnc-master` 只作为历史运行参考;新一轮 Web 对标和 compare 以 `/home/mes123456/cnc_wams/linuxcnc` 的真实执行结果为准。
### LinuxCNC RIP 编译证据
执行命令:
```bash
cd /home/mes123456/cnc_wams/linuxcnc/src
./autogen.sh
./configure --with-realtime=uspace --disable-build-documentation
env -u DEBUG make -j"$(nproc)"
sudo -n make setuid
```
关键过程:
- 首次直接执行 `make -j"$(nproc)"` 失败,原因是当前 shell 环境存在 `DEBUG=release`LinuxCNC Makefile 将 `$(DEBUG)` 拼入编译参数,导致 `gcc/c++` 把裸参数 `release` 当作输入文件。
- 使用 `env -u DEBUG make -j"$(nproc)"` 重新编译通过。
- `sudo -n make setuid` 成功设置 `bin/rtapi_app``bin/linuxcnc_module_helper` 的 root/setuid 权限。
验证命令:
```bash
source /home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment >/dev/null
command -v linuxcnc
command -v axis
command -v halcmd
python3 - <<'PY'
import linuxcnc
print("python_linuxcnc_import=ok")
print("linuxcnc_module=", linuxcnc.__file__)
PY
```
验证结果:
```text
/home/mes123456/cnc_wams/linuxcnc/scripts/linuxcnc
/home/mes123456/cnc_wams/linuxcnc/bin/axis
/home/mes123456/cnc_wams/linuxcnc/bin/halcmd
python_linuxcnc_import=ok
linuxcnc_module= /home/mes123456/cnc_wams/linuxcnc/lib/python/linuxcnc.so
```
### `xyzbc-trt` 快捷方式与执行证据
快捷方式路径:
```text
/home/mes123456/cnc_wams/linuxcnc/linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop
```
快捷方式内容:
```text
Exec=/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment linuxcnc /home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
Icon=/home/mes123456/cnc_wams/linuxcnc/linuxcncicon.png
```
执行方式:
```bash
setsid bash -lc 'cd /home/mes123456/cnc_wams/linuxcnc && exec /home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment linuxcnc /home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini' \
> /tmp/xyzbc-trt-cnc_wams-linuxcnc.log 2>&1 < /dev/null &
```
当前进程证据:
```text
/bin/bash /home/mes123456/cnc_wams/linuxcnc/scripts/linuxcnc .../xyzbc-trt.ini
linuxcncsvr -ini /home/mes123456/cnc_wams/linuxcnc/.../xyzbc-trt.ini
/home/mes123456/cnc_wams/linuxcnc/bin/rtapi_app load tpmod
milltask -ini /home/mes123456/cnc_wams/linuxcnc/.../xyzbc-trt.ini
halui -ini /home/mes123456/cnc_wams/linuxcnc/.../xyzbc-trt.ini
/usr/bin/python3.13 /home/mes123456/cnc_wams/linuxcnc/bin/hal_manualtoolchange
/usr/bin/python3.13 /home/mes123456/cnc_wams/linuxcnc/bin/xyzbc-trt-gui
/usr/bin/python3.13 /home/mes123456/cnc_wams/linuxcnc/bin/axis -ini /home/mes123456/cnc_wams/linuxcnc/.../xyzbc-trt.ini
```
HAL/Python 验证:
```text
motion.switchkins-type = 0
loaded file = ./demos/xyzbc_switchkins.ngc
axis_mask = 55
position = [0.0, 0.0, 0.0, 0.0, 0.0]
```
目标 Node smoke
```bash
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
```
实际输出:
```text
xyzbc_trt_web_app_smoke=ok
```
静态 diff 检查:
```bash
git diff --check -- web-rtcp-5axis-xyzbc-trt-sim-plan
```
实际结果:无输出,退出码为 0。
WASM artifact 检查:
```bash
find wasm-port/build/wasm -maxdepth 3 -type f
```
实际输出:
```text
find: wasm-port/build/wasm: No such file or directory
```
完整 WASM 验收:
```bash
wasm-port/tools/build_kinematics_wasm.sh
wasm-port/tools/build_wasm_core.sh
wasm-port/tools/build_tp_wasm.sh
wasm-port/tools/build_task_hal_wasm.sh
wasm-port/tests/wasm/node/verify_kinematics_wasm.sh
wasm-port/tests/wasm/node/verify_interp_wasm.sh
wasm-port/tests/wasm/node/verify_task_hal_wasm.sh
```
### native/Web JSON 证据
真实 native 采集命令:
```bash
/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment \
python3 web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py --run --timeout 90
```
输出:
```text
native_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json
```
结果摘要:
```text
status=ok
executionMode=auto-run
commandResult.status=completed
commandResult.events=1462
```
Web 采集命令:
```bash
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web
```
输出:
```text
web_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json
```
结果摘要:
```text
profileDefaultXyzbc=true
iniReady=true
opfsStaged=true
pyvcpXmlStaged=true
remapsStaged=true
toolTableStaged=true
parameterFileStaged=true
defaultProgramStaged=true
wasmArtifactsReady=false
```
对比命令:
```bash
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
```
输出:
```text
compare_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=fail fail_count=1
```
当前结论:
- 12 项对比中 11 项通过。
- 唯一失败项是 `required WASM artifacts available`
- 当前环境已安装 `emcc 6.0.2`;剩余前置是执行 `wasm-port` 构建脚本生成 artifact并重跑 evidence。
### 全量对标 JSON 验收要求
后续 native/Web evidence JSON 必须按 `07-全量对标追踪矩阵.md` 增加这些顶层或等效字段:
```text
startupSequence
iniDisplay
halNets
kinematicsPins
axisJointLimits
switchkinsTransitions
toolTable
toolOffsetFlow
uiEquivalence
vismachEquivalent
ngcguiSubroutines
demoPrograms
pathSampling
previewPath
executionPath
```
`compare-xyzbc-trt-evidence.json` 必须新增或扩展这些检查类别:
```text
startup-sequence
ini-display
hal-nets
kinematics-pins
axis-joint-limits
switchkins-transitions
tool-offset-flow
ui-equivalence
vismach-equivalence
ngcgui-subroutines
demo-programs
path-preview
path-execution
path-comparison
```
必须逐项验证:
- `.desktop/rip-environment/linuxcnc` 启动顺序在 Web 中有等效 `startupSequence`
- `[DISPLAY]``DISPLAY``GEOMETRY``OPEN_FILE``PYVCP``JOG_AXES``POSITION_OFFSET``POSITION_FEEDBACK``MAX_*``TOOL_EDITOR``NGCGUI_*` 有 Web 等效字段或 UI。
- `[TRAJ]``[KINS]``[EMCMOT]``[TASK]``[EMCIO]` 的关键配置进入 JSON。
- `switchkins_postgui.hal``pyvcp.*``halui.mdi-command-*` 的连接进入 `halNets`
- `basic_sim.tcl` 的模拟 joint/home/spindle/manualtoolchange 语义由 task/HAL evidence 证明。
- `xyzbc-trt-gui.py` 的 HAL pin 和模型层级由 `vismachEquivalent` 证明。
- `xyzbc-trt-kins` 的 offset、rot-point、conventional-directions、tool-offset pin 由 `kinematicsPins` 证明。
- `xyzbc_switchkins_sub.ngc``centering.ngc``helix_bc.ngc``xyzbc_switchkins.ngc``boat-xyzbc.ngc` 都进入 staging 和可执行验收。
- `xyzbc-trt.tbl``T1 P1 D1``T2 P2 Z10 D8` 解析后影响 tool offset、kinematics 和 Web 3D 刀具显示。
### 刀具预览/执行路径 JSON 验收要求
后续 native/Web evidence JSON 必须增加刀具预览路径和刀具执行路径:
```text
working/evidence/native-xyzbc-trt-evidence.json.pathSampling.samplePeriodMs = 20
working/evidence/web-xyzbc-trt-evidence.json.pathSampling.samplePeriodMs = 20
working/evidence/native-xyzbc-trt-evidence.json.previewPath.samples[]
working/evidence/native-xyzbc-trt-evidence.json.executionPath.samples[]
working/evidence/web-xyzbc-trt-evidence.json.previewPath.samples[]
working/evidence/web-xyzbc-trt-evidence.json.executionPath.samples[]
working/evidence/compare-xyzbc-trt-evidence.json.pathComparison
```
采样要求:
- `samplePeriodMs` 固定为 `20`native/Web 两侧必须一致。
- 样本必须通过 `sampleIndex``timeMs` 对齐。
- 若原始采集周期不同,采集脚本或 compare 脚本必须重采样为 20ms 后再比较。
- `previewPath` 只能表示预览/planner 路径;`executionPath` 必须来自真实执行反馈或 Web WASM task/HAL 执行反馈,不能用预览路径替代。
每个样本必须包含:
```text
sampleIndex
timeMs
line
motionType
activeKinematics
tool.id/tool.length/tool.diameter
joint.x/joint.y/joint.z/joint.b/joint.c
tcp.x/tcp.y/tcp.z
toolAxis.i/toolAxis.j/toolAxis.k
feed
spindle
```
compare 验收项:
```text
pathComparison.previewVsPreview
pathComparison.executionVsExecution
pathComparison.previewVsExecutionNative
pathComparison.previewVsExecutionWeb
```
每个对比项至少输出:
```text
maxTcpErrorMm
rmsTcpErrorMm
maxJointError
rmsJointError
maxToolAxisAngleDeg
sampleCountDelta
missingSamples
```
当前状态:
- 现有三份 `working/evidence/*.json` 还没有上述路径字段。
- 本轮未手工改写 JSON 证据文件;后续必须通过采集脚本重新生成。
- Web 执行路径采集依赖 WASM artifactartifact 缺失时 compare 必须保留 fail/blocker。
## 页面证据
目标页面:
```text
web-rtcp-5axis-xyzbc-trt-sim-plan/app/index.html
```
开发服务:
```bash
cd web-rtcp-5axis-xyzbc-trt-sim-plan/app
npm run dev
```
URL
```text
http://127.0.0.1:4174/
```