Files
cnc_wams/完善wasm/working/01-项目功能内容.md
2026-07-10 21:26:42 -04:00

5.5 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.1/G49 按刀长补偿路径验收G43.4 未获本地源码证实时不得宣称通过XYZBC、XYZAC、XYZAB、TRSRN/max5 等五轴族必须按 profile 分开验收;自定义/并联运动学只对已预编译模块按 gate 晋级 L4
HAL/RTAPI src/halsrc/rtapi pin/signal/param、虚拟线程和五个基础组件已闭合HAL Meter 三类当前值与 Scope waveform JSON/Web compare 已通过;未知/动态 loadrt、原生 halscope process、宿主实时内核和硬件驱动继续阻塞 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/HAL/硬件/宿主实时内核/完整 native process topology/外部进程边界 只能宣称已识别阻塞Web/WASM full-process simulation runtime 另按 22 的 promotion 边界验收

一票否决约束

  • 不得用自研解释器、刀补、固定循环、轨迹规划、运动学、HAL 逻辑冒充 LinuxCNC。
  • 不得把 full-process task/HAL/motion 测试降级成普通解释器测试后标为通过Web/WASM simulation runtime promotion 必须同时保留 hardwareDrive=falsehostRealtimeKernel=false、host process disabled 等边界字段。
  • 不得把项目 release ready=true、host 命令齐全、dispatch allowed、ready_disabled_by_default 或单 fixture native pass 写成宿主 family promotion宿主晋级必须按 25 经过独立 evidence、Node/Browser gate 和人工解锁。
  • 不得把 HAL .comp 的 Web/WASM 预编译执行写成宿主动态模块、实时内核或硬件已完成;全量 vendor/overlay gate 和 halcompile 派生也不代表 generated overlay 存在于上游 commit。
  • 不得只验证 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