78 lines
7.8 KiB
Markdown
78 lines
7.8 KiB
Markdown
# CAM 原生内核流水线实施与任务分解
|
||
|
||
更新日期:2026-08-07
|
||
|
||
## 强制执行顺序
|
||
|
||
```text
|
||
CAD 几何
|
||
-> OpenCAMLib WASM 刀位算法
|
||
-> CAMotics 源码阶段运动契约
|
||
-> 生成规范 G-code
|
||
-> LinuxCNC WASM 解析、控制器语义、执行与验收
|
||
```
|
||
|
||
CAMotics 不解析流水线产生的规范 G-code。唯一的 G-code 解析和控制器语义权威是 LinuxCNC WASM。
|
||
|
||
## 已落地能力
|
||
|
||
| 任务 | 状态 | 实现与证据 |
|
||
| --- | --- | --- |
|
||
| CAM-NATIVE-01 OpenCAMLib | 完成 | 上游提交 `95b036fe28ce6d77c97b98e5fbc337904ae49560` 通过 Emscripten 3.1.69 构建;浏览器执行 `PathDropCutter`,不是 TypeScript 重写算法。 |
|
||
| CAM-NATIVE-02 OCL 制品门禁 | 完成 | `public/vendor/opencamlib/ocl.js` 为单文件嵌入 WASM;SHA-256 为 `0379040910f7af277c6e1f6411efb549292db0b071422a83954d93631253bf89`。 |
|
||
| CAM-NATIVE-03 CAMotics 源码阶段 | 完成(源码契约) | 锁定 CAMotics 提交 `e84665f2fa9d1151f03282ac7e01320bc65e015b`,依据 `GCodeMachine.cpp` 的 `start`、`changeTool`、`setFeed`、`move` 和 `end` 语义生成 G-code;适配层不解析输出。 |
|
||
| CAM-NATIVE-03B CAMotics 原生构建 | 完成(Qt5 GUI + TPL + CLI) | CAMotics `e84665f2...` 使用官方 C! `9b6672a0...`、Qt5、V8 ABI `v8_compress_pointers=0` 构建 `CAMotics/camotics`、`CAMotics/tplang`、`camsim`、`gcodetool`、`planner` 和 `build/camotics.so`;GUI/TPL 哈希、动态 Qt/V8 依赖、官方 TPL 10/10 测试和 Xvfb 主窗口(1200x800、可见)均通过 `config/camotics-native-artifact.json`。 |
|
||
| CAM-NATIVE-03C CAMotics 独立 WASM 内核 | 完成(扫掠子集) | 直接编译上游 `Sweep.cpp`、`ConicSweep.cpp`、`SpheroidSweep.cpp` 为零 imports 的 standalone WASM;Chrome 150 实际加载并执行 Conic/Spheroid depth、长段包围盒和确定性回放。 |
|
||
| CAM-NATIVE-04 OCCT 材料去除 | 完成(当前模型) | 使用 Bitbybit OCCT WASM 创建库存与切削工具并执行 BRep 布尔差;浏览器验证剩余体为结构有效单实体,可导出 BRep。 |
|
||
| CAM-NATIVE-05 Chrome 验收 | 完成 | Chrome 150 中 OCL 14 个刀位点、18 行 G-code、库存体积 300、去除体积 12、剩余体积 288、释放后内核引用为 0。 |
|
||
| CAM-NATIVE-06 主链 OCL 接管 | 完成(认证机型) | `prepareCamPipeline` 强制调用上游 `PathDropCutter`,以 48 个 OCL 刀位点驱动 CAMotics 源码阶段和 LinuxCNC XYZBC G-code;未提供 runner 时不会静默回退。 |
|
||
|
||
当前材料去除模型是确定性采样的平底刀 BRep 模型。轴向水平直线使用单个连续段包络,任意采样折线使用定向圆柱与端点球的连续段 BRep sweep;它是原生 OCCT 实体布尔,但不是 FreeCAD 原生 Path 材料去除的等价实现,能力报告固定为 `freeCadNativeEquivalent: false`。
|
||
|
||
## LinuxCNC WASM 接管
|
||
|
||
`cnc_wams_gpt6/linuxcnc-master/web/src/app.js` 已提供受控 `postMessage` bridge。父页面只能发送已经生成的 G-code,LinuxCNC 页面等待 machine case ready 后调用原生 `loadProgram`,由 LinuxCNC WASM 上游解释器生成轨迹,再按请求决定是否 `run`;返回结果固定带有 `backend: linuxcnc-wasm` 和 `parserAuthority: linuxcnc-wasm`。父页面不接收或替代 RS274 解析,也不把 CAMotics parser 放入执行链。
|
||
|
||
## 真实边界
|
||
|
||
- OpenCAMLib:上游算法已作为浏览器 WASM 执行。
|
||
- CAMotics:工作区已具备通过哈希、Qt5/V8 动态链接、官方 TPL 测试和真实 Xvfb 窗口冒烟验证的 1.3 原生 GUI/TPL,并保留 `camsim`、`gcodetool`、`planner` 和 Python 模块作为宿主 CLI/sidecar;同时有直接来源编译的 standalone sweep WASM,浏览器可执行该内核子集,但不是完整 Qt/TPL/程序运行时。
|
||
- CAMotics 解析边界:原生 `camsim` 只在独立冒烟证据中消费仓库示例。规范生产链仍由源码运动契约生成 G-code,并直接交 LinuxCNC WASM;不得把 CAMotics parser 提升为第二套规范解析器。
|
||
- CAMotics 浏览器边界:`public/vendor/camotics/camotics-sweep.wasm` 只包含上游扫掠数学和包围盒,不包含 G-code parser、TPL、Qt、文件系统或完整原生 GUI。能力报告将 `browserWasmKernelExecutable=true` 与 `browserExecutable=false` 分开记录;Qt5 GUI/TPL 仅在宿主进程中可用。
|
||
- LinuxCNC WASM:桥接已接入根应用和 LinuxCNC 页面;Chrome machine acceptance 已在重建后的 LinuxCNC WASM 产物上通过,报告保留解析块、轨迹段、RTCP 模态和限位结果;同一份程序已分别通过 `dry-run` 和 `run`。
|
||
- 连续工具轴:所选 XYZBC table-rotary-tilting 数字机型已完成;其他机型、完整奇异点 oracle 和生产授权仍关闭。LinuxCNC `web/evidence/production-safety-gate-matrix.json` 已覆盖 6 个 5 轴 INI,所有 gate fail-closed,`productionOpen=false`,没有实体运动或计量认证。
|
||
- 曲线扫掠:Chrome 已验证 `continuous-segment-sweep-brep` 的结构有效单实体和非零去料;解析 NURBS/圆弧的无弦误差 sweep、刀柄/夹具实体 oracle 仍开放。
|
||
|
||
## 后续任务安排
|
||
|
||
| 优先级 | 任务 | 验收条件 | 状态/所有者 |
|
||
| --- | --- | --- | --- |
|
||
| P0 | CAM-PIPE-01 LinuxCNC WASM 接管 | 将本模块生成的 G-code 送入 LinuxCNC WASM;记录解析块、模态状态、刀具/进给、执行轨迹及限位结果;不得调用 CAMotics parser。 | 已完成(认证机型) |
|
||
| P0 | CAM-PIPE-02 端到端一致性 | 比较 OCL 刀位、生成 G-code、LinuxCNC WASM 执行轨迹;建立坐标、单位、模态与容差门禁。 | 已完成(Chrome 认证链;泛化容差继续) |
|
||
| P1 | CAM-SIM-01 CAMotics 原生构建 | 安装并锁定 C!/SCons,构建 Qt5 `camotics` GUI、`tplang`、`camsim`、`gcodetool`、`planner` 与 Python 模块;提供提交、编译器、Qt/V8 动态依赖、制品哈希、官方 TPL 测试和 Xvfb 窗口冒烟证据。 | 已完成(宿主 Qt5 GUI/TPL/CLI;浏览器集成保持边界) |
|
||
| P1 | CAM-SIM-02 CAMotics standalone WASM | 从锁定上游 C++ sweep 源码构建零 imports WASM,提供 ABI、制品哈希、Node 和 Chrome 实际执行证据;禁止引入第二套规范 G-code parser。 | 已完成(sweep 子集;完整程序继续) |
|
||
| P1 | CAM-MR-02 任意曲线路径扫掠 | 对 OCL 采样段执行连续段 BRep sweep(定向圆柱 + 端点球并集),每个结果通过 OCCT BRep 结构校验;解析任意曲线的无弦误差 sweep 继续保留。 | 已完成(continuous-segment 子集;解析任意曲线仍开放) |
|
||
| P1 | CAM-5AXIS-01 连续工具轴 | 接入机床运动学、姿态连续性、奇异点和关节限位求解,并由 LinuxCNC WASM 执行轨迹验收。 | 已完成(XYZBC 数字机型;泛化姿态/奇异点和其它机型生产门仍开放) |
|
||
| P1 | CAM-FCSTD-01 Path 对象往返 | Path Job、ToolBit、ToolController、Operation 和命令列表执行 FCStd 双向 round-trip,并与 FreeCAD oracle 比较。 | 待 FCStd 所有者完成 |
|
||
|
||
## 验证命令
|
||
|
||
```bash
|
||
./npmw run build:camotics-native
|
||
./npmw run check:camotics-native
|
||
./npmw run build:camotics-wasm
|
||
./npmw run check:camotics-wasm
|
||
./npmw run test:camotics-wasm
|
||
./npmw run test:chrome-camotics-wasm
|
||
./npmw run check:chrome-camotics-wasm
|
||
node scripts/check-opencamlib-wasm.mjs
|
||
./npmw exec tsx -- --test tests/camNativeSimulation.test.ts
|
||
./npmw exec tsc -- --noEmit
|
||
node scripts/run-chrome-cam-native-simulation.mjs
|
||
node scripts/check-chrome-cam-native-simulation.mjs
|
||
npm run test:chrome-cam-linuxcnc-machine
|
||
npm run check:chrome-cam-linuxcnc-machine
|
||
```
|
||
|
||
机器可读证据位于 `config/camotics-native-artifact.json`、`config/camotics-wasm-artifact.json`、`config/chrome-camotics-wasm-verification.json`、`config/opencamlib-wasm-artifact.json`、`config/chrome-cam-native-simulation-verification.json`、`config/chrome-cam-linuxcnc-machine-verification.json` 与 LinuxCNC `web/evidence/digital-machine-five-axis-certification.json`。
|