4.4 KiB
4.4 KiB
01-项目功能内容
项目目标
wasm-port 的目标不是实现一个外观接近 LinuxCNC 的 Web 仿真器,而是把 LinuxCNC 源码、测试资产、nc_files、configs/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/rs274ngc、tests/interp |
G0/G1/G2/G3、参数、O-word、错误、刀补、固定循环、车削、NURBS 等语义来自上游 | L4 Browser 通过 |
| remap 与 Python 边界 | tests/remap、src/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/task、src/emc/nml_intf |
程序打开、运行、暂停、继续、单步、abort、MDI、倍率由 LinuxCNC 式状态机驱动 | L3/L5 |
| TP/运动控制 | src/emc/tp、src/emc/motion |
轨迹规划、多轴同步、限位、点动、回零、跟随误差有数值或阻塞证据 | L3 或 Blocked |
| 运动学/五轴 | src/emc/kinematics |
trivkins、identity、5axis、switchkins、RTCP/G43.4 源码级 probe 和浏览器代表流 | L4 |
| HAL/RTAPI | src/hal、src/rtapi |
pin/signal/param、常用组件、虚拟线程可复验;实时内核和硬件驱动条件通过或阻塞 | L3/条件通过 |
| 刀具/主轴/IO | src/emc/tooldata、src/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.mdwasm-port/docs/compatibility-validation.mdwasm-port/docs/linuxcnc-test-porting-tracker.md- 对应测试、fixture、manifest 或 blocked table
- 本目录
03-推进台账.md、04-任务矩阵.md、05-验收证据.md