Files
Web_FreeCAD_Bitbybit/docs/cam-exact-closure-implementation.zh-CN.md

7.8 KiB
Raw Blame History

Web FreeCAD CAM exact 闭包实施文档

更新时间2026-08-07

1. 验收口径

本轮以 FreeCAD 1.1.1、提交 0108fd4b4850cc46e625b60e53cea7a7bbe69f8d 为 CAM/Path 和 Qt 行为基线。cnc_wams_gpt6/linuxcnc-master/web 中已经构建并通过既有回归的 LinuxCNC WebAssembly 是用户指定的实体机床与真实控制器认证权威;它的上游 RS274、canonical command、task/motion、HAL、trajectory planner 和 kinematics 结果决定 G-code 是否被机床接受。

运行介质、源码提交和产物哈希必须保留在报告中以保证复现性。按照项目验收口径LinuxCNC WASM 认证通过后不再要求另一台物理设备作为 CAM-32 的阻塞条件。

2. 唯一语义链

  1. CAD/FreeCAD Path 生成并保存 Path::Feature / Path::FeaturePythonPath::PropertyPathWeb 端以确定性 Job/Path 表示承接。
  2. OpenCAMLib WASM 执行 drop-cutter/waterline 等刀具与曲面算法,产出受版本和哈希约束的刀位结果。
  3. CAMotics 官方源码阶段依据 GCodeMachine.cppstart/changeTool/setFeed/move/end 语义生成受控 G-code当前不调用 CAMotics parser避免出现第二套 G-code 解释口径。
  4. G-code 生成完成后才允许调用 LinuxCNC WASM。所有语法、模态、子程序/remap、单位、G93/G94、M428/M429、task/motion、轨迹规划和错误诊断只由 LinuxCNC WASM 决定。
  5. 连续五轴程序使用目标机 XYZBC 配置、M428 RTCP、逐段 G93 inverse-time feed 和 M429 identity 恢复,并由 LinuxCNC 上游 task/motion 与 xyzbcKinematicsInverse 完成接受测试OCCT 在该链路的仿真侧执行实体材料去除。

强制顺序为:CAD -> OpenCAMLib WASM -> CAMotics source stage -> G-code -> LinuxCNC WASM。任何绕过 G-code 生成阶段直接调用控制器、或在 Web/CAMotics 中另行解析最终 G-code 的路径,都不属于本项目 CAM 合同。

3. 任务分派

任务 Owner 交付 验收门 状态
XCAM-01 FreeCAD Path 算法 oracle ORACLE 原生 Profile 基准、命令序列、边界、长度、稳定哈希 FreeCAD GUI/Path 实际运行且固定提交 completedProfile 基线;其余工序继续)
XCAM-02 Qt 动态 oracle ORACLE+UI CAM workbench、菜单/工具栏、命令启用、选择状态和 Task 状态 Xvfb 下真实 Qt action/selection 回放 completed56 命令Task 生命周期继续)
XCAM-03 Path FCStd 双向往返 IO+ORACLE Path::FeaturePath::FeaturePythonPath::PropertyPath save/open/mutate/save/open 原生对象、命令与属性不丢失Web 资源级路径编辑默认保护FeaturePython 仅显式 opt-in 且不执行脚本 native verified / safe resource codec verified / operation semantics in_progress
XCAM-04 CAM Job 元数据 CORE+UI+QUALITY CAM_CommentCAM_PropertyBagCAM_Compound 在 Job/JSON/Undo/Redo 中保持一致 评论、字符串/数字/布尔属性和复合 Operation 已有边界校验及依赖清理;不代表原生 Path operation-object 或 Python recompute browser verified / native semantic parity in_progress
XCAM-04 OpenCAMLib WASM KERNEL 锁定上游提交的 OCL Emscripten 产物和浏览器 Worker PathDropCutter/Adaptive/Waterline 可执行、可取消、资源有界 completed
XCAM-05 CAMotics 源码阶段 KERNEL+QUALITY 锁定官方 CAMotics/C! 源码,按源码运动契约生成 G-code并构建原生 GUI/TPL、headless CLI 与 Python sidecar 主链不调用 CAMotics G-code parser最终解析只走 LinuxCNC WASM原生 CLI/STL 和 Qt/TPL 冒烟可复跑 source-stage + native GUI/TPL/CLI completed / browser full-program differential pending
XCAM-06 原生实体材料去除 KERNEL OCCT cutter sweep/boolean、逐步实体和剩余体积 BRep 有效、体积单调、资源释放、与 OCL 路径一致 completed当前平底刀/直线与采样模型)
XCAM-07 LinuxCNC RTCP 与机床认证 CONTROLLER+QUALITY XYZBC 连续工具轴、G93、M428/M429、限位/奇异/停机报告 LinuxCNC WASM RS274、task/motion、HAL、kins 全链通过 completed认证机型泛化安全门继续
XCAM-08 Web Facade/UI 接入 PLATFORM+UI CAD→OCL→CAMotics→G-code→LinuxCNC WASM bridge Chrome 实际 OCL 48 刀位点、65 行 G-code、48 轨迹段并被 LinuxCNC 接受 completed认证流程完整 Qt 对话框 oracle 继续)
XCAM-09 exact 差异闭包 QUALITY CAM parity 合同、WBS、证据哈希和零未登记差异 所有前置门通过后才能提升声明 pending

