Add INI-driven XYZAC and XYZBC parametric machine design

This commit is contained in:
2026-09-17 19:16:48 +08:00
parent 9232f29027
commit e4600b34e3
31 changed files with 2359 additions and 29 deletions

View File

@@ -0,0 +1,34 @@
# 项目功能内容
## 目标与边界
在同一控制界面支持 XYZAC/XYZBC 参数化机床。INI 是机床几何输入的唯一来源;LinuxCNC WASM 是解释器、运动学、轨迹和状态的唯一计算权威。React 负责参数草稿、命令和状态显示,Three.js 负责几何投影。
配置文件位于 `linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/`。
| 参数 | XYZAC | XYZBC | 单位 |
| --- | --- | --- | --- |
| x-rot-point / y-rot-point / z-rot-point | 支持 | 支持 | mm |
| x-offset | 原生算法不支持 | 支持 | mm |
| y-offset | 支持 | 原生算法不支持 | mm |
| z-offset | 支持 | 支持 | mm |
不支持的偏置在界面禁用;不得把无效参数呈现为可影响运动的参数。刀长仍由现有刀具链路管理,不混入这六项几何参数。
## 用户流程
1. 选择机床,读取对应 INI 的 `[HAL] HALCMD` 参数及源位置。
2. 结构预览旁按“旋转中心”和“轴间偏置”分组,显示 mm、已生效值及待应用状态。
3. 修改参数,验证有限数字、支持范围和文件一致性。
4. 在机床关闭、程序空闲时应用,重新初始化配置和解析当前 G 代码;应用后重新回零。
5. 保存/导出修改后的 INI;重新读取磁盘文件时使用最新参数。
浏览器虚拟工作区与宿主磁盘须明确区分:应用到 Worker 不等于已写回仓库文件;支持文件句柄的浏览器可保存已选文件,其他环境导出 INI。
## 验收行为
- 修改有效参数后,Worker 快照参数、结构旋转中心及非零旋转姿态的 WASM 关节解一致变化。
- G 代码文本和编程坐标不必变化;同一程序的机器关节轨迹应随有效参数变化。禁止人为平移 G 代码来伪造结果。
- 参数错误、程序运行/暂停、机床开启时不允许应用;失败不得显示成功或展示过期参数为已生效。
- 两种机床参数相互隔离;保留当前程序;重新加载产生新预览,清理旧运行轨迹。
- 桌面和移动布局无重叠,3D 非空、可交互,保存和重新读取可复现参数。

View File

@@ -0,0 +1,25 @@
# 项目程序开发详细步骤
## TRT-P01 配置源与上下文
审计 `sim-case-loader.mjs` 的固定参数、`SimSession.LOAD_WORKSPACE`、`WasmXyzacKinematics`、原生 TRT 方程和 Three.js 模型。建立六份文档及索引,记录工作区原有改动。
## TRT-P02 INI 参数入口
复用 `parseIni` 和 `WorkspaceRuntime`,按顺序读取重复 HALCMD;识别旋转中心 setp 和偏置 net/sets。数值、重复赋值、缺项和不支持项必须可诊断,不默默回落到固定几何。编辑时仅替换定位到的参数数值,保留文件其他内容。配置读取器同时供加载器和 Worker 使用,Worker 从收到的文件再次读取,拒绝外部独立 offsets 覆盖。
## TRT-P03 应用与 G 代码
复用 `LOAD_WORKSPACE` 与 `PROGRAM_LOAD`,不新增 JS 运动算法。重新加载配置前验证输入及状态;重建 WASM 运动学、预览和运行环境。验证 RTCP 开启下非零 A/B/C 的同一段 G 代码产生不同关节轨迹,身份运动学模式不应伪装为 RTCP。
## TRT-P04 结构预览
从 Worker 快照读取六项参数。用旋转中心父节点及局部偏置表达模型层级,保持线性轴和刀具来源不变。验证零角度、单轴旋转和复合旋转,路径仍附着在转台坐标系。这里的矩阵只用于图形投影。
## TRT-P05 参数界面
在机床结构预览处放置紧凑参数区:旋转中心三项、偏置三项;无效偏置禁用。提供应用、重新读取、导入和保存 INI。维护草稿与已生效状态,异步期间禁止重复应用或切换,错误可见。保持当前 G 代码,应用后要求重新回零。
## TRT-P06 验收与接续
执行参数读取/写回负例、真实 WASM Worker 两机型测试、结构模型断言、React typecheck/build 和 Playwright 桌面/移动截图及 canvas 像素检查。证据统一写入 `coverage/trt-parametric/`,实际命令和产物登记到 05。记录未满足项,不用旧报告替代本轮测试。

