Files
cnc_wams/完善wasm/working/01-项目功能内容.md
2026-07-10 03:22:55 -04:00

4.4 KiB
Raw Blame History

01-项目功能内容

项目目标

wasm-port 的目标不是实现一个外观接近 LinuxCNC 的 Web 仿真器,而是把 LinuxCNC 源码、测试资产、nc_filesconfigs/sim 和运行规则分层迁移到 Web/WASM/OPFS 环境,并用 Native、WASM Node、真实浏览器三层证据证明行为一致。

只有同时满足以下条件,才能对外宣称“完全对标 LinuxCNC”

  • CNC 核心语义来自 LinuxCNC 源码,不由 JS/TS 或项目自有 C/C++ 重写。
  • 上游测试、示例程序和仿真机床配置可被接入、执行、分类、复验。
  • Native、WASM Node、真实浏览器在可比较范围内输出一致。
  • OPFS、Worker、UI、SDK、C ABI 只承担边界桥接、调度、展示和持久化职责。
  • 不能执行的 LinuxCNC 项必须记录阻塞原因、源码归属和解除条件。

功能树范围

功能域 LinuxCNC 基准 wasm-port 应提供的能力 最低目标
源码基线与同步 tools/upstream-baseline.txt、vendored manifest 锁定上游 commit、校验 vendored 文件、禁止未声明 drift L1 已同步
G 代码解释器 src/emc/rs274ngctests/interp G0/G1/G2/G3、参数、O-word、错误、刀补、固定循环、车削、NURBS 等语义来自上游 L4 Browser 通过
remap 与 Python 边界 tests/remapsrc/emc/pythonplugin NGC remap 优先接入Python remap 在沙箱/runtime 未闭合前保持阻塞或条件通过 L3/L4 或 Blocked
nc_files 示例 linuxcnc/nc_files 官方示例按上下文分类执行,不能修改上游 G 代码使其通过 L4 Browser 通过
configs/sim linuxcnc/configs/sim INI、tool.tbl、var、subroutine、USER_M_PATH、HAL/UI 依赖按真实机床配置处理 L2 到 L4 分层
Task/NML/状态机 src/emc/tasksrc/emc/nml_intf 程序打开、运行、暂停、继续、单步、abort、MDI、倍率由 LinuxCNC 式状态机驱动 L3/L5
TP/运动控制 src/emc/tpsrc/emc/motion 轨迹规划、多轴同步、限位、点动、回零、跟随误差有数值或阻塞证据 L3 或 Blocked
运动学/五轴 src/emc/kinematics trivkins、identity、5axis、switchkins、RTCP/G43.4 源码级 probe 和浏览器代表流 L4
HAL/RTAPI src/halsrc/rtapi pin/signal/param、常用组件、虚拟线程可复验实时内核和硬件驱动条件通过或阻塞 L3/条件通过
刀具/主轴/IO src/emc/tooldatasrc/emc/iotask tool.tbl、T/M6/M61、主轴、冷却、M62-M68 由上游语义或明确边界驱动 L4 或 Blocked
INI/OPFS/文件系统 src/emc/ini、OPFS adapter LinuxCNC INI 规则、配置目录、var/tool 文件持久化、会话恢复 L4
浏览器 UI LinuxCNC usr_intf 作为操作语义参考 UI 显示底层状态快照,不能制造第二套坐标、模态、刀具或程序状态 L5
多实例/并发 session、OPFS、Worker 多标签页/多机床隔离,文件并发有锁或冲突策略 L4/L5

状态晋级规则

状态 含义 允许宣称
L0 已盘点 已确认 LinuxCNC 源码和测试资产归属 已纳入计划
L1 已同步 上游文件已 vendored 并可同步校验 源码已接入
L2 Native 通过 Native probe 或上游输出对比通过 Native 层对标
L3 WASM 通过 WASM Node 与 Native 一致 WASM 核心语义对标
L4 Browser 通过 真实浏览器/OPFS/Worker 与 WASM 一致 浏览器运行边界对标
L5 UI 发布 UI 操作和状态显示与底层一致并进入门禁 用户可见功能发布
Blocked 阻塞 缺 Python/full-process/HAL/硬件/实时内核/外部进程边界 只能宣称已识别阻塞

一票否决约束

  • 不得用自研解释器、刀补、固定循环、轨迹规划、运动学、HAL 逻辑冒充 LinuxCNC。
  • 不得把 full-process task/HAL/motion 测试降级成普通解释器测试后标为通过。
  • 不得只验证 DOM、按钮或截图就宣称 LinuxCNC 语义通过。
  • 不得把未知失败计入 expected_fail。
  • UI 坐标、模态、刀具、主轴、程序状态不得与底层快照不一致。

输出物要求

每个功能完成时至少同步以下输出物:

  • wasm-port/docs/source-reuse-map.md
  • wasm-port/docs/compatibility-validation.md
  • wasm-port/docs/linuxcnc-test-porting-tracker.md
  • 对应测试、fixture、manifest 或 blocked table
  • 本目录 03-推进台账.md04-任务矩阵.md05-验收证据.md