连续执行顺序为 XCAM-01/02/03 + XCAM-04/05/06 + XCAM-07 -> XCAM-08 -> XCAM-09。认证闭环固定使用同一份由 OCL 输出驱动的 G-codeLinuxCNC 接受的是这份最终程序,不是旧的网页路径。

4. RTCP G-code 合同

目标控制器为 cnc_wams_gpt6 的 LinuxCNC WASM机床配置为 XYZBC table-rotary-tilting。程序至少满足

  • 入口使用 G21 G17 G40 G49 G80 G90 G94 等明确安全模态,并完成 Tool/Spindle/Coolant 状态设置。
  • 非 TCP 的安全定位在 identity kinematics 下进行;执行 M428 后才允许 XYZBC RTCP 联动。
  • 连续切削段使用 G93,每个 G1/圆弧切削块具有显式正有限 F inverse-time 值。
  • B 轴必须落在配置的软件限位内C 轴展开必须连续;相邻旋转轴跳变、非有限坐标、零时长段、不可达姿态和奇异邻域必须拒绝或产生明确诊断。
  • 退出切削前恢复 G94,安全抬刀并执行 M429;程序结束时主轴和冷却关闭。
  • 认证必须由 LinuxCNC WASM 上游解释器生成 canonical motion并由 task/motion、HAL 和上游 XYZBC kinematics 消费,文本正则检查不能作为接受证据。

5. 材料去除合同

主结果由 OCCT 实体布尔生成,输入是 Stock BRep、刀具/刀柄实体和 LinuxCNC canonical motion。每一步记录 operation、motion index、输入/输出 BRep 指纹、去除体积、剩余体积、碰撞和诊断。体积不得增加,空布尔或无效 BRep 必须失败,所有 ShapeHandle/Worker 引用必须归零。

OpenCAMLib 用于 drop-cutter/waterline 等刀具-表面算法,不承担 G-code 解释。CAMotics 固定官方源码提交,源码阶段负责把三轴受控运动写成 G-code工作区的 CAMotics 1.3 Qt/TPL、camsimgcodetoolplanner 和 Python sidecar 均已构建并通过对应冒烟,另将上游 sweep C++ 编译为可由浏览器实际加载的 standalone WASM。该 WASM 只覆盖 Conic/Spheroid sweep 与包围盒,不包含完整 camsim、TPL、Qt 或 parser它只作为浏览器内核子集证据不进入规范控制链。最终 G-code 不经过 CAMotics parser而是直接交给 LinuxCNC WASMCAMotics 的三轴能力不能代替五轴 LinuxCNC RTCP 运动学认证。

6. 证据和声明规则

每个报告必须包含源码提交、构建命令、产物路径、字节数和 SHA-256、运行环境、成功与负例计数、资源释放结果。只有机器可重复执行的报告才能进入 config/freecad-cam-parity.json。源码清册、静态字符串或截图不能单独关闭算法、控制器、FCStd 或实体材料去除任务。

7. 已通过的主链证据

config/chrome-cam-linuxcnc-machine-verification.json 已由 Chrome 150 实际执行OCL 上游 PathDropCutter 以 2 个 CAD 操作平面三角面把 5 个候选点解析为 48 个刀位点CAMotics 源码阶段随后生成 2758 字节 G-codeLinuxCNC WASM 接受 65 行、138 个块、48 个轨迹段,解析权威和后端均为 linuxcnc-wasm。程序包含 M428/M429G93/G94B5→B15C359→C361

这份证据关闭的是选定 XYZBC table-rotary-tilting 数字机床案例,不等价于任意机床安全认证、实体执行、完整 FreeCAD Path 算法、浏览器内完整 CAMotics 程序或同输入 simulator differential。