View File

@@ -0,0 +1,23 @@
# 推进台账
## R02 / 2026-09-17 / 仓库保存
- 用户授权:将本轮成果保存到 `https://gitea.meswork.com/wangdequan/linuxcncWebWASM.git`。
- 保存范围:TRT 参数化代码、测试、六份项目文档及索引、`coverage/trt-parametric/` 验收报告与截图。
- 检查:远程 `origin` 与指定仓库一致;提交前已获取远程 main,差异格式检查通过。功能验证沿用 E02/E03/E04,代码未再变更。
- 原有两份大体积 tick trace、linuxcnc 子模块本地改动、临时脚本和用户图片继续留在本地,不并入本次专项提交。
- 目标分支:`main`;推送完成以 Git 远程分支提交 ID 与本地 HEAD 一致为准。
- 后续开发仍按 TRT-R01 接续。
## R01 / 2026-09-17 / 已完成
- 目标:建立上下文,完成 INI → WASM → G 代码/机床预览参数链路。
- 已检查:加载器当前使用固定 offsets;WASM ABI 已有全部旋转中心和偏置字段;模型缺失旋转中心投影。
- 已改文件:本目录六份文档、README;根 README 增加入口;新增 `web/workspace/trt-geometry.mjs`、`web/react/src/TrtGeometryPanel.tsx`、`web/react/src/test_trt_parametric.mjs`、`scripts/test_trt_parametric_browser.mjs`。
- 接入改动:`sim-case-loader.mjs`、`sim-session.mjs`、`App.tsx`、`legacy.d.ts`、`styles.css`、`xyzac-machine-model.ts`、`XyzacMachineView.tsx`;更新相关加载、回零、两机型程序、模型和浏览器回归测试。
- 完成行为:INI 参数读写和 Worker 二次校验;应用时重载当前程序、清理轨迹并失效回零;旧几何 checkpoint/trace 拒绝恢复;分组参数界面、文件导入和原生 INI 保存。
- 结构修正:三个 rot-point 进入转台层级;XYZBC 的固定 90 度仅作用于铸件,旋转坐标系按 WASM 保持一致;补齐原生 yslide 的 150 mm 高度。
- 验证:E02/E03/E04。两机型真实 WASM 程序、确定性重放、结构/刀尖一致性、船体程序、参数保存导入、桌面/移动布局和 3D 像素/交互通过。React 类型和构建通过。
- 中间失败及处理:旧测试假定 HOME 同步完成,改为等待真实 homing tick;缺失图片测试改用显式 emc2.gif 输入,避免依赖用户修改过的 INI;机型选择测试改为等待 Worker 成功后断言。浏览器新测试改为等待重载完成并排除 hidden 文件 input 的布局断言。
- 原有改动:两份 coverage tick trace、linuxcnc 子模块内多处 INI/C++/Tcl 改动、临时测试脚本和 PNG 均保留,不作为本轮产物。
- 下一步:TRT-R01。既有 `test_xyzac_recovery.mjs` 虽退出 0,但报告 `endpoint_at_checkpoint_equal=false`;不能作为完整恢复等价证据。该问题单独登记,不扩展本轮到 TP 恢复重构。

