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

62 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`