62 lines
4.4 KiB
Markdown
62 lines
4.4 KiB
Markdown
# 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.md`
|
||
- `wasm-port/docs/compatibility-validation.md`
|
||
- `wasm-port/docs/linuxcnc-test-porting-tracker.md`
|
||
- 对应测试、fixture、manifest 或 blocked table
|
||
- 本目录 `03-推进台账.md`、`04-任务矩阵.md`、`05-验收证据.md`
|