View File

@@ -0,0 +1,13 @@
# 任务矩阵
状态只使用:待办、进行中、已验收、阻塞。已验收必须引用 05 中的证据编号。
| 编号 | 内容 | 依赖 | 状态 | 验收标准 | 证据 |
| --- | --- | --- | --- | --- | --- |
| TRT-P01 | 来源审计与上下文文档 | 无 | 已验收 | 六份文档、索引、源语义和现存缺口可追溯 | E01 |
| TRT-P02 | INI 唯一参数入口 | P01 | 已验收 | 两机型参数读写、无效输入拒绝、取消固定值覆盖 | E02 |
| TRT-P03 | Worker 与 G 代码重新解析 | P02 | 已验收 | 文件参数进入 WASM;同程序旋转姿态关节解随参数改变;状态门控有效 | E02 |
| TRT-P04 | 参数化结构投影 | P02 | 已验收 | 旋转中心及偏置驱动两模型;转台路径层级一致 | E02 |
| TRT-P05 | 参数编辑及文件流程 | P03,P04 | 已验收 | 分组布局、应用/重新读取/导入/保存、保留程序、错误反馈 | E03 |
| TRT-P06 | 回归及证据收口 | P03,P04,P05 | 已验收 | 专项、相关回归、构建、桌面/移动交互截图和像素检查通过;既有恢复偏差独立登记 | E02,E03,E04 |
| TRT-R01 | 既有 checkpoint 恢复状态精度 | P06 | 待办 | 定位 HAL tick 与 TP queue/progress 恢复差异;将恢复测试的相等性变为有效断言,再验证固定 tick 连续与恢复轨迹 | E04:遗留项 |

View File

