提交当前项目改动
189
web-rtcp-5axis-xyzbc-trt-sim-plan/working/01-项目功能内容.md
Normal file
@@ -0,0 +1,189 @@
|
||||
# 01-项目功能内容
|
||||
|
||||
## 目标
|
||||
|
||||
对标 LinuxCNC `xyzbc-trt` 当前运行配置,在 Web 中实现 XYZBC table rotary/tilting 五轴数控系统仿真界面。界面基于 HTML/JavaScript,文件和会话持久化基于 OPFS,CNC 核心能力通过 `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 type;WASM interp/remap 由 `wasm-port` 支撑 | Web staging 已完成;真实 WASM 执行需 artifact |
|
||||
| `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` | SDK 已支持,当前缺 build artifact |
|
||||
| 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 | 代码已接入,需 artifact 验收 |
|
||||
| 刀具预览路径 JSON | native 与 Web 在预览阶段输出统一结构的 `previewPath` 曲线采样 | 待补充采集脚本 |
|
||||
| 刀具执行路径 JSON | native 与 Web 在真实执行阶段输出统一结构的 `executionPath` 曲线采样 | 待补充采集脚本 |
|
||||
| 预览/执行路径对比 | `compare-xyzbc-trt-evidence.json` 对 `previewPath` 和 `executionPath` 逐点/误差统计比对 | 待补充 compare 规则 |
|
||||
| AXIS 主界面等效 | Web 首屏必须是可操作 CNC 仿真界面,包含程序、坐标、状态、override、工具、MDI/switchkins 控制 | 待全量验收 |
|
||||
| POSTGUI HAL 等效 | Web 需复现 `pyvcp.* -> halui.mdi-command-* -> M428/M429/M430` 连接关系 | 待补充 JSON 检查 |
|
||||
| basic_sim 等效 | Web task/HAL runtime 需提供模拟回零、manual toolchange、spindle、joint feedback 基础仿真语义 | 待 WASM/task-HAL 验收 |
|
||||
| Vismach 模型等效 | Web 3D 模型需按 `table-x/saddle-y/spindle-z/tilt-b/rotate-c/tool-offset/x-offset/z-offset` 驱动 | 待补充模型 pin 验收 |
|
||||
| Ngcgui 子程序 | Web 需 stage 并可运行 `xyzbc_switchkins_sub.ngc`、`centering.ngc`、`helix_bc.ngc` | 待补充子程序验收 |
|
||||
| 演示程序全集 | Web 需 stage `xyzbc_switchkins.ngc` 和 `boat-xyzbc.ngc`,默认打开前者 | 待补充 boat 验收 |
|
||||
| 速度/限制/坐标显示 | Web 需对标 `GEOMETRY/JOG_AXES/POSITION_FEEDBACK/MAX_*`、TRAJ 和 AXIS/JOINT 限制 | 待补充 UI/JSON 检查 |
|
||||
| Kinematics HAL pins | Web 需 expose/record `x-offset/z-offset/tool-offset/rot-point/conventional-directions` | 待补充 HAL pin 检查 |
|
||||
|
||||
## 刀具预览与执行路径 JSON 要求
|
||||
|
||||
目标:把 LinuxCNC 真实系统和 Web 仿真系统中的刀具预览路径、刀具执行路径都写入 evidence JSON,并在 compare JSON 中做同周期曲线比对。
|
||||
|
||||
统一采样规则:
|
||||
|
||||
- 对比采样周期固定为 `samplePeriodMs = 20`,即 50 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": 20,
|
||||
"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 仿真的主要语义边界,但当前工作区没有 `wasm-port/build/wasm` 构建产物,导致完整浏览器运行需要先执行 WASM 构建。
|
||||
|
||||
已具备的证据:
|
||||
|
||||
- `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 覆盖。
|
||||
- 当前环境已经安装并可调用 `emcc 6.0.2`,后续缺口从“安装 Emscripten”转为“执行 WASM 构建并复跑证据”。
|
||||
|
||||
当前缺口:
|
||||
|
||||
- `wasm-port/build/wasm/kinematics`、`core`、`tp`、`task-hal` 目录当前不存在。
|
||||
- 因此本轮已完成 native 真实执行、Web OPFS/staging/readiness、JSON 对比验证;完整 browser worker WASM 执行需先构建 artifact。
|
||||
|
||||
## 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 真实执行 `xyzbc_switchkins.ngc`,采集到 1462 个执行事件。
|
||||
- Web 侧已完成 profile、INI、OPFS staging、PyVCP XML、remap、tool table、parameter file、默认程序覆盖。
|
||||
- 对比 12 项检查中 11 项通过。
|
||||
- 唯一失败项:`required WASM artifacts available`,缺少 `wasm-port/build/wasm/...` 的 kinematics/core/tp/task-hal `.js/.wasm` 文件。
|
||||
215
web-rtcp-5axis-xyzbc-trt-sim-plan/working/02-项目程序开发详细步骤.md
Normal file
@@ -0,0 +1,215 @@
|
||||
# 02-项目程序开发详细步骤
|
||||
|
||||
## 步骤
|
||||
|
||||
1. 读取 `doc/xyzbc-trt-runtime-files.md`,确认 LinuxCNC 进程、INI、PyVCP、POSTGUI HAL、Vismach、remap、tool table、parameter file 的运行关系。
|
||||
2. 读取 `wasm-port/AGENTS.md` 和 `wasm-port/SKILL.md`,确认必须复用 LinuxCNC 源码语义,Web 只做 UI/OPFS/运行边界适配。
|
||||
3. 检查 `wasm-port` 是否包含 `xyzbc-trt`:确认 SDK、probe、vendored configs、remap harness 已覆盖。
|
||||
4. 复制参考 Web app 到目标目录:
|
||||
|
||||
```text
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/tests
|
||||
```
|
||||
|
||||
5. 将目标 app 默认机型改为 `xyzbc-trt`:
|
||||
|
||||
```text
|
||||
app/src/state/store.js
|
||||
app/src/profiles/index.js
|
||||
app/src/runtime/linuxcnc-kinematics-runtime.js
|
||||
app/src/runtime/linuxcnc-kinematics-worker-client.js
|
||||
app/src/main.js
|
||||
```
|
||||
|
||||
6. 将 OPFS/session/tool-db 根路径改为目标项目命名空间:
|
||||
|
||||
```text
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/machines
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/sessions
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/tool-db
|
||||
```
|
||||
|
||||
7. 为 `xyzbc-trt` profile 增加默认机器文件 staging:
|
||||
|
||||
```js
|
||||
machineFileStaging: {
|
||||
defaultProgramFilename: "xyzbc_switchkins.ngc",
|
||||
wasmDir: "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt",
|
||||
}
|
||||
```
|
||||
|
||||
8. 新增目标项目 Node smoke:
|
||||
|
||||
```text
|
||||
tests/node/verify_xyzbc_trt_web_app.mjs
|
||||
```
|
||||
|
||||
9. 创建工作文档:
|
||||
|
||||
```text
|
||||
working/01-项目功能内容.md
|
||||
working/02-项目程序开发详细步骤.md
|
||||
working/03-推进台账.md
|
||||
working/04-任务矩阵.md
|
||||
working/05-验收证据.md
|
||||
working/06-决策记录.md
|
||||
working/07-全量对标追踪矩阵.md
|
||||
working/README.md
|
||||
```
|
||||
|
||||
10. 按 `07-全量对标追踪矩阵.md` 继续补齐 Web 对标功能:
|
||||
|
||||
```text
|
||||
AXIS 等效界面
|
||||
PyVCP/POSTGUI HAL 等效连接
|
||||
basic_sim task/HAL 等效运行
|
||||
Vismach xyzbc-trt-gui.py 等效 3D 模型
|
||||
Ngcgui/remap 子程序全集 staging 和执行
|
||||
TRAJ/AXIS/JOINT 限制、速度、单位和 override
|
||||
tool table/tool offset 对 kinematics 和模型的双向影响
|
||||
native/Web JSON 全字段对比
|
||||
```
|
||||
|
||||
11. 切换 native 真实执行基线到 `/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
|
||||
```
|
||||
|
||||
验收要求:
|
||||
|
||||
- 上述文件存在后,native 采集脚本统一使用 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment`。
|
||||
- 真实执行命令的 INI 必须是 `/home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini`。
|
||||
- Web 界面布局、状态流、switchkins 逻辑、Vismach 等效模型、刀具路径和 JSON 字段都以该路径实际执行结果为准。
|
||||
- `/home/mes123456/linuxcnc-master` 只能作为历史运行参考,不再作为新的 native evidence 基线。
|
||||
|
||||
## 后续完整验收步骤
|
||||
|
||||
1. 生成 WASM artifact:
|
||||
|
||||
```bash
|
||||
source /home/mes123456/emsdk/emsdk_env.sh
|
||||
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
|
||||
```
|
||||
|
||||
2. 运行 wasm-port 对应验证:
|
||||
|
||||
```bash
|
||||
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
|
||||
wasm-port/tests/browser/verify_interp_browser.sh
|
||||
```
|
||||
|
||||
3. 运行目标 app 验证:
|
||||
|
||||
```bash
|
||||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
|
||||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
|
||||
```
|
||||
|
||||
4. 生成 native/Web 对比证据:
|
||||
|
||||
```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
|
||||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web
|
||||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```text
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
|
||||
```
|
||||
|
||||
5. 补充刀具预览路径和刀具执行路径采集:
|
||||
|
||||
```text
|
||||
tools/collect-native-xyzbc-trt-evidence.py
|
||||
tools/collect-web-xyzbc-trt-evidence.mjs
|
||||
tools/compare-xyzbc-trt-evidence.mjs
|
||||
```
|
||||
|
||||
实现要求:
|
||||
|
||||
- 在 native evidence 中增加 `pathSampling`、`previewPath`、`executionPath`。
|
||||
- 在 Web evidence 中增加同名字段,字段结构必须与 native 完全一致。
|
||||
- 统一对比采样周期为 `samplePeriodMs = 20`。
|
||||
- 采集脚本可保留原始高频/低频轨迹,但写入对比 JSON 的曲线必须重采样到 20ms。
|
||||
- 预览路径从 LinuxCNC preview/canon 或 Web preview planner 采集;执行路径从 LinuxCNC `stat()`/HAL 反馈或 Web task/HAL runtime 采集。
|
||||
- 每个样本必须包含 `sampleIndex`、`timeMs`、`line`、`motionType`、`activeKinematics`、`tool`、`joint`、`tcp`、`toolAxis`、`feed`、`spindle`。
|
||||
- 对 B/C 旋转轴和 TCP/toolAxis 的计算必须以 `xyzbc-trt` kinematics/WASM 结果为准,不能用 UI 插值伪造。
|
||||
|
||||
6. 补充刀路 compare 规则:
|
||||
|
||||
```json
|
||||
{
|
||||
"pathComparison": {
|
||||
"samplePeriodMs": 20,
|
||||
"previewVsPreview": {},
|
||||
"executionVsExecution": {},
|
||||
"previewVsExecutionNative": {},
|
||||
"previewVsExecutionWeb": {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
验收要求:
|
||||
|
||||
- `compare-xyzbc-trt-evidence.json` 中新增 `pathComparison`。
|
||||
- `checks` 中新增 `path-preview`、`path-execution`、`path-preview-execution-consistency` 类别。
|
||||
- 每类检查至少输出 `maxTcpErrorMm`、`rmsTcpErrorMm`、`maxJointError`、`rmsJointError`、`maxToolAxisAngleDeg`、`sampleCountDelta`、`missingSamples`。
|
||||
- 若 native/Web 两侧采样周期不一致,compare 必须直接 fail,并输出实际周期。
|
||||
- 若 WASM artifact 缺失导致 Web 执行路径无法采集,compare 必须保持 fail/blocker,不能用预览路径替代执行路径。
|
||||
|
||||
7. 补充全量对标 JSON 字段:
|
||||
|
||||
```json
|
||||
{
|
||||
"startupSequence": [],
|
||||
"iniDisplay": {},
|
||||
"halNets": [],
|
||||
"kinematicsPins": {},
|
||||
"axisJointLimits": {},
|
||||
"switchkinsTransitions": [],
|
||||
"uiEquivalence": {},
|
||||
"vismachEquivalent": {},
|
||||
"ngcguiSubroutines": [],
|
||||
"demoPrograms": []
|
||||
}
|
||||
```
|
||||
|
||||
验收要求:
|
||||
|
||||
- `startupSequence` 对标 `.desktop -> rip-environment -> linuxcncsvr/rtapi_app/milltask/halui -> basic_sim -> kinematics -> Vismach -> AXIS -> PyVCP -> POSTGUI HAL -> OPEN_FILE`。
|
||||
- `halNets` 覆盖 `motion.switchkins-type`、`halui.mdi-command-*`、`pyvcp.*`、`joint.N.pos-fb`、`motion.tooloffset.z`、`xyzbc-trt-kins.*`。
|
||||
- `kinematicsPins` 覆盖 `x-offset=-20`、`z-offset=-15`、`x/y/z-rot-point=0`、`conventional-directions=0`、`tool-offset`。
|
||||
- `axisJointLimits` 覆盖 `XYZBC` 单位、关节数、B/C 角轴限制、TRAJ 速度/加速度。
|
||||
- `uiEquivalence` 覆盖 AXIS 主界面的程序区、坐标区、MDI/switchkins、override、工具、状态、预览/执行路径。
|
||||
- `vismachEquivalent` 覆盖 `xyzbc-trt-gui.py` 的模型 pin 和清除轨迹行为。
|
||||
- `ngcguiSubroutines` 覆盖 `xyzbc_switchkins_sub.ngc`、`centering.ngc`、`helix_bc.ngc`。
|
||||
- `demoPrograms` 覆盖 `xyzbc_switchkins.ngc` 和 `boat-xyzbc.ngc`。
|
||||
|
||||
8. 启动目标 Web:
|
||||
|
||||
```bash
|
||||
cd web-rtcp-5axis-xyzbc-trt-sim-plan/app
|
||||
npm run dev
|
||||
```
|
||||
|
||||
默认 URL:
|
||||
|
||||
```text
|
||||
http://127.0.0.1:4174/
|
||||
```
|
||||
280
web-rtcp-5axis-xyzbc-trt-sim-plan/working/03-推进台账.md
Normal file
@@ -0,0 +1,280 @@
|
||||
# 03-推进台账
|
||||
|
||||
## 2026-07-02 07:31 EDT - DOCX 设计任务书整合到 working
|
||||
|
||||
### 本轮目标
|
||||
|
||||
将 `doc/xyzbc-trt-web-cnc-simulation-design-task-and-technical-plan.docx` 的内容整合到 `working` 目录下,方便后续直接用 Markdown 工作文档继续开发和验收。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 读取 DOCX 包结构,确认正文包含 507 段文本,图片包含 `xyzbc-trt-axis-window.png`、`xyzbc-trt-desktop.png`、`xyzbc-trt-web-architecture.png`、`xyzbc-trt-json-compare-flow.png`、`xyzbc-trt-logic-map.png`。
|
||||
- 从 DOCX 的 `word/document.xml` 提取段落和表格,转换为 `working/09-设计任务书与技术方案整合.md`。
|
||||
- 在整合稿中保留 1-11 章:项目目标、原型运行证据、完全对标范围、Web 界面设计任务书、技术方案、开发任务分解、验收标准、风险控制、对标文件清单、程序逻辑全量分析、开机/急停/回零/执行状态联锁。
|
||||
- 将 DOCX 图片引用改为 `../doc/assets/...`,使 working 文档可直接查看原有图像证据。
|
||||
- 更新 `working/README.md`,把 09 文档加入索引。
|
||||
- 更新 `04-任务矩阵.md`,新增 `T-040 DOCX 任务书整合到 working`。
|
||||
|
||||
### 修改文件
|
||||
|
||||
```text
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/README.md
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/03-推进台账.md
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/04-任务矩阵.md
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/05-验收证据.md
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/06-决策记录.md
|
||||
```
|
||||
|
||||
### 验证情况
|
||||
|
||||
- `working/09-设计任务书与技术方案整合.md` 已生成,共 364 行。
|
||||
- `rg` 检查到核心章节:`项目目标`、`原型系统运行证据`、`完全对标范围`、`Web 界面设计任务书`、`技术方案`、`开发任务分解`、`验收标准`、`风险和控制措施`、`程序逻辑全量分析`、`开机、急停、回零与执行状态的联锁逻辑`。
|
||||
- `rg` 检查到 5 张图片引用,均指向 `../doc/assets/`。
|
||||
|
||||
### 下一步
|
||||
|
||||
1. 后续开发需求优先引用 `working/09-设计任务书与技术方案整合.md`,不再需要反复打开 DOCX 才能检索任务书内容。
|
||||
2. 若 DOCX 后续继续更新,需要同步重新生成或手工补充 09 文档,并在本台账记录差异。
|
||||
|
||||
## 2026-07-02 03:10 EDT
|
||||
|
||||
### 本轮目标
|
||||
|
||||
对标 `xyzbc-trt-runtime-files.md`,确认 `wasm-port` 是否满足,并创建 Web 方式的 `xyzbc-trt` 数控系统仿真界面与工作文档。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 读取 `web-rtcp-5axis-xyzbc-trt-sim-plan/doc/xyzbc-trt-runtime-files.md`。
|
||||
- 读取 `wasm-port/AGENTS.md`、`wasm-port/SKILL.md`、`wasm-port/README.md`。
|
||||
- 检查参考 app:`web-rtcp-5axis-sim-plan/app`。
|
||||
- 检查 `wasm-port` 对 `xyzbc-trt` 的覆盖:SDK、vendored config、kinematics probe、remap execute harness、文档覆盖。
|
||||
- 复制参考 app 和 tests 到目标目录。
|
||||
- 修改目标 app 默认 profile 为 `xyzbc-trt`。
|
||||
- 修改 OPFS/session/tool-db 命名空间为 `web-rtcp-5axis-xyzbc-trt-sim-plan`。
|
||||
- 为 `xyzbc-trt` profile 增加 `machineFileStaging.defaultProgramFilename = xyzbc_switchkins.ngc`。
|
||||
- 新增 `tests/node/verify_xyzbc_trt_web_app.mjs`。
|
||||
- 创建 `README.md` 和 `working/` 六类工作文档。
|
||||
- 发现 `xyzbc.var` 未进入 `wasm-port/vendor`/manifest;本轮记录为参数文件基线导入缺口。
|
||||
|
||||
### 修改文件
|
||||
|
||||
```text
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/README.md
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/index.html
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/package.json
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/package-lock.json
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/main.js
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/profiles/index.js
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/profiles/xyzbc-trt.js
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/five-axis-session.js
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-machine-file-staging.js
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-kinematics-runtime.js
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-kinematics-worker-client.js
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/tool-db-simulation.js
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/ui/gmoccapy-shell.js
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_xyzbc_trt_web_app.mjs
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/README.md
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/01-项目功能内容.md
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/02-项目程序开发详细步骤.md
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/03-推进台账.md
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/04-任务矩阵.md
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/05-验收证据.md
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/06-决策记录.md
|
||||
```
|
||||
|
||||
### 验证情况
|
||||
|
||||
- 已通过:`npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node`,输出 `xyzbc_trt_web_app_smoke=ok`。
|
||||
- 已通过:`git diff --check -- web-rtcp-5axis-xyzbc-trt-sim-plan`。
|
||||
- 已发现:当前工作区缺少 `wasm-port/build/wasm`,完整 WASM/browser 验收需要先构建 artifact。
|
||||
|
||||
### 下一步
|
||||
|
||||
1. 运行目标 Node smoke。
|
||||
2. 如需完整 Web 执行,先构建 `wasm-port/build/wasm`。
|
||||
3. 根据 browser smoke 结果补齐目标项目专用浏览器断言。
|
||||
|
||||
## 2026-07-02 native/Web 对比验证轮次
|
||||
|
||||
### 本轮目标
|
||||
|
||||
执行真实 `xyzbc-trt` 和 Web 仿真采集,分别写入 JSON,并通过比较 JSON 找出需要完善的差异。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 确认 native `xyzbc-trt` 进程正在运行:`linuxcncsvr`、`milltask`、`halui`、`xyzbc-trt-gui`、`axis`。
|
||||
- 历史轮次曾使用 `/home/mes123456/linuxcnc-master/scripts/rip-environment python3` 成功导入 LinuxCNC Python API 并读取 `stat()`;当前 native 新基线已切换到 `/home/mes123456/cnc_wams/linuxcnc`。
|
||||
- 新增 native 采集脚本:`tools/collect-native-xyzbc-trt-evidence.py`。
|
||||
- 新增 Web 采集脚本:`tools/collect-web-xyzbc-trt-evidence.mjs`。
|
||||
- 新增 JSON 对比脚本:`tools/compare-xyzbc-trt-evidence.mjs`。
|
||||
- 将 `xyzbc.var` 从真实运行树导入 `wasm-port/vendor/linuxcnc/.../xyzbc.var`,并加入 `wasm-port/tools/source-manifest.txt`。
|
||||
- 更新目标 smoke,使参数文件 staging 成为必须通过项。
|
||||
- 在 `package.json` 增加 `evidence:web` 和 `evidence:compare`。
|
||||
|
||||
### 验证情况
|
||||
|
||||
- 已通过 native 真实执行采集:`native-xyzbc-trt-evidence.json`,`commandResult.status=completed`,事件数 `1462`。
|
||||
- 已通过 Web 采集:`web-xyzbc-trt-evidence.json`,profile/INI/OPFS/PyVCP/remap/tool/parameter/default program 均覆盖。
|
||||
- 已生成比较报告:`compare-xyzbc-trt-evidence.json`,12 项检查中 11 项通过。
|
||||
- 当前唯一失败项:缺少 `wasm-port/build/wasm` 下的 kinematics/core/tp/task-hal `.js/.wasm` artifact。
|
||||
- 当前环境此前缺少 `emcc`;后续已安装 `emcc 6.0.2`,下一步应直接构建 WASM artifact。
|
||||
|
||||
### 下一步
|
||||
|
||||
1. 运行 `source /home/mes123456/emsdk/emsdk_env.sh`。
|
||||
2. 运行 `wasm-port/tools/build_kinematics_wasm.sh`、`build_wasm_core.sh`、`build_tp_wasm.sh`、`build_task_hal_wasm.sh`。
|
||||
3. 重跑 `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web` 和 `evidence:compare`,目标是比较报告 artifact 项通过。
|
||||
4. 再补目标浏览器 smoke,确认 worker runtime 和 canvas 非空。
|
||||
|
||||
## 2026-07-02 刀具预览/执行路径 JSON 对比需求补充
|
||||
|
||||
### 本轮目标
|
||||
|
||||
把“刀具预览路径”和“刀具执行路径”的采集过程纳入 native/Web evidence JSON,并要求 compare JSON 使用一致曲线采样周期进行比对。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 在 `01-项目功能内容.md` 增加 `pathSampling`、`previewPath`、`executionPath`、`pathComparison` 的 JSON 字段要求。
|
||||
- 明确 native 和 Web 对比采样周期统一为 `samplePeriodMs = 20`。
|
||||
- 明确每个路径样本必须包含程序行号、运动类型、switchkins/kinematics 状态、刀具信息、XYZBC joint、TCP、toolAxis、feed、spindle。
|
||||
- 在 `02-项目程序开发详细步骤.md` 增加 native/Web 采集脚本和 compare 脚本的后续实现步骤。
|
||||
- 在任务矩阵中增加预览路径采集、执行路径采集、统一采样周期、路径误差统计等任务。
|
||||
|
||||
### 当前状态
|
||||
|
||||
- 本轮只补充工作文档和验收要求。
|
||||
- 现有 `working/evidence/*.json` 仍是上一轮真实采集结果,尚未伪造或手工改写。
|
||||
- 后续需要修改采集脚本,让真实 native/Web 运行重新生成包含刀具路径的 JSON。
|
||||
|
||||
### 下一步
|
||||
|
||||
1. 在 `collect-native-xyzbc-trt-evidence.py` 中增加 LinuxCNC 预览路径与执行反馈路径采集。
|
||||
2. 在 `collect-web-xyzbc-trt-evidence.mjs` 中增加 Web 预览 planner 与 WASM task/HAL 执行路径采集。
|
||||
3. 在 `compare-xyzbc-trt-evidence.mjs` 中增加 20ms 重采样和路径误差统计。
|
||||
4. 重新生成 native/Web/compare 三份 JSON,确认 `pathComparison.samplePeriodMs = 20` 且两侧样本可逐点对齐。
|
||||
|
||||
## 2026-07-02 全量对标 working 文档完善
|
||||
|
||||
### 本轮目标
|
||||
|
||||
根据 `doc/xyzbc-trt-runtime-files.md`,让 `working` 文档明确要求 Web 数控系统仿真界面完全对标 LinuxCNC `xyzbc-trt` 真实运行配置。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 重新读取 `doc/xyzbc-trt-runtime-files.md`,确认文档共 702 行,覆盖进程、启动入口、INI、AXIS、PyVCP、POSTGUI HAL、basic_sim、Vismach、switchkins、G-code、tool table、kinematics、加载顺序和重要文件清单。
|
||||
- 新增 `working/07-全量对标追踪矩阵.md`,把每个 LinuxCNC 功能点映射到 Web 对标目标、evidence 字段和当前缺口。
|
||||
- 更新 `01-项目功能内容.md`,明确完全对标范围,并补充 AXIS 等效、POSTGUI HAL 等效、basic_sim、Vismach pin、Ngcgui、演示程序全集、速度/限制、kinematics HAL pins 等功能项。
|
||||
- 更新 `02-项目程序开发详细步骤.md`,增加全量对标 JSON 字段和后续实现步骤。
|
||||
- 更新 `04-任务矩阵.md`,新增 T-025 到 T-035。
|
||||
- 更新 `05-验收证据.md`,新增全量对标 JSON 验收要求。
|
||||
- 同步 `emcc` 状态:当前已安装 `emcc 6.0.2`,剩余前置是构建 WASM artifact。
|
||||
|
||||
### 当前状态
|
||||
|
||||
- 文档层面已把 `xyzbc-trt-runtime-files.md` 的完整运行语义转成 Web 对标清单。
|
||||
- 代码层面仍需继续补齐全量 evidence JSON、UI 等效行为、Vismach pin 验收和 WASM artifact 验收。
|
||||
|
||||
### 下一步
|
||||
|
||||
1. 构建 `wasm-port/build/wasm` artifact。
|
||||
2. 修改 native/Web evidence 采集脚本,补齐 `startupSequence`、`halNets`、`kinematicsPins`、`axisJointLimits`、`uiEquivalence`、`vismachEquivalent` 等字段。
|
||||
3. 修改 compare 脚本,把 `07-全量对标追踪矩阵.md` 中的检查项转为自动化 check。
|
||||
4. 根据新增任务矩阵补齐 Web UI 和 3D 模型行为。
|
||||
|
||||
## 2026-07-02 切换 native 对标基线到 `/home/mes123456/cnc_wams/linuxcnc`
|
||||
|
||||
### 本轮目标
|
||||
|
||||
根据用户要求,以编译成功并能够执行 `xyzbc-trt` 的 `/home/mes123456/cnc_wams/linuxcnc` 为真实 LinuxCNC 对标基线,设计 Web 数控仿真界面和逻辑。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 检查 `/home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini`,确认配置文件存在。
|
||||
- 检查 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment`、`bin/axis`、`bin/xyzbc-trt-gui`、`rtlib/xyzbc-trt-kins.so`,当前自动检查未发现这些 RIP/构建产物。
|
||||
- 更新 `01-项目功能内容.md`,声明后续 native evidence 采集和 Web 对标基线统一使用 `/home/mes123456/cnc_wams/linuxcnc`。
|
||||
- 更新 `02-项目程序开发详细步骤.md`,将 native 采集命令切换为 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment`。
|
||||
- 更新 `04-任务矩阵.md`,新增 T-036 到 T-038,覆盖 native 基线切换、新基线 JSON 重采集、Web 界面按新 native 运行结果复核。
|
||||
- 更新 `05-验收证据.md`,新增 native 基线切换验收,记录当前文件检查结果。
|
||||
- 更新 `07-全量对标追踪矩阵.md` 和 `06-决策记录.md`,明确 `/home/mes123456/linuxcnc-master` 只作为历史运行参考。
|
||||
|
||||
### 当前状态
|
||||
|
||||
- 文档层面已切换对标基线。
|
||||
- 代码和 evidence 层面还未重新采集;现有 `working/evidence/*.json` 仍来自历史 `/home/mes123456/linuxcnc-master` 运行树。
|
||||
|
||||
### 下一步
|
||||
|
||||
1. 确认 `/home/mes123456/cnc_wams/linuxcnc` 的 RIP 构建产物实际输出位置。
|
||||
2. 用该路径执行 `xyzbc-trt.ini`,确认 `axis`、`xyzbc-trt-gui`、`xyzbc-trt-kins.so` 可运行。
|
||||
3. 修改/运行 native evidence 采集脚本,让 `sourceRoot=/home/mes123456/cnc_wams/linuxcnc`。
|
||||
4. 依据新 native JSON 复核 Web UI、switchkins、Vismach 等效模型、刀具路径和 compare 规则。
|
||||
|
||||
## 2026-07-02 编译 `/home/mes123456/cnc_wams/linuxcnc`
|
||||
|
||||
### 本轮目标
|
||||
|
||||
按 run-in-place 方式编译 `/home/mes123456/cnc_wams/linuxcnc`,使其能够作为 `xyzbc-trt` native 真实执行基线。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 读取 `docs/INSTALL.adoc`,确认 RIP 构建流程为 `cd src`、`./autogen.sh`、`./configure --with-realtime=uspace`、`make`、`sudo make setuid`。
|
||||
- 执行 `./autogen.sh`,成功生成 configure/config.h.in。
|
||||
- 执行 `./configure --with-realtime=uspace --disable-build-documentation`,配置成功,并生成 `scripts/linuxcnc`、`scripts/rip-environment`、`scripts/halrun` 等 RIP 脚本。
|
||||
- 首次执行 `make -j"$(nproc)"` 失败,原因是 shell 环境变量 `DEBUG=release` 被 LinuxCNC Makefile 当作编译参数,导致 `gcc/c++` 报 `release: linker input file not found`。
|
||||
- 使用 `env -u DEBUG make -j"$(nproc)"` 重新编译,成功完成。
|
||||
- 执行 `sudo -n make setuid`,成功设置 `bin/rtapi_app` 和 `bin/linuxcnc_module_helper` 的 root/setuid 权限。
|
||||
|
||||
### 验证情况
|
||||
|
||||
- 已生成 `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`。
|
||||
- `source scripts/rip-environment` 后,`command -v linuxcnc`、`axis`、`halcmd` 均指向 `/home/mes123456/cnc_wams/linuxcnc`。
|
||||
- `python3 -c "import linuxcnc"` 成功,模块路径为 `/home/mes123456/cnc_wams/linuxcnc/lib/python/linuxcnc.so`。
|
||||
- `git status --short` 无输出,说明没有 Git 跟踪文件改动;编译产物均在忽略/生成路径内。
|
||||
|
||||
### 下一步
|
||||
|
||||
1. 使用 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment` 重新采集 native `xyzbc-trt` evidence。
|
||||
2. 将 `native-xyzbc-trt-evidence.json.sourceRoot` 更新为 `/home/mes123456/cnc_wams/linuxcnc`。
|
||||
3. 用新 native JSON 重跑 Web evidence 和 compare。
|
||||
|
||||
## 2026-07-02 创建并执行 `xyzbc-trt` 快捷方式
|
||||
|
||||
### 本轮目标
|
||||
|
||||
在 `/home/mes123456/cnc_wams/linuxcnc` 中创建执行 `xyzbc-trt` 的桌面快捷方式,并实际启动该配置。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 检查显示环境,当前 `DISPLAY=:1`、`XDG_SESSION_TYPE=x11`。
|
||||
- 参考历史 `/home/mes123456/linuxcnc-master/linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop`,创建新快捷方式:
|
||||
|
||||
```text
|
||||
/home/mes123456/cnc_wams/linuxcnc/linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop
|
||||
```
|
||||
|
||||
- 快捷方式 `Exec` 指向:
|
||||
|
||||
```text
|
||||
/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
|
||||
```
|
||||
|
||||
- 启动前发现历史 `/home/mes123456/linuxcnc-master` 的 `xyzbc-trt` 仍在运行。
|
||||
- 尝试 `/home/mes123456/linuxcnc-master/scripts/linuxcnc -k` 后出现 pickconfig 窗口,未关闭旧实例;随后终止旧 LinuxCNC 相关进程。
|
||||
- 使用 `setsid` 从新路径后台启动 `xyzbc-trt`。
|
||||
|
||||
### 验证情况
|
||||
|
||||
- 新进程均来自 `/home/mes123456/cnc_wams/linuxcnc`:`scripts/linuxcnc`、`linuxcncsvr`、`rtapi_app`、`milltask`、`halui`、`hal_manualtoolchange`、`xyzbc-trt-gui`、`axis`。
|
||||
- `halcmd show pin motion.switchkins-type` 可读,值为 `0`。
|
||||
- LinuxCNC Python API 可读取状态:`file=./demos/xyzbc_switchkins.ngc`、`axis_mask=55`、`position=[0,0,0,0,0]`。
|
||||
- `desktop-file-validate` 无输出。
|
||||
|
||||
### 下一步
|
||||
|
||||
1. 用当前运行的新 native 实例重采集 `native-xyzbc-trt-evidence.json`。
|
||||
2. 将现有历史 `/home/mes123456/linuxcnc-master` evidence 替换为 `/home/mes123456/cnc_wams/linuxcnc` evidence。
|
||||
3. 基于新 evidence 重跑 Web compare。
|
||||
50
web-rtcp-5axis-xyzbc-trt-sim-plan/working/04-任务矩阵.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# 04-任务矩阵
|
||||
|
||||
| 编号 | 任务 | 状态 | 验收标准 |
|
||||
| --- | --- | --- | --- |
|
||||
| T-001 | 对标 `xyzbc-trt-runtime-files.md` 梳理运行文件 | 完成 | 文档列出 INI、PyVCP、HAL、Vismach、remap、tool table、parameter file |
|
||||
| T-002 | 判断 `wasm-port` 是否满足 `xyzbc-trt` | 完成 | 明确列出 SDK/probe/remap/browser 覆盖和当前 artifact 缺口 |
|
||||
| T-003 | 创建目标 Web app | 完成 | `web-rtcp-5axis-xyzbc-trt-sim-plan/app/index.html` 存在 |
|
||||
| T-004 | 默认机型改为 `xyzbc-trt` | 完成 | `createSimulationStore().getState().machineProfile === "xyzbc-trt"` |
|
||||
| T-005 | 接入 `xyzbc-trt` INI/profile | 完成 | profile 坐标为 `XYZBC`,kinematics 为 `xyzbc-trt-kins` |
|
||||
| T-006 | OPFS 路径隔离到目标项目 | 完成 | staged 文件 path 以 `web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/` 开头 |
|
||||
| T-007 | 默认加载 `xyzbc_switchkins.ngc` | 完成 | profile `machineFileStaging.defaultProgramFilename` 为 `xyzbc_switchkins.ngc` |
|
||||
| T-008 | Stage remap/tool/PyVCP 文件 | 完成 | staging 包含 `428remap.ngc`、`429remap.ngc`、`430remap.ngc`、`xyzbc-trt.tbl`、`xyzbc-trt.xml` |
|
||||
| T-009 | 增加目标 Node smoke | 完成 | `tests/node/verify_xyzbc_trt_web_app.mjs` 存在并通过 |
|
||||
| T-010 | 导入 `xyzbc.var` 基线参数文件 | 完成 | `wasm-port/vendor`/manifest 包含 `xyzbc.var`,OPFS staging 可保存参数文件 |
|
||||
| T-011 | 完整 kinematics WASM 验证 | 待前置 | `wasm-port/tests/wasm/node/verify_kinematics_wasm.sh` 通过 |
|
||||
| T-012 | 完整 interpreter/remap WASM 验证 | 待前置 | `wasm-port/tests/wasm/node/verify_interp_wasm.sh` 通过并覆盖 `xyzbc_switchkins.ngc` |
|
||||
| T-013 | 完整 task/HAL WASM 验证 | 待前置 | `wasm-port/tests/wasm/node/verify_task_hal_wasm.sh` 通过 |
|
||||
| T-014 | 目标浏览器 smoke | 待前置 | 页面默认显示 `xyzbc-trt`,worker runtime ready,canvas 非空 |
|
||||
| T-015 | native 真实执行 JSON 采集 | 完成 | `native-xyzbc-trt-evidence.json` 记录真实执行事件,状态 completed |
|
||||
| T-016 | Web OPFS/WASM readiness JSON 采集 | 完成 | `web-xyzbc-trt-evidence.json` 记录 Web profile/INI/staging/WASM readiness |
|
||||
| T-017 | native/Web JSON 对比 | 部分完成 | `compare-xyzbc-trt-evidence.json` 已生成;当前 11/12 通过,剩余 WASM artifact |
|
||||
| T-018 | WASM artifact 构建前置 | 待前置 | `emcc 6.0.2` 已可用,需运行构建脚本让 `wasm-port/build/wasm` 生成所需 `.js/.wasm` |
|
||||
| T-019 | native 刀具预览路径 JSON 采集 | 待实现 | `native-xyzbc-trt-evidence.json.previewPath.samples` 使用 20ms 周期记录 LinuxCNC 预览刀路 |
|
||||
| T-020 | native 刀具执行路径 JSON 采集 | 待实现 | `native-xyzbc-trt-evidence.json.executionPath.samples` 使用 20ms 周期记录真实执行反馈路径 |
|
||||
| T-021 | Web 刀具预览路径 JSON 采集 | 待实现 | `web-xyzbc-trt-evidence.json.previewPath.samples` 使用 20ms 周期记录 Web 预览刀路 |
|
||||
| T-022 | Web 刀具执行路径 JSON 采集 | 待前置 | `web-xyzbc-trt-evidence.json.executionPath.samples` 使用 20ms 周期记录 WASM task/HAL 执行反馈路径 |
|
||||
| T-023 | 刀路采样周期一致性检查 | 待实现 | compare 检查 native/Web `pathSampling.samplePeriodMs === 20`,否则 fail |
|
||||
| T-024 | 刀路误差统计对比 | 待实现 | compare 输出 preview/execution 的 TCP、joint、toolAxis 误差统计和缺样本清单 |
|
||||
| T-025 | 全量对标追踪矩阵 | 完成 | `07-全量对标追踪矩阵.md` 逐项映射 `xyzbc-trt-runtime-files.md` 的运行功能 |
|
||||
| T-026 | AXIS 主界面等效功能 | 待实现 | Web 首屏包含程序、坐标、状态、MDI/switchkins、override、工具和预览/执行区域 |
|
||||
| T-027 | POSTGUI HAL/PyVCP 连接等效 | 待实现 | JSON 记录 `pyvcp.* -> halui.mdi-command-* -> M428/M429/M430` 和 multilabel 状态 |
|
||||
| T-028 | basic_sim 等效 task/HAL | 待前置 | Web task/HAL runtime 覆盖模拟回零、manual toolchange、spindle、joint feedback |
|
||||
| T-029 | Vismach 3D 模型 pin 对标 | 待实现 | Web 3D 模型由 `table-x/saddle-y/spindle-z/tilt-b/rotate-c/tool-offset/x-offset/z-offset` 驱动 |
|
||||
| T-030 | Ngcgui/remap 子程序全集 | 待实现 | staging 和执行覆盖 `xyzbc_switchkins_sub.ngc`、`centering.ngc`、`helix_bc.ngc` |
|
||||
| T-031 | 演示程序全集 | 待实现 | staging 和 UI 程序选择覆盖 `xyzbc_switchkins.ngc` 与 `boat-xyzbc.ngc` |
|
||||
| T-032 | TRAJ/AXIS/JOINT 限制对标 | 待实现 | JSON/UI 覆盖 XYZBC 单位、速度/加速度、B/C 限位、JOG_AXES、GEOMETRY |
|
||||
| T-033 | kinematics HAL pins 对标 | 待实现 | JSON 记录 `x-offset=-20`、`z-offset=-15`、rot-point、conventional-directions、tool-offset |
|
||||
| T-034 | tool table 到 tool-offset 闭环 | 待实现 | T/P/Z/D 解析影响 kinematics tool-offset、Web 模型刀长和 path JSON |
|
||||
| T-035 | 全量 evidence JSON 字段 | 待实现 | native/Web JSON 包含 `startupSequence`、`iniDisplay`、`halNets`、`kinematicsPins`、`axisJointLimits`、`uiEquivalence` |
|
||||
| T-036 | native 基线切换到 `/home/mes123456/cnc_wams/linuxcnc` | 完成 | `scripts/rip-environment`、`bin/axis`、`bin/xyzbc-trt-gui`、`rtlib/xyzbc-trt-kins.so` 已生成,RIP 环境可导入 `linuxcnc` Python 模块 |
|
||||
| T-037 | 基于新 native 基线重采集 JSON | 待前置 | `native-xyzbc-trt-evidence.json` 的 `sourceRoot` 为 `/home/mes123456/cnc_wams/linuxcnc`,执行状态 completed |
|
||||
| T-038 | Web 界面按新 native 运行结果复核 | 待实现 | UI/逻辑与 `/home/mes123456/cnc_wams/linuxcnc` 真实 `xyzbc-trt` 的状态流、按钮、路径、HAL pin 对齐 |
|
||||
| T-039 | 创建并执行 `xyzbc-trt` 快捷方式 | 完成 | `linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop` 已创建,进程从 `/home/mes123456/cnc_wams/linuxcnc` 启动 |
|
||||
| T-040 | DOCX 任务书整合到 working | 完成 | `working/09-设计任务书与技术方案整合.md` 保留 DOCX 1-11 章、5 张图片引用、任务书、技术方案、程序逻辑和状态联锁内容 |
|
||||
|
||||
状态说明:
|
||||
|
||||
- 完成:本轮已实现并可通过静态/Node 验证。
|
||||
- 待前置:代码已接入,但当前缺少 `wasm-port/build/wasm` artifact,需先构建。
|
||||
- 待实现:已记录验收要求,仍需修改采集或对比脚本。
|
||||
491
web-rtcp-5axis-xyzbc-trt-sim-plan/working/05-验收证据.md
Normal file
@@ -0,0 +1,491 @@
|
||||
# 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 artifact,artifact 缺失时 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/
|
||||
```
|
||||
141
web-rtcp-5axis-xyzbc-trt-sim-plan/working/06-决策记录.md
Normal file
@@ -0,0 +1,141 @@
|
||||
# 06-决策记录
|
||||
|
||||
## D-012:DOCX 任务书整合为 working Markdown
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:将 `doc/xyzbc-trt-web-cnc-simulation-design-task-and-technical-plan.docx` 的正文、表格和图片引用整合为 `working/09-设计任务书与技术方案整合.md`,并把它加入 `working` 索引和任务矩阵。
|
||||
|
||||
理由:
|
||||
|
||||
- DOCX 不便于命令行检索、diff、逐项验收和后续增量维护。
|
||||
- `working` 目录是当前项目的开发和验收入口,任务书内容必须进入该目录才能和 01-08 工作文档形成闭环。
|
||||
- Markdown 版本可以保留 DOCX 的完整任务书、技术方案、程序逻辑分析和状态联锁内容,同时继续引用 `doc/assets` 中的原始图片证据。
|
||||
|
||||
## D-001:以 `wasm-port` 为 CNC 语义来源
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:Web 项目不在 JavaScript 中重写 G-code、remap、tool table、parameter、kinematics 或 planner 语义,继续通过 `wasm-port` 的 LinuxCNC-derived SDK/WASM 获取语义。
|
||||
|
||||
理由:
|
||||
|
||||
- `wasm-port/AGENTS.md` 明确要求 LinuxCNC 源码是语义真源。
|
||||
- `wasm-port` 已经包含 `xyzbc-trt` kinematics、remap、interp、task/HAL 的边界设计。
|
||||
|
||||
## D-002:复制参考 app 后改为 `xyzbc-trt` 默认机型
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:复用 `web-rtcp-5axis-sim-plan/app` 的结构,创建目标目录独立 app,并只做 `xyzbc-trt` 默认化和项目命名空间隔离。
|
||||
|
||||
理由:
|
||||
|
||||
- 参考 app 已包含 OPFS、WASM SDK、五轴可视化、profile、task/HAL、tool DB、session 等大部分产品外壳。
|
||||
- 局部改造比重写界面风险低,且保留 LinuxCNC source-derived 边界。
|
||||
|
||||
## D-003:目标项目 OPFS 根路径独立
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:目标项目使用 `web-rtcp-5axis-xyzbc-trt-sim-plan/machines`、`sessions`、`tool-db`,不复用旧项目 `web-rtcp-5axis-sim-plan` 路径。
|
||||
|
||||
理由:
|
||||
|
||||
- 防止两个项目在 OPFS 中互相覆盖机器文件、会话、tool DB。
|
||||
- 便于后续按项目清理和验收。
|
||||
|
||||
## D-004:默认程序使用 `xyzbc_switchkins.ngc`
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:为 `xyzbc-trt` profile 增加 `machineFileStaging.defaultProgramFilename = "xyzbc_switchkins.ngc"`。
|
||||
|
||||
理由:
|
||||
|
||||
- LinuxCNC INI `[DISPLAY]OPEN_FILE` 指向 `./demos/xyzbc_switchkins.ngc`。
|
||||
- 参考 app 的自动选择逻辑按 `${profileId}_switchkins.ngc` 推导时会得到不存在的 `xyzbc-trt_switchkins.ngc`,必须显式覆盖。
|
||||
|
||||
## D-005:完整浏览器验收等待 WASM artifact
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:本轮先完成代码、工作文档和不依赖 artifact 的 Node smoke;完整 browser/WASM 验收记录为后续前置任务。
|
||||
|
||||
理由:
|
||||
|
||||
- 当前 `wasm-port/build/wasm` 不存在。
|
||||
- 页面 runtime 代码已接入 worker/WASM,但缺少 `.js/.wasm` 产物时无法完成真实浏览器执行。
|
||||
|
||||
## D-006:受控导入 `xyzbc.var` staging
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:从当前真实运行树 `/home/mes123456/linuxcnc-master/.../xyzbc.var` 导入 `xyzbc.var` 到 `wasm-port/vendor/linuxcnc/.../xyzbc.var`,并加入 `wasm-port/tools/source-manifest.txt`。
|
||||
|
||||
理由:
|
||||
|
||||
- `xyzbc-trt.ini` 明确声明 `PARAMETER_FILE = xyzbc.var`。
|
||||
- 若不导入,OPFS machine-file staging 无法覆盖完整 runtime files。
|
||||
- 直接在 Web wrapper 中引用运行树绝对路径不可复现;纳入 vendor/manifest 后,Node/Web staging 可重复。
|
||||
|
||||
## D-007:native/Web JSON 对比作为验收主线
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:新增 native、Web、compare 三个 JSON 证据脚本,作为后续完善项目的主验收链路。
|
||||
|
||||
理由:
|
||||
|
||||
- 用户要求真实 `xyzbc-trt` 与 Web 仿真分别写入 JSON,再通过比对 JSON 完善项目。
|
||||
- JSON 证据比单次截图或口头结论更容易复跑、归档和定位差异。
|
||||
- 当前比较报告已把差异收敛到唯一环境前置:缺 WASM artifact。
|
||||
|
||||
## D-008:WASM artifact 缺失不伪造通过
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:当前 `wasm-port/build/wasm` 为空,Web evidence 和 compare evidence 保持 `blocked/fail`,不伪造 WASM 执行完成。`emcc 6.0.2` 已安装后,下一步是构建 artifact,而不是改写证据为通过。
|
||||
|
||||
理由:
|
||||
|
||||
- `wasm-port` 规则要求 LinuxCNC 源码语义和 WASM 边界真实可验证。
|
||||
- 没有 `.js/.wasm` artifact 时,浏览器 worker runtime 无法完成真实执行。
|
||||
- 保留失败项可以明确下一步是激活已安装的 Emscripten 并构建 artifact,而不是继续堆叠 Web UI 假状态。
|
||||
|
||||
## D-009:刀具路径按统一 20ms 周期采样后比较
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:native/Web 的刀具预览路径和刀具执行路径进入 evidence JSON 前,统一按 `samplePeriodMs = 20` 重采样;compare 只对同一 `sampleIndex/timeMs` 的样本做逐点比较。
|
||||
|
||||
理由:
|
||||
|
||||
- LinuxCNC 真实系统和 Web 仿真系统的内部刷新、planner、HAL/task 采样频率可能不同,直接比较原始样本会产生时间错位。
|
||||
- 固定 20ms 可以覆盖人眼可见刀路和 UI 动画判断,同时让 JSON 体积可控。
|
||||
- 统一 `sampleIndex/timeMs` 后,TCP、XYZBC joint、toolAxis、feed、spindle 的误差统计可以稳定复跑。
|
||||
- 如果 Web 缺少 WASM task/HAL 执行反馈,不允许用预览路径冒充执行路径;compare 必须显式 fail/blocker。
|
||||
|
||||
## D-010:以全量对标追踪矩阵作为开发和验收主索引
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:新增 `working/07-全量对标追踪矩阵.md`,作为 Web `xyzbc-trt` 仿真界面后续开发、JSON 采集和 compare 验收的主索引。
|
||||
|
||||
理由:
|
||||
|
||||
- `doc/xyzbc-trt-runtime-files.md` 覆盖的范围超过单个 INI/staging 检查,还包括 AXIS、PyVCP、POSTGUI HAL、basic_sim、Vismach、kinematics HAL pins、Ngcgui、演示程序和加载顺序。
|
||||
- 若没有追踪矩阵,后续容易只完成页面可见部分,而漏掉 HAL/task/kinematics/tool-offset 等运行语义。
|
||||
- 追踪矩阵把每个 LinuxCNC 功能点映射到 Web 对标目标和 evidence 字段,便于自动化 compare 脚本逐步落地。
|
||||
|
||||
## D-011:native 真实执行基线切换到 `/home/mes123456/cnc_wams/linuxcnc`
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:后续 Web 界面和逻辑设计以 `/home/mes123456/cnc_wams/linuxcnc` 编译后执行 `xyzbc-trt` 的真实行为为 native 基线;`/home/mes123456/linuxcnc-master` 只保留为历史运行参考。
|
||||
|
||||
理由:
|
||||
|
||||
- 用户明确要求以已编译成功并能执行 `xyzbc-trt` 的 `/home/mes123456/cnc_wams/linuxcnc` 为对标依据。
|
||||
- `/home/mes123456/cnc_wams/linuxcnc` 是干净 Git 源码仓库,便于把 native 行为、Web WASM 构建和后续代码追踪关联到同一源码树。
|
||||
- 该路径已完成 run-in-place 编译,`scripts/rip-environment`、`bin/axis`、`bin/xyzbc-trt-gui`、`rtlib/xyzbc-trt-kins.so` 已生成;因此后续第一步是用该路径重新生成 native evidence。
|
||||
117
web-rtcp-5axis-xyzbc-trt-sim-plan/working/07-全量对标追踪矩阵.md
Normal file
@@ -0,0 +1,117 @@
|
||||
# 07-全量对标追踪矩阵
|
||||
|
||||
本文件把 `doc/xyzbc-trt-runtime-files.md` 中记录的 LinuxCNC `xyzbc-trt` 真实运行功能,逐项映射到 Web 数控系统仿真界面的目标、证据和缺口。
|
||||
|
||||
原则:
|
||||
|
||||
- Web 实现必须完全对标 `xyzbc-trt-runtime-files.md` 的运行语义。
|
||||
- LinuxCNC 源码、INI、HAL、remap、tool table、parameter file 和 kinematics 是语义真源。
|
||||
- AXIS、PyVCP、Vismach 这类桌面 UI 组件在 Web 中做同语义等效实现。
|
||||
- 每项对标最终都要进入 native/Web evidence JSON 和 compare JSON,不能只停留在 UI 文案。
|
||||
- 后续 native 真实执行基线统一采用 `/home/mes123456/cnc_wams/linuxcnc`,`/home/mes123456/linuxcnc-master` 只作为历史运行树参考。
|
||||
|
||||
## 运行入口与进程对标
|
||||
|
||||
| LinuxCNC 功能 | 真实配置来源 | Web 对标目标 | Evidence/验收 |
|
||||
| --- | --- | --- | --- |
|
||||
| `.desktop` 启动 `rip-environment linuxcnc xyzbc-trt.ini` | `/home/mes123456/cnc_wams/linuxcnc/linuxcnc-rtcp-5axis-shortcuts/.../xyzbc-trt.desktop` | Web profile 一键进入 `xyzbc-trt`,自动加载同一 INI/staging 文件集 | web JSON 记录 `profile=xyzbc-trt`、`iniPath`、`startupSequence` |
|
||||
| `linuxcncsvr`、`rtapi_app`、`milltask`、`halui` | 当前进程清单 | Web runtime 用 worker/WASM/task-HAL 表示 server/task/halui 边界 | compare 检查 `runtimeComponents` 包含 `interp`、`tp`、`taskHal`、`haluiEquivalent` |
|
||||
| AXIS 主界面进程 | `bin/axis -ini xyzbc-trt.ini` | Web 首屏直接进入 CNC 操作界面,不做营销页 | 浏览器 smoke 检查坐标、程序、switchkins、3D canvas 均可见 |
|
||||
| Vismach 进程 | `loadusr -W xyzbc-trt-gui` | Web 3D 机床模型按 HAL pin 驱动 | evidence 记录 Vismach pin 等效映射 |
|
||||
|
||||
## INI 与显示配置对标
|
||||
|
||||
| INI 字段 | LinuxCNC 行为 | Web 对标目标 | 状态 |
|
||||
| --- | --- | --- | --- |
|
||||
| `[EMC] MACHINE = sim-xyzbc-trt-kins (switchkins)` | AXIS 标题/机器名 | 页面机器名、JSON machine name 一致 | 待验收 |
|
||||
| `[DISPLAY] DISPLAY = axis` | 启动 AXIS | Web 实现 AXIS 等效操作面板 | 待全量验收 |
|
||||
| `[DISPLAY] GEOMETRY = XYZB` | AXIS 几何显示 | Web 坐标/预览按 XYZB 几何显示,C 轴仍参与机床/路径 | 待补充 |
|
||||
| `[DISPLAY] JOG_AXES = XYZC` | 手动 jog 轴集合 | Web jog 控制至少覆盖 X/Y/Z/C,并显示 B/C 状态 | 待补充 |
|
||||
| `[DISPLAY] POSITION_OFFSET = RELATIVE` | 坐标偏置显示 | Web 默认显示相对坐标并可记录 work offset | 待补充 |
|
||||
| `[DISPLAY] POSITION_FEEDBACK = ACTUAL` | 显示实际反馈位置 | Web 坐标读数来自 task/HAL actual feedback,不只显示 commanded | 待 task-HAL |
|
||||
| `[DISPLAY] MAX_FEED_OVERRIDE = 2` | 进给倍率最大 200% | Web feed override 控件范围 0-200% | 待补充 UI 验收 |
|
||||
| `[DISPLAY] MAX_LINEAR_VELOCITY = 1000` | AXIS UI 限速 | Web UI 限速显示/约束一致 | 待补充 |
|
||||
| `[DISPLAY] MAX_ANGULAR_VELOCITY = 360` | 角轴限速 | Web 角轴 jog/显示限速一致 | 待补充 |
|
||||
| `[DISPLAY] PROGRAM_PREFIX = ../../nc_files` | 打开程序默认目录 | Web 程序文件浏览/staging 根目录记录等效路径 | 待补充 |
|
||||
| `[DISPLAY] TOOL_EDITOR = tooledit z diam` | 工具编辑字段 | Web tool editor 至少支持 Z 和 diameter | 待补充 |
|
||||
| `TKPKG/NGCGUI_*` | AXIS Ngcgui 面板加载子程序 | Web 需 stage 并提供子程序参数化调用入口或等效验证 | 待实现 |
|
||||
|
||||
## 文件 staging 对标
|
||||
|
||||
| 文件 | 作用 | Web 对标目标 | 当前要求 |
|
||||
| --- | --- | --- | --- |
|
||||
| `xyzbc-trt.ini` | 主配置 | OPFS/wasm runtime 必须使用同源 INI | 已有 staging,需全量字段校验 |
|
||||
| `xyzbc-trt.xml` | PyVCP switchkins 面板 | Web switchkins 面板由 XML/schema 驱动 | 已有,需 pin 连接证据 |
|
||||
| `switchkins_postgui.hal` | PyVCP 到 halui MDI 的连接 | Web 需记录 `pyvcp.* -> halui.mdi-command-*` | 待 compare 检查 |
|
||||
| `basic_sim.tcl` | 基础仿真 HAL | Web task/HAL runtime 等效模拟 joint/home/spindle/toolchange | 待 task-HAL 验收 |
|
||||
| `xyzbc-trt_cmds.hal` | 运行后生成 HAL | Web evidence 需记录等效展开 HAL nets | 待实现 |
|
||||
| `xyzbc-trt-gui.py` | Vismach 模型 | Web 3D pin/模型层级对标 | 待模型验收 |
|
||||
| `axis.py` | AXIS 主界面行为 | Web 操作面板对标 AXIS 关键行为 | 待 UI 验收 |
|
||||
| `xyzbc-trt-kins.c` | 运动学真源 | WASM kinematics 使用 source-derived artifact | 待构建 artifact |
|
||||
| `xyzbc-trt.tbl` | 工具表 | Web tool DB 读取 T/P/Z/D | 已有 staging,需 UI/tool-offset 验收 |
|
||||
| `xyzbc.var` | 参数文件 | OPFS 保存/恢复参数 | 已有 staging,需运行后变更验证 |
|
||||
|
||||
## HAL 与 switchkins 对标
|
||||
|
||||
| LinuxCNC HAL 语义 | Web 对标目标 | Evidence/验收 |
|
||||
| --- | --- | --- |
|
||||
| `motion.analog-out-03 => motion.switchkins-type` | Web remap/MDI 写入 switchkins type,并暴露当前类型 | native/Web JSON 对比 switchkins transitions |
|
||||
| `halui.mdi-command-00 = M429` | Web `IDENTITY` 按钮执行 M429 | 按钮事件、MDI 命令、switchkins type 都写入 evidence |
|
||||
| `halui.mdi-command-01 = M428` | Web `TCP:XYZBC` 按钮执行 M428 | 同上 |
|
||||
| `halui.mdi-command-02 = M430` | Web `userk` 按钮执行 M430 | 同上 |
|
||||
| `kinstype.is-0/1/2 -> pyvcp.multilabel` | Web multilabel 显示当前 kinematics | UI state 与 HAL state 一致 |
|
||||
| `pyvcp.vismach-clear -> vismach.plotclear` | Web clear 按钮清除 3D 轨迹/preview buffer | evidence 记录 clear 前后 path count |
|
||||
| `joint.N.pos-fb -> xyzbc-trt-gui.*` | Web 3D 模型从 actual joint feedback 驱动 | path/execution JSON 记录 feedback 来源 |
|
||||
| `motion.tooloffset.z -> xyzbc-trt-kins.tool-offset -> gui.tool-offset` | 工具长度同时影响 kinematics 和模型显示 | tool table、tool offset、TCP/toolAxis 误差检查 |
|
||||
|
||||
## 运动学与机床模型对标
|
||||
|
||||
| 项目 | LinuxCNC 来源 | Web 对标目标 |
|
||||
| --- | --- | --- |
|
||||
| `KINEMATICS = xyzbc-trt-kins sparm=identityfirst` | INI/KINS | 默认 switchkins type 0 为 identity,M428 后为 XYZBC TCP |
|
||||
| `JOINTS = 5` | INI/KINS | Web runtime 固定 XYZBC 五关节 |
|
||||
| `x-offset = -20` | HALCMD sets | Web kinematics pin 默认值一致 |
|
||||
| `z-offset = -15` | HALCMD sets | Web kinematics pin 默认值一致 |
|
||||
| `x/y/z-rot-point = 0` | HALCMD setp | Web kinematics pin 默认值一致 |
|
||||
| `conventional-directions = 0` | HALCMD setp | Web kinematics pin 默认值一致 |
|
||||
| `table-x/saddle-y/spindle-z/tilt-b/rotate-c` | Vismach pins | Web 模型层级按这些反馈驱动 |
|
||||
| `tool-offset/x-offset/z-offset` | Vismach/kines pins | Web 刀具和模型偏置一致 |
|
||||
|
||||
## G-code、remap 与子程序对标
|
||||
|
||||
| 文件/命令 | LinuxCNC 行为 | Web 对标目标 |
|
||||
| --- | --- | --- |
|
||||
| `M429` | kinstype=0,Identity | Web MDI/remap 执行后 switchkins type 为 0 |
|
||||
| `M428` | kinstype=1,XYZBC/TCP | Web MDI/remap 执行后 switchkins type 为 1 |
|
||||
| `M430` | kinstype=2,USERK | Web MDI/remap 执行后 switchkins type 为 2 |
|
||||
| `xyzbc_switchkins.ngc` | 默认打开并调用子程序 | Web 默认程序一致 |
|
||||
| `xyzbc_switchkins_sub.ngc` | 四象限 switchkins/TCP 演示 | Web 必须 stage 并可执行 |
|
||||
| `centering.ngc` | Ngcgui 子程序 | Web 必须 stage;后续实现参数入口 |
|
||||
| `helix_bc.ngc` | B/C helix 五轴轨迹 | Web 必须 stage 并进入路径对比 |
|
||||
| `boat-xyzbc.ngc` | 额外演示程序 | Web 必须 stage 并可作为验收程序 |
|
||||
|
||||
## JSON 证据对标
|
||||
|
||||
native evidence、Web evidence、compare evidence 必须覆盖:
|
||||
|
||||
- `startupSequence`:启动/初始化顺序和等效组件。
|
||||
- `iniDisplay`:DISPLAY/TRAJ/KINS/TASK/EMCMOT/EMCIO 关键字段。
|
||||
- `stagedFiles`:所有对标文件,包括 remap 子程序和 demo 程序全集。
|
||||
- `halNets`:switchkins、PyVCP、Vismach、tool-offset、joint feedback 连接。
|
||||
- `kinematicsPins`:offset、rot-point、conventional-directions、tool-offset。
|
||||
- `axisJointLimits`:X/Y/Z/B/C 和 JOINT_0..4 限制、单位、速度/加速度。
|
||||
- `switchkinsTransitions`:M429/M428/M430 的命令、HAL pin 和状态变化。
|
||||
- `toolTable`:T/P/Z/D 解析和当前工具偏置。
|
||||
- `previewPath`:刀具预览路径,20ms 统一采样。
|
||||
- `executionPath`:刀具执行路径,20ms 统一采样。
|
||||
- `pathComparison`:native/Web 预览与执行路径误差统计。
|
||||
- `uiEquivalence`:AXIS/PyVCP/Vismach 在 Web 中的等效控件和状态。
|
||||
|
||||
## 当前主要缺口
|
||||
|
||||
1. WASM artifact 尚未构建,`wasm-port/build/wasm` 缺少 kinematics/core/tp/task-hal `.js/.wasm`。
|
||||
2. Web evidence 还未记录完整 `startupSequence`、`halNets`、`kinematicsPins`、`axisJointLimits`。
|
||||
3. Web UI 还需按 AXIS 等效面板补齐 jog、override、tool editor、Ngcgui 子程序入口。
|
||||
4. Vismach 等效模型还需按 `xyzbc-trt-gui.py` 的 pin 和模型层级做验收。
|
||||
5. 刀具预览路径和执行路径 JSON 采集尚未实现。
|
||||
6. `boat-xyzbc.ngc` 和 Ngcgui 子程序的 Web 可执行验收尚未完成。
|
||||
@@ -0,0 +1,369 @@
|
||||
# 08-xyzbc-trt 界面与图标分析
|
||||
|
||||
## 目标
|
||||
|
||||
本文面向后续 Web 数控系统界面开发,集中整理 `xyzbc-trt` 相关的界面组成、交互入口和图标资产。分析依据来自:
|
||||
|
||||
- LinuxCNC `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini`
|
||||
- LinuxCNC `xyzbc-trt.xml` PyVCP 面板与 `switchkins_postgui.hal`
|
||||
- LinuxCNC `xyzbc-trt-gui.py` Vismach 三维机床模型
|
||||
- Web 项目 `app/src/ui/gmoccapy-shell.js`
|
||||
- Web 项目 `app/src/profiles/xyzbc-trt.js`
|
||||
- Web 图标清单 `app/src/ui-reference/gmoccapy-button-icons.json`
|
||||
- Web 图标注册表 `app/src/ui/gmoccapy-icon-registry.js`
|
||||
|
||||
## xyzbc-trt 机床界面基线
|
||||
|
||||
| 项 | 内容 |
|
||||
| --- | --- |
|
||||
| 机床配置 | `sim-xyzbc-trt-kins (switchkins)` |
|
||||
| 坐标/轴 | `XYZBC`,5 轴/5 joints |
|
||||
| 主界面来源 | LinuxCNC AXIS |
|
||||
| 右侧扩展面板 | PyVCP `SWITCHKINS` |
|
||||
| 三维机床 | Vismach `xyzbc-trt-gui` |
|
||||
| 默认程序 | `demos/xyzbc_switchkins.ngc` |
|
||||
| 工具表 | `xyzbc-trt.tbl` |
|
||||
| 参数文件 | `xyzbc.var` |
|
||||
| 运动学 | `xyzbc-trt-kins sparm=identityfirst` |
|
||||
| 切换模式 | `M429` identity、`M428` XYZBC TCP、`M430` USERK |
|
||||
|
||||
## 必须覆盖的界面
|
||||
|
||||
### 1. 主工作台 Shell
|
||||
|
||||
Web 首屏应直接是可操作 CNC 仿真界面,不做营销页。当前 `gmoccapy-shell` 已拆出以下区域:
|
||||
|
||||
| 区域 | Web region | 必备内容 | 关键状态 |
|
||||
| --- | --- | --- | --- |
|
||||
| 标题/会话栏 | `titlebar` | 项目名、profile 选择、会话名、来源、当前行、运行状态 | `machineProfile`、`sessionName`、`sourceMode`、`machine.mode` |
|
||||
| 五轴预览 | `preview` | 3D/Canvas 机床、刀路、TCP、刀轴、当前程序、工具摘要、RTCP 状态 | `preview`、`toolPreview`、`toolAxisVector`、`rtcpState` |
|
||||
| DRO 坐标 | `dro` | X/Y/Z/A/B/C、G54/Abs、DTG、TCP、tool-axis、RTCP 状态 | `dro`、`toolAxisVector` |
|
||||
| G-code/MDI | `gcode` | 程序行、当前行、高亮、执行状态、LinuxCNC source 选择、staging、MDI 输入、MDI 历史 | `programLines`、`activeLine`、`machineFileStaging`、`mdiHistory` |
|
||||
| 右侧状态栏 | `status-sidebar` | 急停、上电、复位、AUTO、MANUAL、JOG、MDI、IDENTITY、TCP | task gate、mode、estop、power、switchkins |
|
||||
| 信息/诊断页 | `info-tabs` | Tool info、G-code properties、gmoccapy diagnostics、LinuxCNC parity、Task/HAL、HAL pins | runtime readiness、source map、HAL/model 状态 |
|
||||
| Override | `override` | Rapid override、Feed override、ignore limits、optional block、optional stop | `feed`、`gmoccapyGui` |
|
||||
| 主轴/冷却 | `spindle-coolant` | Flood、Mist、主轴 FWD/STOP/REV、RPM、spindle override | `coolant`、`spindle` |
|
||||
| 底部控制栏 | `bottom-controls` | Open、Reload、Run、Stop、Pause/Resume、Step、Home、Tool、Touch、MDI、Full、Save/Restore、Audit | command gates、session、program run |
|
||||
|
||||
### 2. AXIS 等效页面
|
||||
|
||||
LinuxCNC 原生 `xyzbc-trt` 使用 AXIS,因此 Web 需要覆盖这些 AXIS 语义:
|
||||
|
||||
| 原生 AXIS 区域 | Web 等效模块 | 开发要点 |
|
||||
| --- | --- | --- |
|
||||
| 菜单/工具栏 | 底部控制栏 + 文件/编辑/工具页入口 | 文件打开、重载、运行、暂停、停止、单步、从行运行、编辑 |
|
||||
| 程序文本区 | G-code panel | 当前行高亮、执行进度、状态、解释器/canonical 来源 |
|
||||
| 预览区 | Preview panel | 机床模型、完整预览路径、已执行路径、视角/缩放/清除 |
|
||||
| 坐标显示 | DRO panel | XYZBC、DTG、G54/Abs、TCP、tool-axis |
|
||||
| MDI | MDI panel | 输入框、执行按钮、历史/快捷命令、M428/M429/M430 |
|
||||
| 状态栏 | Sidebar + titlebar | ESTOP、POWER、MODE、RUN、PAUSE、HOMED、INTERP/TASK |
|
||||
| Override | Override panel | Feed/Rapid/Spindle override、可选段跳过、可选停止 |
|
||||
|
||||
### 3. PyVCP SWITCHKINS 面板
|
||||
|
||||
原生 `xyzbc-trt.xml` 提供一个必须在 Web 中等效实现的 PyVCP 面板:
|
||||
|
||||
| 控件 | 文本 | HAL pin/net | LinuxCNC 动作 | Web 动作 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `kinstype-legends` | `0:IDENTITY` / `1: XYZBC` / `2: USERK` | `kinstype.is-0/1/2 -> pyvcp.multilabel.0.legend*` | 显示当前 kinematics 类型 | 高亮当前 switchkins 类型 |
|
||||
| `type0-button` | `IDENTITY` | `pyvcp.type0-button -> halui.mdi-command-00` | `M429` | `SET_KINS_TYPE identity` |
|
||||
| `type1-button` | `TCP:XYZBC` | `pyvcp.type1-button -> halui.mdi-command-01` | `M428` | `SET_KINS_TYPE tcp-xyzbc` |
|
||||
| `type2-button` | `userk` | `pyvcp.type2-button -> halui.mdi-command-02` | `M430` | USERK 占位/受 gate 控制 |
|
||||
| `vismach-clear` | `vismach-clear` | `pyvcp.vismach-clear -> vismach.plotclear` | 清除 Vismach 轨迹 | `CLEAR_PREVIEW` |
|
||||
|
||||
### 4. Vismach 等效三维机床界面
|
||||
|
||||
Web 五轴场景必须按 `xyzbc-trt-gui.py` 的 HAL 语义驱动,不应只画静态模型。
|
||||
|
||||
| Vismach/HAL 信号 | 来源 | 目标 | Web 展示 |
|
||||
| --- | --- | --- | --- |
|
||||
| `table-x` | `joint.0.pos-fb` | `xyzbc-trt-gui.table-x` | 工作台 X 平移 |
|
||||
| `saddle-y` | `joint.1.pos-fb` | `xyzbc-trt-gui.saddle-y` | 鞍座 Y 平移 |
|
||||
| `spindle-z` | `joint.2.pos-fb` | `xyzbc-trt-gui.spindle-z` | 主轴 Z 平移 |
|
||||
| `tilt-b` | `joint.3.pos-fb` | `xyzbc-trt-gui.tilt-b` | B 倾斜轴 |
|
||||
| `rotate-c` | `joint.4.pos-fb` | `xyzbc-trt-gui.rotate-c` | C 回转轴 |
|
||||
| `tool-offset` | `motion.tooloffset.z` / `xyzbc-trt-kins.tool-offset` | GUI + kins | 刀长/刀具 TCP 偏置 |
|
||||
| `x-offset` | `xyzbc-trt-kins.x-offset` | GUI | TRT 几何 X 偏置,默认 `-20` |
|
||||
| `z-offset` | `xyzbc-trt-kins.z-offset` | GUI | TRT 几何 Z 偏置,默认 `-15` |
|
||||
|
||||
### 5. 文件/程序页面
|
||||
|
||||
| 页面/状态 | 必备能力 | 关联图标 |
|
||||
| --- | --- | --- |
|
||||
| 程序加载 | 打开本地 `.ngc/.nc/.tap/.gcode/.txt`,选择 LinuxCNC staged source | `open_file`、`select_file` |
|
||||
| 文件浏览 | 上级目录、Home、Jump to、刷新、上一项/下一项、选择、返回 | `chevron_up`、`home_folder`、`user_defined_folder`、`refresh`、`chevron_left/right`、`back_to_app` |
|
||||
| 程序运行 | Run、Stop、Pause、Step、Run from line、Reload、Optional block | `play`、`stop`、`pause`、`pause_active`、`step`、`run_from_line`、`refresh`、`skip_optional_*` |
|
||||
| 编辑 | 编辑、保存、另存、新建、撤销、重做、注释、搜索、分屏预览 | `edit_code`、`save`、`save_as`、`new_document`、`edit_undo`、`edit_redo`、`comment`、`split_view` |
|
||||
|
||||
### 6. 手动/JOG/回零/对刀页面
|
||||
|
||||
| 页面 | 必备控件 | xyzbc-trt 注意点 |
|
||||
| --- | --- | --- |
|
||||
| 回零 | Ref all、Unref all、X/Y/Z/B/C 单轴回零、返回、分页 | XYZBC 应使用 X/Y/Z/B/C;A 图标是资产存在但本机型不应作为主轴显示 |
|
||||
| Touch off | X/Y/Z/B/C touch off、返回、分页、可选 block height | 同上,优先按当前 profile 轴生成 |
|
||||
| Jog | 连续/增量、慢速/快速、Ignore limits、轴 jog、关节 jog | 非平凡 kinematics 下 joint jog 需要单独 gate |
|
||||
| MDI | MDI 输入、历史命令、M428/M429/M430 快捷 | M428/M429/M430 是 switchkins 核心入口 |
|
||||
|
||||
### 7. 刀具/偏置/设置/诊断页面
|
||||
|
||||
| 页面 | 必备能力 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| Tool page | 选择刀具、换刀、M61 Q 设置当前刀、X/Z tool touch off、ToolEdit 添加/删除/保存/刷新/计算器 | `xyzbc-trt.tbl` 是数据源 |
|
||||
| Offset page | 坐标偏置计算器、编辑 offsets、set selected、zero G92 | 文字按钮为主,少量计算器图标 |
|
||||
| Settings page | 声音、字体、DRO/DTG/offset 显示、键盘行为、窗口模式、run from line、unlock、tool measurement | 很多控件无图标,按表单控件实现 |
|
||||
| Diagnostics | LinuxCNC parity、Task/HAL、INI、source map、HAL pins、gmoccapy comms、native/Web 对比 | 以只读诊断表格为主 |
|
||||
|
||||
## Web 已注册核心图标
|
||||
|
||||
`app/src/ui/gmoccapy-icon-registry.js` 当前直接注册的核心按钮如下,开发首屏应优先使用这些 id:
|
||||
|
||||
| buttonId | 语义 | active 图标 | inactive/default 图标 |
|
||||
| --- | --- | --- | --- |
|
||||
| `tbtn_estop` | 急停/急停复位 | `main_switch_on` | `main_switch_off` |
|
||||
| `tbtn_on` | 机器上电 | `power_on` | `power_off` |
|
||||
| `rbt_manual` | 手动模式 | `mode_manual_active` | `mode_manual_inactive` |
|
||||
| `rbt_mdi` | MDI 模式 | `mode_mdi_active` | `mode_mdi_inactive` |
|
||||
| `rbt_auto` | Auto 模式 | `mode_auto_active` | `mode_auto_inactive` |
|
||||
| `tbtn_setup` | 设置页 | `mode_settings_active` | `mode_settings_inactive` |
|
||||
| `tbtn_user_tabs` | 用户/Jog 页 | `mode_user_tabs_active` | `mode_user_tabs_inactive` |
|
||||
| `btn_load` | 打开程序 | - | `open_file` |
|
||||
| `btn_reload` | 重载 | - | `refresh` |
|
||||
| `btn_run` | 运行 | - | `play` |
|
||||
| `btn_stop` | 停止 | - | `stop` |
|
||||
| `tbtn_pause` | 暂停 | `pause_active` | `pause` |
|
||||
| `btn_step` | 单步 | - | `step` |
|
||||
| `btn_homing` | 回零菜单 | - | `ref_all` |
|
||||
| `btn_tool` | 刀具页 | - | `hsk_mill_tool` |
|
||||
| `btn_touch` | 对刀/坐标设定 | - | `touch_off` |
|
||||
| `ref_all` | 全部回零 | - | `ref_all` |
|
||||
| `btn_fullscreen` | 全屏预览 | `fullscreen_close` | `fullscreen_open` |
|
||||
| `rbt_forward` | 主轴正转 | `spindle_right_on` | `spindle_right` |
|
||||
| `rbt_reverse` | 主轴反转 | `spindle_left_on` | `spindle_left` |
|
||||
| `rbt_stop` | 主轴停止 | `spindle_stop_on` | `spindle_stop` |
|
||||
| `tbtn_flood` | Flood 冷却 | `coolant_flood_active` | `coolant_flood_inactive` |
|
||||
| `tbtn_mist` | Mist 冷却 | `coolant_mist_active` | `coolant_mist_inactive` |
|
||||
| `btn_zoom_in` | 放大 | - | `zoom_in` |
|
||||
| `btn_zoom_out` | 缩小 | - | `zoom_out` |
|
||||
| `rbt_view_x` | X 视角 | - | `tool_axis_x` |
|
||||
| `rbt_view_y` | Y 视角 | - | `tool_axis_y` |
|
||||
| `rbt_view_z` | Z 视角 | - | `tool_axis_z` |
|
||||
| `rbt_view_p` | 透视/Fit | - | `tool_axis_p` |
|
||||
| `tbtn_view_tool_path` | 刀路显示/清除 | - | `toolpath` |
|
||||
| `tbtn_view_dimension` | 尺寸显示 | - | `dimensions` |
|
||||
| `btn_exit` | 退出 | - | `logout` |
|
||||
| `btn_save_session` | 保存会话 | - | `save` |
|
||||
|
||||
## 图标分类总览
|
||||
|
||||
原始 gmoccapy 图标清单包含 `211` 行记录,当前复制到项目资产中的图标文件为 `112` 个。按界面类别统计如下:
|
||||
|
||||
| 类别 | 行数 | 按钮数 | 主要按钮 |
|
||||
| --- | ---: | ---: | --- |
|
||||
| 右侧主状态栏 | 14 | 7 | `rbt_auto`、`rbt_manual`、`rbt_mdi`、`tbtn_estop`、`tbtn_on`、`tbtn_setup`、`tbtn_user_tabs` |
|
||||
| 底部主按钮栏 | 7 | 6 | `btn_exit`、`btn_homing`、`btn_tool`、`btn_touch`、`tbtn_fullsize_preview0`、`tbtn_switch_mode` |
|
||||
| Auto 程序运行栏 | 13 | 10 | `btn_edit`、`btn_from_line`、`btn_load`、`btn_reload`、`btn_run`、`btn_step`、`btn_stop`、`tbtn_pause` |
|
||||
| MDI/宏按钮栏 | 11 | 9 | `calculator`、`keyboard`、`macro_0..4`、`next_button`、`previous_button` |
|
||||
| 回零按钮栏 | 10 | 10 | `home_axis_x/y/z/a/b`、`ref_all`、`unref_all`、分页、返回 |
|
||||
| 对刀/坐标设定按钮栏 | 9 | 9 | `touch_x/y/z/a/b`、分页、返回、`block_height` |
|
||||
| 手动/Jog 面板 | 4 | 2 | `chk_ignore_limits`、`tbtn_turtle_jog` |
|
||||
| Jog 增量选择栏 | 6 | 6 | `rbt_0..5` |
|
||||
| Jog 轴按钮 | 10 | 10 | `x+/x-`、`y+/y-`、`z+/z-`、`a+/a-`、`b+/b-` |
|
||||
| Jog 关节按钮 | 10 | 10 | `0+/0-` 到 `4+/4-` |
|
||||
| 冷却/主轴控制 | 11 | 5 | `rbt_forward`、`rbt_reverse`、`rbt_stop`、`tbtn_flood`、`tbtn_mist` |
|
||||
| 预览/视图 | 10 | 10 | 缩放、视角、尺寸、刀路、清除 |
|
||||
| 编辑器搜索/编辑 | 8 | 8 | 注释、撤销、重做、搜索、替换 |
|
||||
| 编辑页底部栏 | 9 | 8 | 返回、计算器、键盘、新建、重载、保存、另存、分屏 |
|
||||
| 刀具页底部栏 | 6 | 6 | 返回、换刀、设置当前刀、按编号选择、X/Z tool touch off |
|
||||
| 文件选择栏 | 9 | 9 | 返回、上级、home、jump、刷新、上一项、下一项、选择、排序 |
|
||||
| 内嵌 ToolEdit 控件 | 5 | 5 | 添加、保存、计算器、删除、刷新 |
|
||||
| 内嵌 OffsetPage 控件 | 4 | 4 | 计算器、编辑、设置选中、Zero G92 |
|
||||
| 设置页控件 | 42 | 42 | 声音、字体、DRO、DTG、offset、键盘、窗口、unlock、tool measurement |
|
||||
| Glade 静态按钮 | 13 | 13 | HAL meter/scope/show、status、calibration、classicladder 等 |
|
||||
|
||||
## 已复制图标文件清单
|
||||
|
||||
图标根目录:
|
||||
|
||||
```text
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/assets/gmoccapy-icons
|
||||
```
|
||||
|
||||
### 状态/模式/电源
|
||||
|
||||
- `img_emergency__main_switch_on__48.png`
|
||||
- `img_emergency_off__main_switch_off__48.png`
|
||||
- `img_machine_on__power_on__48.png`
|
||||
- `img_machine_off__power_off__48.png`
|
||||
- `img_auto_on__mode_auto_active__48.png`
|
||||
- `img_auto__mode_auto_inactive__48.png`
|
||||
- `img_manual_on__mode_manual_active__48.png`
|
||||
- `img_manual__mode_manual_inactive__48.png`
|
||||
- `img_mdi_on__mode_mdi_active__48.png`
|
||||
- `img_mdi__mode_mdi_inactive__48.png`
|
||||
- `img_settings_on__mode_settings_active__48.png`
|
||||
- `img_settings__mode_settings_inactive__48.png`
|
||||
- `img_user_tabs_on__mode_user_tabs_active__48.png`
|
||||
- `img_user_tabs__mode_user_tabs_inactive__48.png`
|
||||
|
||||
### 程序运行/编辑/文件
|
||||
|
||||
- `img_open__open_file__32.svg`
|
||||
- `img_reload1__refresh__32.png`
|
||||
- `img_run__play__32.png`
|
||||
- `img_stop__stop__32.png`
|
||||
- `img_pause__pause__32.png`
|
||||
- `img_pause_active__pause_active__32.png`
|
||||
- `img_step__step__32.png`
|
||||
- `img_run_from__run_from_line__48.png`
|
||||
- `img_skip_optional_active__skip_optional_active__32.png`
|
||||
- `img_skip_optional_inactive__skip_optional_inactive__32.png`
|
||||
- `img_editor__edit_code__32.png`
|
||||
- `img_edit-undo__edit_undo__32.png`
|
||||
- `img_edit-redo__edit_redo__32.png`
|
||||
- `img_edit_comment__comment__32.png`
|
||||
- `img_edit_menu_new__new_document__32.svg`
|
||||
- `img_edit_menu_reload__refresh__32.png`
|
||||
- `img_edit_menu_save__save__32.png`
|
||||
- `img_edit_menu_save_as__save_as__32.png`
|
||||
- `img_edit_menu_close__back_to_app__48.svg`
|
||||
- `img_edit_menu_calculator__calculator_open__32.png`
|
||||
- `img_edit_menu_keyboard__keyboard__32.png`
|
||||
- `img_edit_menu_keyboard_hide__keyboard_hide__32.png`
|
||||
- `img_split_view__split_view__32.png`
|
||||
|
||||
### 预览/视角/刀路
|
||||
|
||||
- `img_zoom_in__zoom_in__24.png`
|
||||
- `img_zoom_out__zoom_out__24.png`
|
||||
- `img_view_x__tool_axis_x__24.png`
|
||||
- `img_view_y__tool_axis_y__24.png`
|
||||
- `img_view_y2__tool_axis_y_inv__24.png`
|
||||
- `img_view_z__tool_axis_z__24.png`
|
||||
- `img_view_p__tool_axis_p__24.png`
|
||||
- `img_tool_path__toolpath__24.png`
|
||||
- `img_dimensions__dimensions__24.png`
|
||||
- `img_tool_clear__clear__24.png`
|
||||
- `img_fullsize_preview0_open__fullscreen_open__48.png`
|
||||
- `img_fullsize_preview0_close__fullscreen_close__48.png`
|
||||
- `img_fullsize_preview1_open__fullscreen_open__48.png`
|
||||
- `img_fullsize_preview1_close__fullscreen_close__48.png`
|
||||
|
||||
### 主轴/冷却
|
||||
|
||||
- `img_spindle_forward__spindle_right__48.png`
|
||||
- `img_spindle_forward_on__spindle_right_on__48.png`
|
||||
- `img_spindle_reverse__spindle_left__48.png`
|
||||
- `img_spindle_reverse_on__spindle_left_on__48.png`
|
||||
- `img_spindle_stop__spindle_stop__48.png`
|
||||
- `img_spindle_stop_on__spindle_stop_on__48.png`
|
||||
- `img_coolant_on__coolant_flood_active__48.png`
|
||||
- `img_coolant_off__coolant_flood_inactive__48.png`
|
||||
- `img_mist_on__coolant_mist_active__48.png`
|
||||
- `img_mist_off__coolant_mist_inactive__48.png`
|
||||
|
||||
### 回零/对刀/Jog
|
||||
|
||||
- `img_ref_all__ref_all__48.png`
|
||||
- `img_ref_menu__ref_all__48.png`
|
||||
- `img_unref_all__unref_all__48.png`
|
||||
- `img_ref_x__ref_x__48.png`
|
||||
- `img_ref_y__ref_y__48.png`
|
||||
- `img_ref_z__ref_z__48.png`
|
||||
- `img_ref_a__ref_a__48.png`
|
||||
- `img_ref_b__ref_b__48.png`
|
||||
- `img_ref_menu_close__back_to_app__48.svg`
|
||||
- `img_ref_paginate_next__chevron_right__32.svg`
|
||||
- `img_ref_paginate_prev__chevron_left__32.svg`
|
||||
- `img_touch_off__touch_off__48.png`
|
||||
- `img_touch_x__touch_x__48.png`
|
||||
- `img_touch_y__touch_y__48.png`
|
||||
- `img_touch_z__touch_z__48.png`
|
||||
- `img_touch_a__touch_a__48.png`
|
||||
- `img_touch_b__touch_b__48.png`
|
||||
- `img_touch_menu_close__back_to_app__48.svg`
|
||||
- `img_touch_paginate_next__chevron_right__32.svg`
|
||||
- `img_touch_paginate_prev__chevron_left__32.svg`
|
||||
- `img_continuous__jog_continuous__24.png`
|
||||
- `img_turtle_jog__jog_speed_slow__32.png`
|
||||
- `img_rabbit_jog__jog_speed_fast__32.png`
|
||||
|
||||
### 文件浏览/导航
|
||||
|
||||
- `img_back_file_load__back_to_app__48.svg`
|
||||
- `img_back_tool__back_to_app__48.svg`
|
||||
- `img_close__logout__48.png`
|
||||
- `img_dir_up__chevron_up__32.svg`
|
||||
- `img_home__home_folder__32.svg`
|
||||
- `img_jump_to__user_defined_folder__32.svg`
|
||||
- `img_refresh_dir__refresh__32.png`
|
||||
- `img_sel_next__chevron_right__32.svg`
|
||||
- `img_sel_prev__chevron_left__32.svg`
|
||||
- `img_select__select_file__32.png`
|
||||
- `img_up__chevron_up__24.svg`
|
||||
- `img_down__chevron_down__24.svg`
|
||||
|
||||
### 刀具/ToolEdit/Offset
|
||||
|
||||
- `img_tools__hsk_mill_tool__48.png`
|
||||
- `img_toolchange__mill_tool_change__48.png`
|
||||
- `img_index_tool__mill_tool_set_num__48.svg`
|
||||
- `img_tool_by_no__mill_tool_change_num__48.svg`
|
||||
- `img_tool_add__add__32.png`
|
||||
- `img_tool_save__save__32.png`
|
||||
- `img_tool_calculator__calculator_open__32.png`
|
||||
- `img_tool_delete__delete__32.png`
|
||||
- `img_tool_reload__refresh__32.png`
|
||||
- `img_offset_calculator__calculator_open__32.png`
|
||||
|
||||
### MDI/宏/键盘
|
||||
|
||||
- `img_macro_menu_calculator__calculator_open__32.png`
|
||||
- `img_macro_menu_keyboard__keyboard__32.png`
|
||||
- `img_macro_menu_keyboard_hide__keyboard_hide__32.png`
|
||||
- `img_macro_menu_stop__stop__32.png`
|
||||
- `macro_0__macro_image.png`
|
||||
- `macro_4__macro_image.png`
|
||||
|
||||
## xyzbc-trt 专用界面规则
|
||||
|
||||
1. 轴显示以 `XYZBC` 为准。A 轴相关图标可保留为通用资产,但 `xyzbc-trt` 主界面、回零、Touch Off、DRO、Jog 应显示 X/Y/Z/B/C。
|
||||
2. `TCP:XYZBC` 是核心按钮,不应写成 `TCP:XYZAC`。对应 MDI 命令为 `M428`。
|
||||
3. `IDENTITY` 对应 `M429`,在 `identityfirst` 配置中 switchkins type `0` 是 identity。
|
||||
4. `USERK` 对应 `M430`,若 Web runtime 暂未实现完整 USERK,应保留按钮但通过 gate/提示标明状态。
|
||||
5. `vismach-clear` 必须清除 Web 机床/刀路预览,不应只清除文本状态。
|
||||
6. B/C 角轴限制、joint 限制和 TCP/toolAxis 计算必须来自 profile/INI/kinematics runtime,不应从 UI 字符串推断。
|
||||
7. 诊断页面要明确区分“图标/界面参考已具备”和“WASM artifact/runtime 已具备”,避免把 UI 对标误判为运动语义完成。
|
||||
|
||||
## 开发组件拆分建议
|
||||
|
||||
| 组件 | 输入状态 | 输出动作 |
|
||||
| --- | --- | --- |
|
||||
| `MachineTitlebar` | profile、session、source、mode、activeLine | `select-profile` |
|
||||
| `FiveAxisPreview` | path samples、joint pose、tcp、toolAxis、toolPreview、selectedView | view/zoom/fit/clear/fullscreen |
|
||||
| `DroPanel` | XYZBC DRO、DTG、TCP、toolAxis、offset mode | 切换 DRO 显示模式 |
|
||||
| `ProgramPanel` | program lines、activeLine、execution feedback、source list | open/reload/stage/select source/run MDI |
|
||||
| `StatusSidebar` | task policy、estop、power、mode、switchkins | estop/power/reset/mode/kintype |
|
||||
| `PyvcpSwitchkinsPanel` | kinstype active、panel schema | M429/M428/M430/clear |
|
||||
| `OverridePanel` | feed/rapid/spindle override、optional block/stop | override step/reset/toggle |
|
||||
| `SpindleCoolantPanel` | spindle、coolant、gates | FWD/STOP/REV/flood/mist |
|
||||
| `HomingPanel` | axes、homed state | home axis/ref all/unref all |
|
||||
| `TouchOffPanel` | axes、offset context | touch axis/block height |
|
||||
| `JogPanel` | jog axis/joint mode、increment、limits | jog press/release、increment、ignore limits |
|
||||
| `ToolPage` | tool table、selected tool、tool offsets | select/change/index/save/edit |
|
||||
| `FilePage` | OPFS/project files、current dir、selected file | navigate/select/open |
|
||||
| `SettingsPage` | gmoccapy settings | form updates |
|
||||
| `DiagnosticsPage` | INI、HAL、Task/HAL、WASM、parity、evidence | audit/refresh |
|
||||
|
||||
## 最小首屏 icon 集合
|
||||
|
||||
如果先实现可运行首屏,必须先接入这些图标:
|
||||
|
||||
- 急停/上电:`tbtn_estop`、`tbtn_on`
|
||||
- 模式:`rbt_manual`、`rbt_mdi`、`rbt_auto`
|
||||
- 程序:`btn_load`、`btn_reload`、`btn_run`、`btn_stop`、`tbtn_pause`、`btn_step`
|
||||
- Switchkins:`IDENTITY`、`TCP:XYZBC`、`USERK` 可先用文字按钮,但状态要接 HAL/MDI 语义
|
||||
- 预览:`rbt_view_x`、`rbt_view_y`、`rbt_view_z`、`rbt_view_p`、`btn_zoom_in`、`btn_zoom_out`、`tbtn_view_tool_path`
|
||||
- 主轴/冷却:`rbt_forward`、`rbt_stop`、`rbt_reverse`、`tbtn_flood`、`tbtn_mist`
|
||||
- 回零/刀具/对刀:`btn_homing`、`btn_tool`、`btn_touch`
|
||||
- 会话/退出:`btn_save_session`、`btn_exit`
|
||||
|
||||
364
web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md
Normal file
@@ -0,0 +1,364 @@
|
||||
<!-- 本文件由 doc/xyzbc-trt-web-cnc-simulation-design-task-and-technical-plan.docx 整合生成,用于 working 目录内继续开发和验收。 -->
|
||||
|
||||
> 来源 DOCX:`../doc/xyzbc-trt-web-cnc-simulation-design-task-and-technical-plan.docx`
|
||||
>
|
||||
> 整合时间:2026-07-02。本文保留 DOCX 的任务书、技术方案、程序逻辑分析和状态联锁内容,图片引用到 `../doc/assets/`。
|
||||
|
||||
# xyzbc-trt Web 数控仿真系统
|
||||
|
||||
## 设计任务书和技术方案
|
||||
|
||||
完全对标 LinuxCNC xyzbc-trt 五轴 table rotary/tilting 仿真配置
|
||||
|
||||
| 项目 | 内容 |
|
||||
| --- | --- |
|
||||
| 原型系统 | /home/mes123456/cnc_wams/linuxcnc |
|
||||
| 启动命令 | /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 |
|
||||
| 目标产物 | 浏览器端 Web 数控仿真界面、五轴机床模型、switchkins 逻辑、路径预览与执行对比 JSON |
|
||||
| 文档位置 | /home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/doc |
|
||||
| 编制日期 | 2026-07-02 |
|
||||
|
||||
## 1. 项目目标
|
||||
|
||||
本项目建设一个 Web 数控仿真系统,功能和行为完全对标 LinuxCNC 真实运行配置 xyzbc-trt.ini。Web 系统不是展示页,而是首屏即进入数控仿真工作台,提供程序加载、预览、DRO、MDI、PyVCP 等价控件、五轴机床运动显示、switchkins 模式切换、刀具路径采样、执行过程记录和误差对比。
|
||||
|
||||
对标基线以已编译成功并能运行的 /home/mes123456/cnc_wams/linuxcnc 为准,旧路径 历史旧 LinuxCNC 目录 不再作为本方案的运行基线。
|
||||
|
||||
核心验收原则:同一份配置、同一份 G-code、同一运动学模式、同一采样周期、同一 JSON 字段,分别采集 LinuxCNC 真实系统和 Web 仿真系统的预览路径与执行路径,逐点比对位置、姿态、运动学模式和 HAL 状态。
|
||||
|
||||
## 2. 原型系统运行证据
|
||||
|
||||
2.1 当前启动命令
|
||||
|
||||
| /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 |
|
||||
| --- |
|
||||
|
||||
2.2 当前关键进程
|
||||
|
||||
| 进程 | 对标含义 |
|
||||
| --- | --- |
|
||||
| scripts/linuxcnc xyzbc-trt.ini | LinuxCNC 主启动入口,Web 端需实现等价启动会话和配置装载流程。 |
|
||||
| linuxcncsvr | NML/状态服务,Web 端需提供统一运行状态中心。 |
|
||||
| rtapi_app load tpmod | 运动规划模块,Web 端需实现轨迹规划与采样接口。 |
|
||||
| milltask | 任务解释和程序执行,Web 端需实现程序状态机、运行、暂停、复位、MDI。 |
|
||||
| halui | HAL UI 指令通道,Web 端需复刻 PyVCP 按钮到 MDI 命令的连接。 |
|
||||
| hal_manualtoolchange | 手动换刀流程,Web 端需提供换刀提示和工具状态。 |
|
||||
| xyzbc-trt-gui | Vismach 五轴机床模型,Web 端需使用 Three.js 对标机床结构和运动。 |
|
||||
| axis -ini xyzbc-trt.ini | AXIS 主界面,Web 端需对标界面信息架构和操作入口。 |
|
||||
|
||||

|
||||
|
||||
图 1:真实 LinuxCNC 会话抓取的 AXIS 主界面,包含预览、DRO、PyVCP SWITCHKINS 面板、程序区和状态栏。
|
||||
|
||||

|
||||
|
||||
图 2:桌面级运行截图,用于保留真实执行环境和窗口布局证据。
|
||||
|
||||
2.3 HAL 状态基线
|
||||
|
||||
| HAL 项 | 当前值或连接 | Web 对标要求 |
|
||||
| --- | --- | --- |
|
||||
| motion.switchkins-type | 0,由 :kinstype-select 驱动 | 实现 0:IDENTITY、1:XYZBC、2:USERK 三态切换。 |
|
||||
| kinstype.is-0/1/2 | TRUE/FALSE/FALSE | 驱动 Web PyVCP multilabel 的当前模式显示。 |
|
||||
| joint.0..4.pos-fb | X/Y/Z/B/C 五轴反馈均为 0 | 映射到 Web DRO、机床模型关节和路径采样。 |
|
||||
| motion.tooloffset.z | 连接 :tool-offset | 影响 TCP 刀尖位置和机床模型刀具长度。 |
|
||||
| xyzbc-trt-kins.x-offset | -20 | Web 运动学参数必须使用同值。 |
|
||||
| xyzbc-trt-kins.z-offset | -15 | Web 运动学参数必须使用同值。 |
|
||||
| xyzbc-trt-kins.conventional-directions | FALSE | Web 端旋转方向和矩阵约定必须一致。 |
|
||||
|
||||
## 3. 完全对标范围
|
||||
|
||||
| LinuxCNC 文件或模块 | 真实功能 | Web 对标实现 |
|
||||
| --- | --- | --- |
|
||||
| xyzbc-trt.ini | 定义 AXIS、PyVCP、KINS、HAL、TRAJ、TASK、EMCIO、轴和关节参数。 | 实现 INI 解析器,生成 Web 会话配置、轴参数、速度限制、文件引用和 UI 初始状态。 |
|
||||
| xyzbc-trt.xml | 定义 SWITCHKINS multilabel、IDENTITY、TCP:XYZBC、userk、vismach-clear 按钮。 | 实现 PyVCP 等价面板,按钮通过 Web HAL 总线触发 MDI 命令或清除轨迹。 |
|
||||
| switchkins_postgui.hal | 把 PyVCP 控件接到 halui.mdi-command-00/01/02 和 vismach.plotclear。 | 实现 postgui HAL 装配层,保证 UI 控件不直接改状态,而是经 HAL 语义连接。 |
|
||||
| LIB:basic_sim.tcl | 生成仿真 HAL 基础链路。 | 建立基础 HAL 信号、仿真 joint、motion、halui、pyvcp、vismach 命名空间。 |
|
||||
| xyzbc-trt-kins.so | XYZBC table rotary/tilting 运动学和 switchkins。 | 实现或移植为 WASM/TypeScript 运动学模块,支持 identity、XYZBC TCP、userk。 |
|
||||
| xyzbc-trt-gui | Vismach 三维机床模型,随 HAL 引脚运动。 | 使用 Three.js 建立桌台、转台、倾斜轴、主轴、刀具、工件和路径轨迹。 |
|
||||
| xyzbc_switchkins.ngc | 默认打开的演示程序,调用 xyzbc_switchkins_sub。 | Web 端默认加载同一程序,预览曲线和执行曲线可导出 JSON。 |
|
||||
| remap_subs/*.ngc | M428/M429/M430 以及演示子程序。 | 支持 remap 调用或预编译宏展开,保证模式切换轨迹一致。 |
|
||||
| xyzbc-trt.tbl / xyzbc.var | 刀具表和 RS274 参数文件。 | Web 端加载、显示、持久化并参与 tooloffset 和程序执行。 |
|
||||
|
||||

|
||||
|
||||
图 3:LinuxCNC 原型系统与 Web 仿真系统的模块级对标关系。
|
||||
|
||||
## 4. Web 界面设计任务书
|
||||
|
||||
4.1 首屏布局
|
||||
|
||||
顶部:文件、机器、视图、帮助菜单,以及急停、上电、打开文件、运行、暂停、单步、停止、视图方向、清扫轨迹等图标按钮。
|
||||
|
||||
左侧:Manual Control 与 MDI 标签页,包含 Joint 0 到 4 选择、连续/增量点动、Home、Touch Off、Tool Touch Off、主轴控制和倍率滑块。
|
||||
|
||||
中间:Preview/DRO/程序标签页,预览页显示 Three.js 五轴机床、工件、刀具、坐标轴、尺寸标注和刀具路径。
|
||||
|
||||
右侧:SWITCHKINS 面板,显示 0:IDENTITY、1:XYZBC、2:USERK,并提供 IDENTITY、TCP:XYZBC、userk、vismach-clear 按钮。
|
||||
|
||||
底部:G-code 程序区、Active G-Codes、状态栏、错误和日志输出。
|
||||
|
||||
4.2 视觉和交互要求
|
||||
|
||||
| 界面区域 | 对标要求 | 验收证据 |
|
||||
| --- | --- | --- |
|
||||
| AXIS 工具栏 | 保留关键数控操作入口,按钮使用明确图标和 tooltip。 | 截图比对,操作事件 JSON。 |
|
||||
| DRO | 显示 X/Y/Z/B/C、joint 或 world 坐标、实际/命令位置。 | uiState.dro 与 LinuxCNC status 对比。 |
|
||||
| PyVCP | 按钮和 multilabel 文案、状态、HAL 连线语义一致。 | halPins.kinstype 和 uiState.pyvcp。 |
|
||||
| Preview | 显示默认程序的圆形/螺旋路径、刀尖、刀轴、XYZBC 坐标。 | previewPath.samples 和截图。 |
|
||||
| Vismach 等价模型 | 五轴结构、B/C 旋转、X/Y/Z 平移、tooloffset、x/z offset 生效。 | 模型姿态 JSON 和截图。 |
|
||||
|
||||
## 5. 技术方案
|
||||
|
||||
5.1 总体架构
|
||||
|
||||
| 层级 | 模块 | 职责 |
|
||||
| --- | --- | --- |
|
||||
| 文件层 | OPFS/IndexedDB 工作区 | 保存 ini/xml/hal/ngc/tbl/var/json,支持导入 LinuxCNC 原始目录。 |
|
||||
| 解析层 | INI/XML/HAL/NGC/TBL/VAR parser | 结构化解析配置、控件、信号、程序和参数,禁止手工硬编码配置结果。 |
|
||||
| 运行层 | Task/Interp/Motion/HAL runtime | 复刻 LinuxCNC 任务状态机、G-code 解释、运动规划、HAL pin/net。 |
|
||||
| 运动学层 | xyzbc-trt-kins | 实现 identity、XYZBC TCP、userk,输出关节、世界坐标、刀尖和刀轴。 |
|
||||
| 界面层 | Web UI 组件 | 对标 AXIS、PyVCP、DRO、MDI、程序窗口、状态栏。 |
|
||||
| 三维层 | Three.js | 五轴机床、工件、刀具、路径、坐标系、清轨迹和相机视图。 |
|
||||
| 证据层 | Evidence JSON + Compare report | 采集真实系统和 Web 系统,按同周期逐点比对。 |
|
||||
|
||||
5.2 switchkins 逻辑
|
||||
|
||||
Web 端必须复刻原型中的 switchkins 控制链路:PyVCP 按钮触发 halui.mdi-command-00/01/02,MDI 执行 M429/M428/M430,remap 子程序改变 motion.analog-out-03,再驱动 motion.switchkins-type。UI 当前模式由 kinstype.is-0/1/2 反向驱动,而不是由按钮直接写 UI 标签。
|
||||
|
||||
| 按钮 | HAL 目标 | MDI 命令 | 目标模式 |
|
||||
| --- | --- | --- | --- |
|
||||
| IDENTITY | halui.mdi-command-00 | M429 | 0:IDENTITY |
|
||||
| TCP:XYZBC | halui.mdi-command-01 | M428 | 1:XYZBC |
|
||||
| userk | halui.mdi-command-02 | M430 | 2:USERK |
|
||||
| vismach-clear | vismach.plotclear | 无 | 清除三维路径显示 |
|
||||
|
||||
5.3 五轴运动学和模型
|
||||
|
||||
Web 端机床模型采用 XYZBC table rotary/tilting 结构。X 对应 table-x,Y 对应 saddle-y,Z 对应 spindle-z,B 对应 tilt-b,C 对应 rotate-c。运动学参数使用原型系统当前 HAL 值:x-offset=-20、z-offset=-15、旋转点均为 0、conventional-directions=false。刀具长度来自 motion.tooloffset.z。
|
||||
|
||||
三维模型不只显示程序预览曲线,还必须在执行时按采样点刷新桌台、转台、主轴和刀具姿态。执行暂停、复位、清轨迹、模式切换后,模型状态和 JSON 状态必须同步。
|
||||
|
||||
5.4 路径采样和 JSON 比对
|
||||
|
||||
曲线采样周期固定为 samplePeriodMs = 20,即 50 Hz。LinuxCNC 真实系统和 Web 仿真系统必须使用相同采样周期、相同 sampleIndex、相同时间基准和相同坐标字段,禁止一端 10 ms、另一端 20 ms 或使用不同插补点。
|
||||
|
||||

|
||||
|
||||
图 4:刀具预览路径和执行路径 JSON 的同周期采样与逐点比对流程。
|
||||
|
||||
5.5 Evidence JSON 字段规范
|
||||
|
||||
| { "schema": "xyzbc-trt-evidence/v1", "source": "linuxcnc-native / web-sim", "samplePeriodMs": 20, "linuxcncRoot": "/home/mes123456/cnc_wams/linuxcnc", "ini": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini", "program": "./demos/xyzbc_switchkins.ngc", "runtime": {"taskState": 1, "interpState": 1, "axisMask": 55, "kinstype": 0}, "halPins": { "motion.switchkins-type": 0, "xyzbc-trt-kins.x-offset": -20, "xyzbc-trt-kins.z-offset": -15, "xyzbc-trt-kins.conventional-directions": false }, "previewPath": { "coordinateSystem": "XYZBC", "samples": [{ "sampleIndex": 0, "timeMs": 0, "line": 1, "joint": {"x": 0, "y": 0, "z": 0, "b": 0, "c": 0}, "world": {"x": 0, "y": 0, "z": 0, "b": 0, "c": 0}, "toolTip": {"x": 0, "y": 0, "z": 0}, "toolAxis": {"i": 0, "j": 0, "k": 1}, "kinstype": 0 }] }, "executionPath": {"samples": []}, "screenshots": []} |
|
||||
| --- |
|
||||
|
||||
5.6 对比报告字段
|
||||
|
||||
| 字段 | 说明 |
|
||||
| --- | --- |
|
||||
| sampleCount.native/web | 真实系统和 Web 系统采样点数量。 |
|
||||
| maxPositionError | X/Y/Z/B/C 最大逐点误差。 |
|
||||
| rmsPositionError | 路径整体均方根误差。 |
|
||||
| maxToolTipError | TCP 刀尖位置最大误差。 |
|
||||
| maxToolAxisErrorDeg | 刀轴方向最大角度误差。 |
|
||||
| firstMismatch | 首个超差点的 sampleIndex、line、timeMs、native/web 值。 |
|
||||
| uiEquivalence | AXIS/PyVCP/DRO/状态栏截图和 DOM 状态对比。 |
|
||||
| pass | 是否通过设定阈值。 |
|
||||
|
||||
## 6. 开发任务分解
|
||||
|
||||
| 阶段 | 任务 | 交付物 | 验收方式 |
|
||||
| --- | --- | --- | --- |
|
||||
| 阶段 1 | 导入并解析 xyzbc-trt.ini、XML、HAL、TBL、VAR、NGC 文件。 | 结构化配置 JSON、文件依赖图。 | 与 xyzbc-trt-runtime-files.md 逐项核对。 |
|
||||
| 阶段 2 | 搭建 AXIS 等价 Web UI 和 PyVCP 面板。 | 首屏数控工作台。 | 与真实 AXIS 截图逐区比对。 |
|
||||
| 阶段 3 | 实现 HAL 总线、halui、switchkins 状态机和 remap 命令链路。 | HAL 状态面板、MDI 命令记录。 | 按钮触发 M429/M428/M430 后状态一致。 |
|
||||
| 阶段 4 | 实现 XYZBC 运动学和 Three.js Vismach 等价模型。 | 五轴机床模型、刀具和工件。 | X/Y/Z/B/C 点动与 HAL pin 一致。 |
|
||||
| 阶段 5 | 实现 G-code 预览路径、执行路径、暂停/复位/单步。 | 预览轨迹、执行轨迹、状态机。 | 默认程序 xyzbc_switchkins.ngc 可回放。 |
|
||||
| 阶段 6 | 实现 native 和 web evidence JSON,固定 20 ms 采样周期。 | native-evidence.json、web-evidence.json。 | 字段、单位、sampleIndex 对齐。 |
|
||||
| 阶段 7 | 实现 compare-report 自动生成。 | compare-report.json、HTML 报告。 | 误差统计和首个差异点可追溯。 |
|
||||
|
||||
## 7. 验收标准
|
||||
|
||||
| 类别 | 必须通过的标准 |
|
||||
| --- | --- |
|
||||
| 路径标准 | 所有文档、配置和运行基线均指向 /home/mes123456/cnc_wams/linuxcnc。 |
|
||||
| 界面标准 | Web 首屏包含 AXIS 主要工作区、PyVCP SWITCHKINS 面板、预览区、DRO、程序区和状态栏。 |
|
||||
| 功能标准 | 默认加载 xyzbc_switchkins.ngc,支持 MDI、模式切换、清轨迹、点动、倍率、刀具和参数。 |
|
||||
| 运动学标准 | identity、XYZBC TCP、userk 模式状态和轨迹计算与真实系统一致。 |
|
||||
| JSON 标准 | 预览路径和执行路径同时导出,采样周期统一为 20 ms,字段一致。 |
|
||||
| 比对标准 | 能输出最大误差、RMS 误差、首个差异点、截图和通过/失败结论。 |
|
||||
| 证据标准 | 每次验收保存 LinuxCNC 原始截图、Web 截图、native JSON、web JSON、compare report。 |
|
||||
|
||||
## 8. 风险和控制措施
|
||||
|
||||
| 风险 | 影响 | 控制措施 |
|
||||
| --- | --- | --- |
|
||||
| LinuxCNC 内部解释器和 Web 解释器细节不一致 | 路径点或模式切换时序不同。 | 优先移植或复用 LinuxCNC 解析/运动学逻辑,保留 native evidence 作为回归基准。 |
|
||||
| 采样周期不一致 | 曲线无法逐点比较。 | 强制配置 samplePeriodMs=20,JSON schema 校验不允许缺省。 |
|
||||
| Three.js 模型和 Vismach 结构偏差 | 视觉对标通过但运动不一致。 | 每个关节都绑定 HAL pin,模型矩阵由运动学输出驱动。 |
|
||||
| UI 直接改状态绕过 HAL | 无法对标真实控制链路。 | PyVCP 控件只发 HAL/MDI 事件,状态由 HAL pin 回读。 |
|
||||
| 路径或旧目录混入 | 证据不可复现。 | 文档和脚本统一扫描旧路径,禁止使用 历史旧 LinuxCNC 目录。 |
|
||||
|
||||
## 9. 附录:对标文件清单
|
||||
|
||||
| 文件 | 用途 |
|
||||
| --- | --- |
|
||||
| /home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/doc/xyzbc-trt-runtime-files.md | 当前运行配置文件说明和路径基线。 |
|
||||
| /home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini | 主 INI 配置。 |
|
||||
| xyzbc-trt.xml | PyVCP SWITCHKINS 面板。 |
|
||||
| switchkins_postgui.hal | PyVCP 与 HALUI、Vismach 清轨迹连接。 |
|
||||
| demos/xyzbc_switchkins.ngc | 默认加载的演示程序。 |
|
||||
| remap_subs/428remap.ngc、429remap.ngc、430remap.ngc | switchkins 模式切换 remap。 |
|
||||
| xyzbc-trt.tbl / xyzbc.var | 刀具表和参数文件。 |
|
||||
| bin/xyzbc-trt-gui | Vismach 原型模型入口。 |
|
||||
| rtlib/xyzbc-trt-kins.so | 真实五轴运动学模块。 |
|
||||
|
||||
## 10. xyzbc-trt 程序逻辑全量分析
|
||||
|
||||
下面按“文件装载 - 运动学 - HAL - 界面 - 执行 - 证据”的顺序,把 xyzbc-trt 的实际逻辑拆开说明。这里不是抽象架构,而是与当前源码、HAL pin 和界面行为一一对应的执行逻辑。
|
||||
|
||||
10.1 启动入口逻辑
|
||||
|
||||
| 步骤 | 逻辑 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| 1 | rip-environment 先建立 run-in-place 环境,确保本地 bin/、lib/、rtlib/、bin/python 可被当前会话找到。 | 执行路径完全指向 /home/mes123456/cnc_wams/linuxcnc。 |
|
||||
| 2 | linuxcnc xyzbc-trt.ini 读取主 INI,按段装载 DISPLAY、RS274NGC、KINS、HAL、TRAJ、TASK、EMCIO。 | 界面、运动学和程序执行进入同一会话。 |
|
||||
| 3 | AXIS、PyVCP、Vismach、halui、milltask、linuxcncsvr、rtapi_app 同时被拉起。 | 形成“界面 + 任务 + 运动 + 证据”闭环。 |
|
||||
|
||||
这个启动链路的关键点是:界面不是单独运行的,而是被 INI 文件和 HAL 图驱动。Web 端要完全对标,就不能把预览、模式切换、DRO、刀具、执行按钮做成彼此割裂的前端组件,而要让它们共享同一个运行态和信号总线。
|
||||
|
||||
10.2 配置装载逻辑
|
||||
|
||||
| 文件 | 逻辑作用 | Web 对标要点 |
|
||||
| --- | --- | --- |
|
||||
| xyzbc-trt.ini | 定义机器类型、显示方式、五轴坐标、最大速度、轴/关节限制、默认程序、运动学模块和 HAL 连线。 | 必须解析成结构化会话配置,不能只读出少量文本字段。 |
|
||||
| xyzbc-trt.xml | 定义 SWITCHKINS 面板和按钮文案。 | 按钮状态要由 HAL 输出决定,multilabel 要能随 kinstype 更新。 |
|
||||
| switchkins_postgui.hal | 把按钮接到 MDI 命令,把清轨迹接到 vismach.plotclear。 | Web 端的按钮必须走同样的“事件 - HAL - MDI - 状态”链路。 |
|
||||
| xyzbc_switchkins.ngc | 默认加载的程序是演示切换程序,既包含路径,也包含模式切换场景。 | Web 必须默认回放同一程序并记录同一套证据字段。 |
|
||||
|
||||
10.3 switchkins 运动学逻辑
|
||||
|
||||
xyzbc-trt-kins 通过 switchkinsSetup() 绑定三个运动学分支:
|
||||
|
||||
- type0:在当前配置里被重定义为 identity,用于启动后的关节直接操控。
|
||||
|
||||
- type1:xyzbc-trt-kins 本体,执行 XYZBC table rotary/tilting 的 TCP 运动学。
|
||||
|
||||
- type2:用户自定义运动学 userk。
|
||||
|
||||
源码里明确设置了 kinsname = "xyzbc-trt-kins"、halprefix = "xyzbc-trt-kins"、required_coordinates = "xyzbc"、allow_duplicates = 1,这意味着它既是一个五轴模块,也是一个允许坐标字母重复映射的 switchkins 模块。identityfirst 参数把启动默认值切换成 identity,而不是让机床类型本体成为 type0,这正是 sim 配置的关键差异。
|
||||
|
||||

|
||||
|
||||
图 5:xyzbc-trt 程序逻辑总图,展示从文件装载到证据采样的完整执行链。
|
||||
|
||||
switchkins 内部的逻辑顺序很重要:先由 rtapi_app_main() 创建 HAL 组件和输出 pin,再调用 kinematicsSwitch(0) 设定初始模式,然后把三个 setup 函数分别执行一遍,最后 hal_ready()。这意味着 Web 端在启动时也必须先完成状态总线和模式初始化,再挂载界面和三维模型,不能反过来。
|
||||
|
||||
10.4 正逆运动学逻辑
|
||||
|
||||
| 函数 | 逻辑 | 对标意义 |
|
||||
| --- | --- | --- |
|
||||
| xyzbcKinematicsForward() | 根据 X/Y/Z/B/C 和 offset、tooloffset、旋转点、方向约定计算 TCP 世界坐标与姿态。 | Web 端预览路径和三维模型必须采用同一套正解公式。 |
|
||||
| xyzbcKinematicsInverse() | 根据目标 TCP 位姿反推关节角和关节位移,再写回 mapped joints。 | MDI、点动、程序执行时的运动控制必须能从目标位姿反推关节。 |
|
||||
| conventional-directions | 默认关闭时,旋转轴方向与 conventional 约定相反。 | Web 模型如果方向画反,视觉上会“像”,但运动学会错,必须严格对齐。 |
|
||||
|
||||
在当前配置里,B/C 轴是主运动学轴,A/U/V/W 只是可选字母。前向解使用主关节 JX/JY/JZ/JB/JC 计算 TCP 位姿;逆解再根据目标位姿回算这些主关节。这个路径对 Web 端非常关键,因为预览路径不能只画“刀尖折线”,还要把每个采样点对应的关节姿态也算出来,否则无法和真实系统逐点比对。
|
||||
|
||||
10.5 HAL 和状态逻辑
|
||||
|
||||
| HAL 语义 | 逻辑 | Web 对标实现 |
|
||||
| --- | --- | --- |
|
||||
| motion.switchkins-type | 当前运动学类型输入,浮点值被截断为整数 0/1/2。 | 前端 switchkins 状态必须是整数型并保持和任务状态一致。 |
|
||||
| kinstype.is-0/1/2 | 当前模式输出,供 GUI、指示灯、程序逻辑读取。 | Web 端要提供同样的可读状态给 PyVCP 等价面板和检测逻辑。 |
|
||||
| motion.analog-out-03 | 通过 M68/MDI 等方式写入,间接控制 kinstype。 | Web 端模式切换必须保留“间接驱动”语义,不可直接写最终状态。 |
|
||||
| halui.mdi-command-00/01/02 | PyVCP 按钮发出的 MDI 入口。 | 按钮点击后必须先变成命令,再进入状态机。 |
|
||||
|
||||
switchkins.c 的实现说明了一个很重要的行为:模式切换后先清除 use_lastpose,再根据当前模式把对应的 kinstype.is.N 置位。也就是说,Web 仿真不能把“当前模式”当作普通表单状态,它必须是一次完整状态机切换,切换后还要在 UI 上立即反映。
|
||||
|
||||
10.6 UI 与三维模型逻辑
|
||||
|
||||
axis.py 的行为说明 AXIS 窗口里存在“轴模式”和“关节模式”的切换;当配置处于非 trivkins 或特殊 kinstype 时,按钮和焦点会根据当前运动模式自动切换到关节/轴对应控件。Web 端要对标的不只是布局,还有这个控件激活规则。
|
||||
|
||||
xyzbc-trt-gui.py 则把 Vismach 模型拆成可响应的 HAL 变换链:tool-offset 作用于刀具,spindle-z 作用于主轴头,tilt-b 作用于倾斜轴,rotate-c 作用于回转台,table-x 和 saddle-y 则驱动横向与纵向运动。这个顺序决定了几何层级关系,所以 Web 端模型必须按同样层级搭建,而不是把每个零件独立摆放。
|
||||
|
||||
10.7 程序执行与同步逻辑
|
||||
|
||||
| 阶段 | 逻辑 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| 预览 | 读取 xyzbc_switchkins.ngc,在预览区生成 G-code 轨迹和位置采样。 | 得到 previewPath JSON。 |
|
||||
| 切换 | 通过 M428/M429/M430 或等价按钮改变 switchkins 模式,并执行同步命令。 | 运动学和解释器状态对齐。 |
|
||||
| 执行 | 根据当前模式执行程序,同时刷新关节反馈和 TCP 位姿。 | 得到 executionPath JSON。 |
|
||||
| 比对 | 用固定 20 ms 采样周期对比预览和执行曲线。 | 输出 compare-report.json。 |
|
||||
|
||||
同步逻辑是这个程序最容易被误解的地方:切换模式不是单独改一个 pin 就结束了,必须让解释器和 motion 同步,否则 G-code 看到的坐标语义和 motion 看到的坐标语义会不同。这个要求在文档中已经被固化为“预览路径和执行路径统一采样周期,并在切换时强制同步”。
|
||||
|
||||
10.8 异常和约束逻辑
|
||||
|
||||
- 如果 motion.switchkins-type 没有连接,只有 type0 默认运动学可用,这属于兼容旧配置的行为。
|
||||
|
||||
- 如果切换到身份不匹配的运动学类型,程序逻辑必须在 G-code 中先检查 kinstype.is.N 或等价输入,再决定是否继续。
|
||||
|
||||
- 如果当前系统的坐标偏置、刀补、外部偏置在切换后不一致,必须先清理或重置偏置,再切换模式。
|
||||
|
||||
- 如果 Web 端和 LinuxCNC 真实系统的采样周期不一致,则即使图形看起来接近,也不能通过对标验收。
|
||||
|
||||
总的来说,xyzbc-trt 的逻辑不是“一个五轴模型 + 一个预览窗口”,而是“配置驱动的状态机 + 可切换运动学 + HAL 事件 + 三维可视化 + 路径证据”的组合。Web 端要做到完全对标,必须把这五件事统一成一条链。
|
||||
|
||||
## 11. 开机、急停、回零与执行状态的联锁逻辑
|
||||
|
||||
这一节专门说明机床状态如何影响程序执行。核心不是某一个按钮,而是 ESTOP、Machine Power、Homing、Task Mode、Interp State、Paused、Auto/MDI/Manual 这些状态共同决定“能不能跑、能不能发 MDI、能不能执行程序、能不能继续暂停中的程序”。
|
||||
|
||||
| 状态或条件 | 含义 | 对执行的影响 |
|
||||
| --- | --- | --- |
|
||||
| ESTOP | 急停被触发,属于最高优先级禁止状态。 | 不能发运行/MDI/自动执行命令;必须先解除急停。 |
|
||||
| Machine Power ON | 机床上电并使能轨迹规划。 | 没有上电时通常不能进入正常执行。 |
|
||||
| Homed | 各关节完成回零。 | 未回零时只能做有限的点动或被配置允许的动作;运行 MDI/程序通常需要回零。 |
|
||||
| Task Mode = MANUAL | 手动模式。 | 适合回零、点动、Touch Off、手动辅助动作;不适合直接跑自动程序。 |
|
||||
| Task Mode = MDI | 手动数据输入模式。 | 允许执行单行命令或小段命令,但仍受 ESTOP/上电/回零/解释器空闲限制。 |
|
||||
| Task Mode = AUTO | 自动模式。 | 允许加载并运行 G-code 文件、单步、暂停、恢复、停止。 |
|
||||
| Interp Idle | 解释器空闲。 | MDI 或启动新的自动程序前通常必须空闲。 |
|
||||
| Paused | 程序暂停。 | 可以恢复、停止,某些界面允许在暂停态下做受限补位或回退。 |
|
||||
|
||||
LinuxCNC 的状态判断在 Python 接口里是明确的:发 MDI 前至少要满足“未急停、已上电、全部关节已回零、解释器空闲、模式是 MDI”;运行程序前也要满足相应条件。AXIS 界面把这些限制做得比较“宽”,会自动切换到所需模式,但本质上仍然是同一组状态联锁。
|
||||
|
||||
对于本项目的 Web 仿真,这意味着:按钮是否可点、命令是否被执行、预览和执行是否允许开始,不能由前端自己臆造,而必须由一个统一状态机决定。
|
||||
|
||||
11.1 典型状态流转
|
||||
|
||||
| 阶段 | 典型动作 | 允许的下一步 |
|
||||
| --- | --- | --- |
|
||||
| 上电前 | ESTOP 解除前的初始化。 | 只能显示状态,不能执行加工。 |
|
||||
| 解除急停 | ESTOP RESET。 | 可以请求 Machine Power ON。 |
|
||||
| 上电 | Machine Power ON。 | 可以回零、可视情况进入手动或 MDI。 |
|
||||
| 回零 | Home All / 单轴 Homing。 | 全部回零后,自动/MDI 执行条件才完整。 |
|
||||
| 切换模式 | MANUAL / MDI / AUTO。 | 可按模式开始点动、发 MDI、或运行程序。 |
|
||||
| 运行中 | AUTO RUN。 | 可 Pause、Stop、Step 或 Resume。 |
|
||||
| 暂停中 | AUTO PAUSE。 | 可 Resume 或 Stop;某些界面允许受限补位。 |
|
||||
|
||||
11.2 对 XYZBC 五轴程序的具体影响
|
||||
|
||||
xyzbc-trt 的默认程序 `xyzbc_switchkins.ngc` 不是单纯的路径文件,它还演示了 switchkins 切换逻辑。因此在分析程序执行时,必须考虑状态切换的前提条件:急停解除、机器上电、关节回零、模式与解释器状态匹配。尤其是 M428/M429/M430 这样的切换命令,不能在解释器忙、状态未同步或不在合适模式时随意插入。
|
||||
|
||||
如果机器处于 ESTOP 或未上电,那么即使 UI 看起来加载了程序,也不能真正开始执行。若未回零,某些运动限制还未生效或未完整生效;如果是 identity 运动学,则回零和点动可能与 XYZBC 模式下的坐标解释不同,UI 必须明确呈现当前 kinstype。
|
||||
|
||||
11.3 Web 端需要实现的联锁规则
|
||||
|
||||
| Web 控件 | 可用条件 | 禁用时表现 |
|
||||
| --- | --- | --- |
|
||||
| 急停释放按钮 | 当前处于 ESTOP。 | 显示为不可执行或已触发状态。 |
|
||||
| 上电按钮 | 急停已解除。 | 急停未解除时禁止上电。 |
|
||||
| 回零按钮 | 机器已上电,且对应关节未回零或允许重复回零。 | 未上电时不允许回零。 |
|
||||
| MDI 输入框 | 非 ESTOP、已上电、已回零、解释器空闲、模式为 MDI。 | 给出原因说明,不发送命令。 |
|
||||
| 运行/自动按钮 | 非 ESTOP、已上电、已回零、文件已加载且解释器空闲。 | 程序不可启动。 |
|
||||
| 暂停/继续 | 程序正在运行或已暂停。 | 非运行态时禁用。 |
|
||||
| switchkins 切换按钮 | 应避免在程序执行中切换;若允许必须先同步并受限处理。 | 运行中直接切换应提示风险或禁止。 |
|
||||
|
||||
11.4 与证据 JSON 的关系
|
||||
|
||||
为了让真实 LinuxCNC 与 Web 仿真的行为可比,证据 JSON 不能只记录路径点,还要记录机床状态。至少要包含 `taskState`、`taskMode`、`interpState`、`paused`、`estop`、`enabled`、`homed`、`kinstype` 和按钮可用性。这样才能解释“为什么这一次能跑、那一次不能跑”。
|
||||
|
||||
例如:若 `estop=true`,那么 previewPath 也许还能生成,但 executionPath 必须为空或者标记为 blocked;若 `homed` 未满足,则 manual/jog 可以存在,但 auto/mdi/run 不能开始;若 `interp_state != INTERP_IDLE`,则 MDI 不应该再进入。
|
||||
|
||||
11.5 对本项目的落地结论
|
||||
|
||||
本项目的 Web 仿真要完全对标 `xyzbc-trt`,不能只做“路径看起来一样”。必须同时复刻状态机联锁:开机、急停、回零、模式、解释器、暂停与恢复,共同决定后续执行是否允许。否则 Web 端即使曲线绘得对,也无法说明它是 LinuxCNC 真实逻辑的等价实现。
|
||||
23
web-rtcp-5axis-xyzbc-trt-sim-plan/working/README.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# working 索引
|
||||
|
||||
本目录记录 `xyzbc-trt` Web 数控系统仿真推进资料,用于按任务矩阵继续开发和验收。
|
||||
|
||||
文件:
|
||||
|
||||
- `01-项目功能内容.md`:目标功能、LinuxCNC 对标点、WASM/OPFS 满足度。
|
||||
- `02-项目程序开发详细步骤.md`:从源码对标到 Web 实现、构建、验证的步骤。
|
||||
- `03-推进台账.md`:每轮做了什么、改了哪些文件、验证了什么、下一步。
|
||||
- `04-任务矩阵.md`:任务编号、状态、验收标准,防止重复做。
|
||||
- `05-验收证据.md`:命令、输出、页面、证据路径和当前阻塞。
|
||||
- `06-决策记录.md`:关键决策及理由。
|
||||
- `07-全量对标追踪矩阵.md`:逐项映射 `xyzbc-trt-runtime-files.md` 的真实 LinuxCNC 功能到 Web 对标目标、JSON 证据和缺口。
|
||||
- `08-xyzbc-trt-界面与图标分析.md`:面向 Web 界面开发的页面区域、PyVCP/SWITCHKINS、Vismach、业务页面和 gmoccapy 图标资产清单。
|
||||
- `09-设计任务书与技术方案整合.md`:从 DOCX 设计任务书整合出的 Markdown 版本,保留任务书、技术方案、程序逻辑分析、状态联锁和图片引用。
|
||||
|
||||
当前新增关注点:
|
||||
|
||||
- DOCX 任务书已整合到 `working/09-设计任务书与技术方案整合.md`,后续开发和验收优先以 `working` 下 Markdown 文件为可检索工作入口。
|
||||
- `working` 文档必须完全对标 `doc/xyzbc-trt-runtime-files.md`,不仅覆盖文件 staging,也覆盖 AXIS、PyVCP、POSTGUI HAL、basic_sim、Vismach、switchkins、Ngcgui、tool-offset、kinematics pins 和加载顺序。
|
||||
- native/Web evidence JSON 后续必须包含刀具预览路径 `previewPath` 和刀具执行路径 `executionPath`。
|
||||
- 路径曲线对比统一使用 `samplePeriodMs = 20`,通过相同 `sampleIndex/timeMs` 对齐。
|
||||
- compare JSON 后续必须输出 `pathComparison`,覆盖预览对预览、执行对执行、预览对执行的一致性误差统计。
|
||||
@@ -0,0 +1,179 @@
|
||||
{
|
||||
"apiName": "xyzbc-trt-native-web-evidence-comparison",
|
||||
"status": "fail",
|
||||
"comparedAt": "2026-07-02T07:41:51.598Z",
|
||||
"nativePath": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json",
|
||||
"webPath": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json",
|
||||
"summary": {
|
||||
"checkCount": 12,
|
||||
"passCount": 11,
|
||||
"failCount": 1,
|
||||
"blockers": [
|
||||
"missing-wasm-artifacts"
|
||||
],
|
||||
"nativeStatus": "ok",
|
||||
"webStatus": "blocked"
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"category": "profile",
|
||||
"requirement": "native axis mask is XYZBC",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"nativeAxisMask": 55
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "profile",
|
||||
"requirement": "web default profile is xyzbc-trt",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"webProfile": "xyzbc-trt"
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "ini",
|
||||
"requirement": "native loaded xyzbc switchkins program",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"nativeFile": "/home/mes123456/linuxcnc-master/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "ini",
|
||||
"requirement": "web INI parse is ready",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"webIniReady": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "switchkins",
|
||||
"requirement": "native switchkins pin readable",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"nativePin": {
|
||||
"owner": "31",
|
||||
"type": "float",
|
||||
"direction": "IN",
|
||||
"value": 0,
|
||||
"linked": true,
|
||||
"raw": " 31 float IN 0 motion.switchkins-type <== :kinstype-select"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "switchkins",
|
||||
"requirement": "web remap files staged",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"remaps": [
|
||||
{
|
||||
"raw": "M428 modalgroup=10 ngc=428remap",
|
||||
"code": "M428",
|
||||
"modalGroup": 10,
|
||||
"ngc": "428remap"
|
||||
},
|
||||
{
|
||||
"raw": "M429 modalgroup=10 ngc=429remap",
|
||||
"code": "M429",
|
||||
"modalGroup": 10,
|
||||
"ngc": "429remap"
|
||||
},
|
||||
{
|
||||
"raw": "M430 modalgroup=10 ngc=430remap",
|
||||
"code": "M430",
|
||||
"modalGroup": 10,
|
||||
"ngc": "430remap"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "program",
|
||||
"requirement": "web default xyzbc_switchkins program staged",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"selected": {
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc",
|
||||
"filename": "xyzbc_switchkins.ngc",
|
||||
"wasmProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzbc_switchkins.ngc"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "tool-table",
|
||||
"requirement": "web tool table staged",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"toolTable": "xyzbc-trt.tbl"
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "pyvcp",
|
||||
"requirement": "web PyVCP XML staged",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"pyvcpXmlPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml"
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "positions",
|
||||
"requirement": "native joint feedback readable",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"joints": {
|
||||
"0": 0,
|
||||
"1": 3.552713678800501e-15,
|
||||
"2": 10,
|
||||
"3": 3.552713678800501e-15,
|
||||
"4": 7.105427357601002e-15
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "wasm",
|
||||
"requirement": "required WASM artifacts available",
|
||||
"status": "fail",
|
||||
"evidence": {
|
||||
"missing": [
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.js",
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.wasm",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.js",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.wasm",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.js",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.wasm",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.wasm"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "parameters",
|
||||
"requirement": "parameter file staged",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"parameterFile": "xyzbc.var"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requiredImprovements": [
|
||||
{
|
||||
"category": "wasm",
|
||||
"requirement": "required WASM artifacts available",
|
||||
"evidence": {
|
||||
"missing": [
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.js",
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.wasm",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.js",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.wasm",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.js",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.wasm",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.wasm"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"semanticBoundary": "native_linuxcnc_vs_web_opfs_wasm_xyzbc_trt_evidence_comparison"
|
||||
}
|
||||
@@ -0,0 +1,514 @@
|
||||
{
|
||||
"apiName": "xyzbc-trt-web-opfs-wasm-evidence",
|
||||
"status": "blocked",
|
||||
"collectedAt": "2026-07-02T07:41:51.225Z",
|
||||
"profile": {
|
||||
"id": "xyzbc-trt",
|
||||
"machineName": "sim-xyzbc-trt-kins (switchkins)",
|
||||
"iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini",
|
||||
"pyvcpXmlPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml",
|
||||
"toolTablePath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl",
|
||||
"coordinates": [
|
||||
"X",
|
||||
"Y",
|
||||
"Z",
|
||||
"B",
|
||||
"C"
|
||||
],
|
||||
"kinematics": "xyzbc-trt-kins",
|
||||
"kinematicsModuleId": "xyzbc-trt",
|
||||
"defaultProgramFilename": "xyzbc_switchkins.ngc",
|
||||
"switchkinsTypes": [
|
||||
{
|
||||
"value": 0,
|
||||
"label": "identity",
|
||||
"mdiCommand": "M429",
|
||||
"webKinsType": "identity"
|
||||
},
|
||||
{
|
||||
"value": 1,
|
||||
"label": "XYZBC TCP",
|
||||
"mdiCommand": "M428",
|
||||
"webKinsType": "tcp-xyzbc"
|
||||
},
|
||||
{
|
||||
"value": 2,
|
||||
"label": "USERK",
|
||||
"mdiCommand": "M430",
|
||||
"webKinsType": "userk"
|
||||
}
|
||||
],
|
||||
"halPins": [
|
||||
"motion.switchkins-type",
|
||||
"motion.analog-out-03",
|
||||
"motion.tooloffset.z",
|
||||
"xyzbc-trt-kins.tool-offset",
|
||||
"xyzbc-trt-kins.x-offset",
|
||||
"xyzbc-trt-kins.z-offset",
|
||||
"xyzbc-trt-kins.x-rot-point",
|
||||
"xyzbc-trt-kins.y-rot-point",
|
||||
"xyzbc-trt-kins.z-rot-point",
|
||||
"xyzbc-trt-kins.conventional-directions",
|
||||
"halui.mdi-command-00",
|
||||
"halui.mdi-command-01",
|
||||
"halui.mdi-command-02"
|
||||
]
|
||||
},
|
||||
"ini": {
|
||||
"ready": true,
|
||||
"machineName": "sim-xyzbc-trt-kins (switchkins)",
|
||||
"coordinates": "XYZBC",
|
||||
"kinematicsName": "xyzbc-trt-kins",
|
||||
"kinematicsModuleId": "xyzbc-trt",
|
||||
"remaps": [
|
||||
{
|
||||
"raw": "M428 modalgroup=10 ngc=428remap",
|
||||
"code": "M428",
|
||||
"modalGroup": 10,
|
||||
"ngc": "428remap"
|
||||
},
|
||||
{
|
||||
"raw": "M429 modalgroup=10 ngc=429remap",
|
||||
"code": "M429",
|
||||
"modalGroup": 10,
|
||||
"ngc": "429remap"
|
||||
},
|
||||
{
|
||||
"raw": "M430 modalgroup=10 ngc=430remap",
|
||||
"code": "M430",
|
||||
"modalGroup": 10,
|
||||
"ngc": "430remap"
|
||||
}
|
||||
],
|
||||
"haluiMdiCommands": [
|
||||
"M429",
|
||||
"M428",
|
||||
"M430"
|
||||
],
|
||||
"toolTable": "xyzbc-trt.tbl",
|
||||
"parameterFile": "xyzbc.var",
|
||||
"jointConfig": [
|
||||
{
|
||||
"id": 0,
|
||||
"axis": "X",
|
||||
"type": "LINEAR",
|
||||
"home": 0,
|
||||
"min": -200,
|
||||
"max": 200,
|
||||
"maxVelocity": 20,
|
||||
"maxAcceleration": 300,
|
||||
"homeSearchVelocity": 0,
|
||||
"homeSequence": 0
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"axis": "Y",
|
||||
"type": "LINEAR",
|
||||
"home": 0,
|
||||
"min": -100,
|
||||
"max": 100,
|
||||
"maxVelocity": 20,
|
||||
"maxAcceleration": 300,
|
||||
"homeSearchVelocity": 0,
|
||||
"homeSequence": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"axis": "Z",
|
||||
"type": "LINEAR",
|
||||
"home": 0,
|
||||
"min": -120,
|
||||
"max": 120,
|
||||
"maxVelocity": 20,
|
||||
"maxAcceleration": 300,
|
||||
"homeSearchVelocity": 0,
|
||||
"homeSequence": 0
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"axis": "B",
|
||||
"type": "ANGULAR",
|
||||
"home": 0,
|
||||
"min": -100,
|
||||
"max": 50,
|
||||
"maxVelocity": 30,
|
||||
"maxAcceleration": 300,
|
||||
"homeSearchVelocity": 0,
|
||||
"homeSequence": 0
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"axis": "C",
|
||||
"type": "ANGULAR",
|
||||
"home": 0,
|
||||
"min": -36000,
|
||||
"max": 36000,
|
||||
"maxVelocity": 30,
|
||||
"maxAcceleration": 300,
|
||||
"homeSearchVelocity": 0,
|
||||
"homeSequence": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
"opfsStaging": {
|
||||
"storageMode": "memory",
|
||||
"opfsRoot": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt",
|
||||
"fileCount": 20,
|
||||
"summary": {
|
||||
"fileCount": 20,
|
||||
"totalBytes": 458514,
|
||||
"gcodeFileCount": 16,
|
||||
"kinds": {
|
||||
"ini": 1,
|
||||
"demo": 8,
|
||||
"toolTable": 1,
|
||||
"parameters": 1,
|
||||
"remap": 8,
|
||||
"pyvcp": 1
|
||||
},
|
||||
"opfsPaths": [
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/centering.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_ac.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_bc.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/xyzac_switchkins_sub.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/xyzbc_switchkins_sub.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_1.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_2.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_3.ngc",
|
||||
"web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml"
|
||||
]
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/xyzbc-trt.ini",
|
||||
"kind": "ini",
|
||||
"bytes": 4885,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzbc_switchkins.ngc",
|
||||
"kind": "demo",
|
||||
"bytes": 139,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/xyzbc-trt.tbl",
|
||||
"kind": "toolTable",
|
||||
"bytes": 22,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/xyzbc.var",
|
||||
"kind": "parameters",
|
||||
"bytes": 1666,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/remap_subs/428remap.ngc",
|
||||
"kind": "remap",
|
||||
"bytes": 688,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/remap_subs/429remap.ngc",
|
||||
"kind": "remap",
|
||||
"bytes": 644,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/remap_subs/430remap.ngc",
|
||||
"kind": "remap",
|
||||
"bytes": 635,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/centering.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/centering.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/remap_subs/centering.ngc",
|
||||
"kind": "remap",
|
||||
"bytes": 1134,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_ac.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_ac.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/remap_subs/helix_ac.ngc",
|
||||
"kind": "remap",
|
||||
"bytes": 735,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_bc.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_bc.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/remap_subs/helix_bc.ngc",
|
||||
"kind": "remap",
|
||||
"bytes": 735,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/xyzac_switchkins_sub.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/xyzac_switchkins_sub.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/remap_subs/xyzac_switchkins_sub.ngc",
|
||||
"kind": "remap",
|
||||
"bytes": 1547,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/xyzbc_switchkins_sub.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/xyzbc_switchkins_sub.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/remap_subs/xyzbc_switchkins_sub.ngc",
|
||||
"kind": "remap",
|
||||
"bytes": 1547,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/boat-xyzac.ngc",
|
||||
"kind": "demo",
|
||||
"bytes": 70847,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/boat-xyzbc.ngc",
|
||||
"kind": "demo",
|
||||
"bytes": 76616,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/impeller-7bl-xyzac.ngc",
|
||||
"kind": "demo",
|
||||
"bytes": 294411,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzac_switchkins.ngc",
|
||||
"kind": "demo",
|
||||
"bytes": 139,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_1.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_1.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzac_switchkins_test_1.ngc",
|
||||
"kind": "demo",
|
||||
"bytes": 419,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_2.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_2.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzac_switchkins_test_2.ngc",
|
||||
"kind": "demo",
|
||||
"bytes": 475,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_3.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_3.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzac_switchkins_test_3.ngc",
|
||||
"kind": "demo",
|
||||
"bytes": 304,
|
||||
"executable": false
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/xyzbc-trt.xml",
|
||||
"kind": "pyvcp",
|
||||
"bytes": 926,
|
||||
"executable": false
|
||||
}
|
||||
],
|
||||
"gcodeSources": [
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/boat-xyzac.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
|
||||
"filename": "boat-xyzac.ngc",
|
||||
"bytes": 70847,
|
||||
"label": "boat-xyzac",
|
||||
"sourceMode": "linuxcnc-vendored-5axis-gcode",
|
||||
"semanticBoundary": "linuxcnc_vendored_5axis_gcode_source_file"
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/boat-xyzbc.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc",
|
||||
"filename": "boat-xyzbc.ngc",
|
||||
"bytes": 76616,
|
||||
"label": "boat-xyzbc",
|
||||
"sourceMode": "linuxcnc-vendored-5axis-gcode",
|
||||
"semanticBoundary": "linuxcnc_vendored_5axis_gcode_source_file"
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/impeller-7bl-xyzac.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc",
|
||||
"filename": "impeller-7bl-xyzac.ngc",
|
||||
"bytes": 294411,
|
||||
"label": "impeller-7bl-xyzac",
|
||||
"sourceMode": "linuxcnc-vendored-5axis-gcode",
|
||||
"semanticBoundary": "linuxcnc_vendored_5axis_gcode_source_file"
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_1.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzac_switchkins_test_1.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_1.ngc",
|
||||
"filename": "xyzac_switchkins_test_1.ngc",
|
||||
"bytes": 419,
|
||||
"label": "xyzac_switchkins_test_1",
|
||||
"sourceMode": "linuxcnc-vendored-5axis-gcode",
|
||||
"semanticBoundary": "linuxcnc_vendored_5axis_gcode_source_file"
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_2.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzac_switchkins_test_2.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_2.ngc",
|
||||
"filename": "xyzac_switchkins_test_2.ngc",
|
||||
"bytes": 475,
|
||||
"label": "xyzac_switchkins_test_2",
|
||||
"sourceMode": "linuxcnc-vendored-5axis-gcode",
|
||||
"semanticBoundary": "linuxcnc_vendored_5axis_gcode_source_file"
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_3.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzac_switchkins_test_3.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_3.ngc",
|
||||
"filename": "xyzac_switchkins_test_3.ngc",
|
||||
"bytes": 304,
|
||||
"label": "xyzac_switchkins_test_3",
|
||||
"sourceMode": "linuxcnc-vendored-5axis-gcode",
|
||||
"semanticBoundary": "linuxcnc_vendored_5axis_gcode_source_file"
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzac_switchkins.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc",
|
||||
"filename": "xyzac_switchkins.ngc",
|
||||
"bytes": 139,
|
||||
"label": "xyzac_switchkins",
|
||||
"sourceMode": "linuxcnc-vendored-5axis-gcode",
|
||||
"semanticBoundary": "linuxcnc_vendored_5axis_gcode_source_file"
|
||||
},
|
||||
{
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc",
|
||||
"wasmPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzbc_switchkins.ngc",
|
||||
"opfsPath": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc",
|
||||
"filename": "xyzbc_switchkins.ngc",
|
||||
"bytes": 139,
|
||||
"label": "xyzbc_switchkins",
|
||||
"sourceMode": "linuxcnc-vendored-5axis-gcode",
|
||||
"semanticBoundary": "linuxcnc_vendored_5axis_gcode_source_file"
|
||||
}
|
||||
],
|
||||
"selectedProgram": {
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc",
|
||||
"filename": "xyzbc_switchkins.ngc",
|
||||
"wasmProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzbc_switchkins.ngc"
|
||||
}
|
||||
},
|
||||
"store": {
|
||||
"machineProfile": "xyzbc-trt",
|
||||
"sessionName": "xyzbc-trt-web-session",
|
||||
"machineProjectRoot": "web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt",
|
||||
"activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc",
|
||||
"programSource": "linuxcnc-vendored-5axis-gcode",
|
||||
"programLineCount": 3,
|
||||
"selectedGcodeSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
|
||||
},
|
||||
"wasm": {
|
||||
"required": [
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.js",
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.wasm",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.js",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.wasm",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.js",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.wasm",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.wasm"
|
||||
],
|
||||
"files": [],
|
||||
"missing": [
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.js",
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.wasm",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.js",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.wasm",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.js",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.wasm",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.wasm"
|
||||
],
|
||||
"ready": false,
|
||||
"emscriptenAvailable": false
|
||||
},
|
||||
"coverage": {
|
||||
"profileDefaultXyzbc": true,
|
||||
"iniReady": true,
|
||||
"opfsStaged": true,
|
||||
"pyvcpXmlStaged": true,
|
||||
"remapsStaged": true,
|
||||
"toolTableStaged": true,
|
||||
"parameterFileStaged": true,
|
||||
"defaultProgramStaged": true,
|
||||
"wasmArtifactsReady": false
|
||||
},
|
||||
"blockers": [
|
||||
{
|
||||
"id": "missing-wasm-artifacts",
|
||||
"detail": "wasm-port/build/wasm does not contain all required kinematics/core/tp/task-hal artifacts.",
|
||||
"required": [
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.js",
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.wasm",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.js",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.wasm",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.js",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.wasm",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.wasm"
|
||||
],
|
||||
"missing": [
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.js",
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.wasm",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.js",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.wasm",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.js",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.wasm",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.wasm"
|
||||
]
|
||||
}
|
||||
],
|
||||
"semanticBoundary": "web_opfs_wasm_runtime_readiness_for_linuxcnc_xyzbc_trt"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
import: unable to open X server `:109' @ error/import.c/ImportImageCommand/348.
|
||||
@@ -0,0 +1 @@
|
||||
xwininfo: error: unable to open display ":109"
|
||||
|
After Width: | Height: | Size: 159 KiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 284 KiB |
|
After Width: | Height: | Size: 257 KiB |
|
After Width: | Height: | Size: 258 KiB |
|
After Width: | Height: | Size: 269 KiB |
|
After Width: | Height: | Size: 240 KiB |
|
After Width: | Height: | Size: 245 KiB |
|
After Width: | Height: | Size: 247 KiB |