@@ -0,0 +1,58 @@
# 验收证据
只登记实际执行结果。job_id/report_id 由真实运行产生;没有的字段记“不适用”,不编造 PDF 或截图。
## E01 来源审计 / 2026-09-17
- 命令:`git status --short --branch`、`git -C linuxcnc status --short`、`rg -n 'offset|rot_point' wasm-core/src/sim_kinematics.c`。
- 基线:主仓库 HEAD `9232f290279459765333b2ac274aa762ec06d6c0`。
- 发现:`web/workspace/sim-case-loader.mjs` 中 CASE_KINEMATICS 固定几何值;`web/react/src/xyzac-machine-model.ts` 未投影 rot-point。
- 方程:`wasm-core/src/sim_kinematics.c` 的 XYZAC 使用 dy/dz,XYZBC 使用 dx/dz,二者均使用三个 rot-point。
- 结果:审计完成;这不是功能验收。
- job_id / report_id / PDF / 截图:不适用。
## E02 参数链路与结构投影
- 命令:`node web/react/src/test_trt_parametric.mjs`。
- report_id:`trt-parametric-worker-v1`;产物:`coverage/trt-parametric/worker.report.json`。
- 结果:XYZAC/XYZBC 的参数读写、无效数值/缺项/重复项拒绝、CRLF/注释保留、INI 引用、Worker 忽略外部 offsets 覆盖通过。
- 同程序基线与新参数在 tick 11 出现首个关节差异;编程终点相同;新参数的固定 tick 重放逐项一致。
- 每个配置检查零角度、单倾转、单 C 旋转、复合旋转共四种姿态,WASM 逆解驱动的模型编程点与刀尖误差小于 `1e-7` 场景单位。
- 运行后的重载清空预览、重置回零状态;机床开启时重载被拒绝。
- `ctest --test-dir build-native -R 'sim_kinematics' --output-on-failure`:已有 native 二进制 5/5 通过,不等同于新建官方 native trace 对照。
- `node web/react/src/test_xyzac_threejs.mjs`:通过。
- 参数修改后恢复旧 checkpoint、compact power-off checkpoint、trace 均拒绝,当前几何及未回零状态不变。
- WASM 文件 SHA-256:`ab1b90a6a2474b954849ee75d1163e11ee37c4653dd074bba3483d52d9dec2a9`。本轮使用已有核心,不修改 C ABI。
- worker.report.json SHA-256:`e5cba3c7fe4aa04408cc1f7a574d4044090bbdc4bf85fbcb8f0cd3cd48b27aa0`。
## E03 浏览器端到端
命令:
```bash
PLAYWRIGHT_MODULE=/home/mes006/.npm/_npx/e41f203b7505f1fb/node_modules/playwright/index.mjs node scripts/test_trt_parametric_browser.mjs
```
- 页面:`http://127.0.0.1:5174/`;report_id:`trt-parametric-browser-v1`。
- 报告:[browser.report.json](../../coverage/trt-parametric/browser.report.json)。SHA-256:`957c93d24202823880630937e74b8c3f23e5786bc9d1d7a7219dff98f9d573aa`。
- 两机型均验证应用、保持程序路径、导出原生 INI、重新读取、重新导入应用、开机禁用/关机解锁。
- 导出的 INI 保留 `LIB:basic_sim.tcl`,不泄露 Web `_cmds.hal` 替换;导出分别为 4867 和 4875 字符。
- 1440×1000 与 390×844 布局无页面横向溢出;参数控件均位于视口内;canvas 分别为 472×360 和 368×378,颜色数 1691/1804,旋转前后像素 hash 改变;pageerror 为零。
- 最终截图:[桌面](../../coverage/trt-parametric/layout-1440.png)、[移动端](../../coverage/trt-parametric/layout-390.png)、[XYZAC](../../coverage/trt-parametric/xyzac-trt-model.png)、[XYZBC](../../coverage/trt-parametric/xyzbc-trt-model.png)。均已人工查看。
- `failure.png` 保留中间测试失败截图;最终结论以 report 和 layout 截图为准。
- job_id / PDF:不适用。浏览器保存对话框本身需要用户选择磁盘位置;自动测试验证下载回退及其文件内容。
## E04 相关回归与边界
| 命令 | 结果 |
| --- | --- |
| `npm --prefix web/react run build` | TypeScript 和生产构建通过;现有大 chunk 警告仍在 |
| `node web/workspace/test_sim_case_loader.mjs` | 通过 |
| `node web/worker/test_xyzac_trt_case.mjs` | 通过,TASK_READY、五关节、M428/M429/M430 和直接切换 |
| `node web/worker/test_boat_trt_programs.mjs` | XYZAC/XYZBC 均完成程序 |
| `node web/worker/test_xyzac_program_replace.mjs` | 通过,失败解析不保留旧预览 |
| `PLAYWRIGHT_MODULE=... node scripts/test_xyzbc_panel_browser.mjs` | 通过,双 canvas、轴序、转台路径附着、无 HUD |
| `git diff --check -- README.md web scripts docs/trt-parametric` | 通过 |
| `node web/worker/test_xyzac_recovery.mjs` | 退出 0,但其内部输出恢复前后 HAL tick / TP progress / queue 状态不同,`endpoint_at_checkpoint_equal=false`;登记 TRT-R01,不能声称恢复完全等价 |
本次未重跑全仓历史发布 gate、全部浏览器矩阵或官方 native 对照。专项测试验证浏览器仿真,不是实际机床控制验收。

View File

@@ -0,0 +1,33 @@
# 决策记录
## D01 / 2026-09-17 / 几何参数唯一入口
INI 文件内容是几何输入来源,Worker 再次解析文件后传入已有 WASM ABI。移除生产加载链路的固定 offsets,避免界面、预览和执行各自持有参数。
## D02 / 2026-09-17 / 保持原生参数含义
XYZAC 不支持 x-offset,XYZBC 不支持 y-offset。六项都可见,但不支持项禁用且不允许非零值。三个 rot-point 在 WASM 已有支持;原 Vismach 不支持不构成本次 Web 参数化的限制。新需求覆盖旧设计文档中不得开放 rot-point 编辑的历史约束。
## D03 / 2026-09-17 / 配置更改采用重载
先做关机、空闲状态下的完整重载,不在运行中热修改几何。重建配置、重新解析当前程序并重新回零,以免旧轨迹或回零结果与新结构混用。参数变化改变机器解,编程坐标的路径允许保持相同。
## D04 / 2026-09-17 / 文件保存边界
浏览器应用到 Worker 只修改虚拟配置,不冒充宿主文件已保存。采用显式文件导入和保存/导出;直接修改仓库 INI 后重新读取也应生效。静态部署无需增加写磁盘服务。
## D05 / 2026-09-17 / 证据与范围
本专项不改历史发布 gate 或 context lock,不宣称全 LinuxCNC 对等。每轮以任务矩阵和实测证据接续,未运行验证标为待办。保留工作区已有改动。
## D06 / 2026-09-17 / 图形变换与原生方程一致
转台层级采用旋转中心平移、轴间偏置平移、倾转、反向偏置、C 旋转及编程原点回移。XYZBC 的 90 度铸件朝向与 B 倾转坐标系分开;原生 `xyzbc-trt-gui.py` 的 yslide 基准是 150 mm。用 WASM 逆解输出驱动模型,在四种姿态验证模型上的编程点与刀尖重合,不在 JavaScript 中复制逆解方程。
## D07 / 2026-09-17 / 恢复与文件能力边界
参数改变后旧 checkpoint/trace 不得恢复到新几何,恢复前检查机型及六项几何值。完整恢复状态精度另由 TRT-R01 跟踪。INI 读取支持现有 include/引用解析;单文件编辑导出不支持把分散在 include 中的参数打包,界面对此明确报错,需修改实际包含文件后重新读取。
## D08 / 2026-09-17 / 异步界面状态
机型选择在 Worker 成功载入后提交;重新读取期间锁定主界面加载动作。参数应用成功但当前程序解析失败时,保留已生效参数并显示程序解析错误,旧路径已清理;不声称整笔操作回滚成功。

View File

@@ -0,0 +1,18 @@
# 五轴 TRT 参数化设计接续索引
本目录对应 2026-09-17 用户要求:在机床结构预览中配置 `xyzac-trt.ini`、`xyzbc-trt.ini`,统一几何参数、LinuxCNC WASM 运动学和 G 代码执行结果。
## 读取顺序
1. 本索引 → [04-任务矩阵](04-任务矩阵.md):选择首个依赖满足且未验收的任务。
2. [03-推进台账](03-推进台账.md):只读最新一轮和下一步。
3. 按任务读取 [01-项目功能内容](01-项目功能内容.md)、[02-项目程序开发详细步骤](02-项目程序开发详细步骤.md) 和直接相关代码。
4. 实施前核对 [06-决策记录](06-决策记录.md),验收后更新 [05-验收证据](05-验收证据.md)、矩阵和台账。
每轮必须记录实际改动、命令、结果和下一任务。未运行的检查不能记为通过;历史通过任务仅在相关代码改变时回归。此目录是本专项接续入口,历史仿真/发布轨道仍保留原有指针,不据此扩大发布范围。
当前状态:`TRT-P01` 至 `TRT-P06` 已验收。下一项为矩阵中的 `TRT-R01`,属于既有恢复精度问题,不影响本专项参数应用流程。实现不依赖聊天记录。用户文字提及 Image #1,但本轮未收到可读取的图片资源,布局按现有结构预览实现。
本地体验地址:`http://127.0.0.1:5174/`。启动命令:`npm --prefix web/react run dev -- --port 5174 --strictPort`;该端口被占用时选择其他端口。
在机床结构预览下方修改参数,关机且空闲时应用。保存 INI 会打开浏览器保存对话框,或下载文件;应用本身不覆盖磁盘。直接修改仓库里的 INI 后,点击“重新读取 INI”即可重新解析当前程序。