Add bounded context governance and task plan

This commit is contained in:
2026-08-20 15:15:16 +08:00
parent 2c814634c3
commit d4dec05c37
9 changed files with 2659 additions and 0 deletions

View File

@@ -0,0 +1,386 @@
# LinuxCNC 纯 Web/WASM 仿真全功能覆盖矩阵(第一版)
**对应路线**:[LinuxCNC 纯 Web/WASM 仿真机床技术路线](linuxcnc-web-wasm-technical-roadmap.md)
**执行治理**:[LinuxCNC Web/WASM 仿真项目执行与交付策略](linuxcnc-web-wasm-execution-strategy.md)
**源码关联**:[LinuxCNC Web/WASM 仿真功能与源程序关联目录](linuxcnc-web-wasm-source-map.md)
**前端与通信**:[LinuxCNC Web/WASM 仿真前端与通信详细设计](linuxcnc-web-wasm-frontend-communication-design.md)
**总控执行**:[LinuxCNC Web/WASM 仿真移植总控执行手册](linuxcnc-web-wasm-integration-playbook.md)
**目标**:覆盖 LinuxCNC 面向仿真机床的全部用户可见功能
**范围**:只做仿真,不接真实机床,不实现真实硬件访问
**基线**:仓库当前 LinuxCNC `2.10.0~pre0`
## 1. 覆盖规则
本矩阵不是功能愿望清单,而是验收清单。每一行都必须拥有实现、测试和差异报告;只有标记为 `REAL-EXCLUDED` 的真实硬件/物理安全项目不进入仿真覆盖率。任务拆分、固定 context lock、上下文包预算、断网接续和发布门禁遵循[执行与交付策略](linuxcnc-web-wasm-execution-strategy.md);端到端场景和任务依赖以[总控执行手册](linuxcnc-web-wasm-integration-playbook.md)为准;本矩阵只维护功能条目及其证据索引。
| 标记 | 含义 | 验收要求 |
|---|---|---|
| `SIM-CORE` | 直接复用 LinuxCNC C/C++ 核心 | 原生与 WASM golden 对照 |
| `SIM-ADAPTER` | 进程、NML、文件、时钟等兼容层 | API、状态和错误码对照 |
| `SIM-DEVICE` | 硬件功能的虚拟数字孪生 | pin、时序、故障、报警和状态可录制 |
| `WEB-EQUIV` | 桌面 GUI/工具在 Web 中等价实现 | 工作流和配置结果对照,不要求像素一致 |
| `PY-WASM` | Python/remap/过滤器在 Pyodide 中执行 | 受控宿主 API、异常和返回值对照 |
| `REAL-EXCLUDED` | 真实硬件、物理安全和实时内核 | 不实现,但必须明确报错和文档说明 |
完成定义:所有 `SIM-*`、`WEB-EQUIV`、`PY-WASM` 项在正常、边界、错误、暂停/恢复、持久化/离线和适用的跨域交互维度达到 100% 通过;`REAL-EXCLUDED` 项在配置检查中全部被识别且不会误报为已连接。单一百分比不能替代来源闭包、维度闭包和交互闭包。
条目状态使用执行策略定义的 `planned`、`in_progress`、`implemented`、`verified`、`accepted`、`blocked` 和 `REAL-EXCLUDED`。`accepted` 必须有 context lock、自动测试和差异报告;状态缺失、来源新增但无 manifest 项、或上下文包超预算均为 CI 阻断。
## 2. 功能来源和清单生成
覆盖清单必须从以下仓库来源自动生成,避免只依赖人工整理:
各功能域的实际源文件、配置入口和测试入口维护在[源程序关联目录](linuxcnc-web-wasm-source-map.md);本节定义扫描全集,两者共同构成 manifest 的来源合同。
| 来源 | 覆盖内容 |
|---|---|
| `linuxcnc/docs/src/Master_Documentation.adoc` | 用户、配置、HAL、ClassicLadder、运动、remap、GUI、G-code 和 Python 接口;Hardware Drivers/Examples 只生成排除项 |
| `linuxcnc/configs/sim/**` | 全部仿真 INI/HAL/TBL/NGC/PY/XML/TCL 配置和样例 |
| `linuxcnc/tests/**` | 启动、解释器、运动、HAL、IO、remap、工具、回零、限位和 UI 测试 |
| `linuxcnc/unit_tests/**` | TP、解释器和数学单元测试 |
| `linuxcnc/src/emc/**` | task、io、motion、kinematics、interpreter、tooldata、NML 接口 |
| `linuxcnc/src/hal/components/**` | 全部 `.comp`、C 组件、仿真组件、测试组件和组件模板 |
| `linuxcnc/src/hal/classicladder/**` | 梯形图、顺序功能图、变量、定时器、计数器、Modbus 逻辑和工程文件 |
| `linuxcnc/src/emc/usr_intf/**`、`lib/python/**` | AXIS、Gmoccapy、Touchy、Gscreen、QtVCP、PyVCP、GladeVCP、Vismach 等界面和脚本 |
构建脚本生成 `coverage/manifest.jsonl`,字段至少包括:`id`、`source`、`source_sha`、`domain`、`kind`、`dependencies`、`inputs`、`outputs`、`errors`、`sim_status`、`web_status`、`test_id`、`oracle`、`golden`、`difference`、`coverage_dimensions`、`context_id`、`exclusion_reason`。`source` 必须可定位到文档锚点、源码符号、配置文件或测试用例;`dependencies` 必须递归闭包;`oracle` 必须说明原生对照、规范结果或明确的 Web 等价判定。任何新增源码、文档功能或仿真配置没有 manifest 项时,CI 失败。
### 2.1 完整性闭包和防遗漏检查
每次生成 manifest 都执行以下闭包检查,并将结果作为构建产物:
1. 对文档标题、G/M/O/Python/HAL/API 名称、导出符号、`.comp`、ClassicLadder 对象、`configs/sim/**` 资源和测试入口做规范化扫描,记录来源总数和来源摘要。
2. 计算来源到 manifest 的反向索引;任何孤儿来源、重复 ID、空依赖、无测试、无 oracle 或状态字段缺失都使 CI 失败。
3. 对每个条目展开依赖图,确认依赖条目存在且没有未登记的真实硬件路径;仿真配置引用的排除功能必须有对应数字孪生条目。
4. 为每个条目生成正常、边界、错误、暂停/恢复、持久化/离线测试维度;G-code、HAL、IO、Python、UI 和存储之间的关键交互生成 pairwise/关键路径用例。
5. 比较原生参考运行器和 WASM 结果,保存首个差异 tick、状态/错误字段和容差;没有可比 oracle 的条目只能是 `blocked`,不能是 `accepted`。
6. 发布前生成完整性报告:已接受、进行中、阻断、排除、孤儿来源、未覆盖维度和未覆盖交互分别列出;任何非零的未覆盖或孤儿项阻止全功能声明。
## 3. 启动、工程和配置
| 功能 | Web/WASM 实现 | 标记 |
|---|---|---|
| LinuxCNC 启动、初始化、退出和重启 | Worker 内 `create/load/start/stop/reset/destroy` 状态机 | `SIM-ADAPTER` |
| 配置选择器和 sample 配置 | OPFS 工程浏览器;完整导入 `configs/sim/**` | `WEB-EQUIV` |
| INI 注释、section、变量和 include | 兼容解析、相对路径和循环检测 | `SIM-CORE` |
| `[EMC]`、`[DISPLAY]`、`[FILTER]`、`[RS274NGC]` | 仿真相关字段读取、校验、警告和 Web 配置编辑;桌面进程字段识别后映射或排除 | `SIM-ADAPTER` |
| `[EMCMOT]`、`[TASK]`、`[HAL]`、`[HALUI]`、`[APPLICATIONS]` | 仿真字段映射到虚拟运行时;外部宿主应用不执行 | `SIM-ADAPTER` |
| `[TRAJ]`、`[KINS]`、`[AXIS_*]`、`[JOINT_*]`、`[SPINDLE_*]`、`[EMCIO]` | 轴、关节、主轴、IO、回零和运动参数全部生效 | `SIM-ADAPTER` |
| 多入口 INI、include 目录和资源查找 | `/workspace` 虚拟 POSIX 路径 + OPFS | `SIM-ADAPTER` |
| HAL twopass、HALFILE 顺序、参数展开 | 解析、排序、重复加载和错误语义对照 | `SIM-ADAPTER` |
| HAL 命令 `loadrt/addf/setp/net/sets/ newsig/linksp/linkps` | Worker 内命令执行和状态回放 | `SIM-CORE` |
| 参数、变量、`.var`、tool table、tool database | 内存运行态 + OPFS 事务提交 | `SIM-ADAPTER` |
| 工程复制、删除、重命名、导入、导出 | OPFS journal + ZIP/目录导入导出 | `WEB-EQUIV` |
| 启动错误、配置警告、资源缺失 | 行号、路径、错误码和恢复建议 | `SIM-ADAPTER` |
## 4. G-code、O-code、M-code 和解释器
### 4.1 单词、模式和程序结构
| 功能 | 覆盖内容 | 标记 |
|---|---|---|
| 行语法 | `%`、序号 `N`、注释、空行、大小写、空格、行尾 | `SIM-CORE` |
| 轴/关节词 | `X Y Z A B C U V W`、额外关节和旋转轴 | `SIM-CORE` |
| 速度/主轴/刀具 | `F S T H D Q I J K L P R E` 等全部合法词 | `SIM-CORE` |
| 参数 | `#1..#5399`、命名参数、系统参数、数组、间接寻址 | `SIM-CORE` |
| O-code | sub、call、return、do/while、if/elseif/else、break、continue、repeat、call file、返回值、错误 | `SIM-CORE` |
| Fanuc 风格 | `M98/M99`、编号程序和参数传递 | `SIM-CORE` |
| 读前瞻/队列破坏 | MDI、M-code、输入等待、暂停、remap 的队列语义 | `SIM-ADAPTER` |
| 程序控制 | run、pause、optional stop、single block、step、abort、resume、restart、line seek | `WEB-EQUIV` |
| 错误 | 语法、表达式、参数、路径、运动学和运行时错误 | `SIM-CORE` |
### 4.2 G-code 全量列表
以下代码全部纳入解析、状态、canonical 输出和运动结果测试:
| 类别 | 代码 |
|---|---|
| 运动与停留 | `G0 G1 G2 G3 G4` |
| 样条/NURBS | `G5 G5.1 G5.2 G5.3` |
| 车床模式 | `G7 G8` |
| 参数/坐标/刀具写入 | `G10 L0 L1 L2 L10 L11 L20` |
| 平面 | `G17 G17.1 G18 G18.1 G19 G19.1` |
| 单位与预定义点 | `G20 G21 G28 G28.1 G30 G30.1` |
| 同步/探针 | `G33 G33.1 G38.2 G38.3 G38.4 G38.5` |
| 刀补 | `G40 G41 G41.1 G42 G42.1 G43 G43.1 G43.2 G49` |
| 坐标系 | `G52 G53 G54 G55 G56 G57 G58 G59 G59.1 G59.2 G59.3` |
| 轨迹控制 | `G61 G61.1 G64` |
| 车床循环 | `G70 G71 G71.1 G71.2 G72 G72.1 G72.2 G74 G76` |
| 铣削/钻孔循环 | `G73 G80 G81 G82 G83 G84 G85 G86 G87 G88 G89` |
| 距离/弧距离 | `G90 G90.1 G91 G91.1` |
| G92 | `G92 G92.1 G92.2 G92.3` |
| 进给与主轴模式 | `G93 G94 G95 G96 G97 G98 G99` |
### 4.3 M-code 全量列表
| 类别 | 代码及仿真行为 |
|---|---|
| 暂停/结束 | `M0 M1 M2 M30 M60`;由 Web 控制面板和虚拟托盘/换盘事件驱动 |
| 主轴 | `M3 M4 M5 M19`;虚拟主轴转速、方向、定向和到速状态 |
| 换刀 | `M6 M61`;虚拟手动/随机/非随机换刀、准备/完成状态和失败注入 |
| 冷却 | `M7 M8 M9`;虚拟雾/洪水/主轴冷却 pin 和状态 |
| 倍率 | `M48 M49 M50 M51 M52 M53`;进给、主轴、adaptive、feed stop |
| IO | `M62 M63 M64 M65 M66 M67 M68`;同步/立即数字和模拟 IO、输入等待和超时 |
| 模态 | `M70 M71 M72 M73`;保存、失效、恢复和自动恢复模态状态 |
| 子程序 | `M98 M99`;程序调用、返回和选择性模态恢复 |
| 用户命令 | `M100-M199`;映射为 OPFS 工程内白名单 Python/NGC 虚拟动作,不执行宿主命令 |
### 4.4 Remap、Python 和过滤器
| 功能 | Web/WASM 实现 | 标记 |
|---|---|---|
| 内置 remap prolog/epilog | 解释器内 C++ ABI 复用 | `SIM-CORE` |
| NGC remap | 虚拟文件工作区中的 O-code 执行 | `SIM-ADAPTER` |
| Embedded Python remap | Pyodide Worker,暴露 linuxcnc/hal/INI/参数虚拟模块 | `PY-WASM` |
| `T/M6/M61/S/F` remap | 完整参数、返回值、异常和顺序对照 | `PY-WASM` |
| 自定义 G/M code | 工程 manifest 注册和安全限额 | `PY-WASM` |
| `[FILTER]` 程序过滤器 | 在 Pyodide 中执行 `.py/.pyc` 的纯计算/文本过滤部分 | `PY-WASM` |
| CAD/CAM 外部程序 | 不执行宿主程序;提供内置转换插件接口和错误状态 | `WEB-EQUIV` |
| Python `subprocess/threading/socket/设备` | 虚拟 API 返回 LinuxCNC 约定错误 | `REAL-EXCLUDED` |
## 5. 运动、轨迹、轴、关节和运动学
| 功能域 | 全量覆盖项 | 标记 |
|---|---|---|
| TP | 直线、圆弧、球面弧、样条、NURBS、前瞻、blend、exact path、exact stop、速度/加速度/jerk 限制 | `SIM-CORE` |
| 运行模式 | coordinated、teleop、free/joint jog、MDI、单步、暂停、恢复、abort、queue-buster | `SIM-ADAPTER` |
| 轴/关节 | X/Y/Z/A/B/C/U/V/W、额外关节、随机/非随机配置、轴-关节映射 | `SIM-CORE` |
| 限制 | soft limit、hard limit、following error、backlash、offset limit、速度/加速度限制 | `SIM-ADAPTER` |
| 回零 | search/latch/final velocity、index、shared switch、offset、sequence、volatile、immediate、locking indexer、inhibit | `SIM-DEVICE` |
| 坐标 | machine/world/relative/display、G5x、G52、G92、rotation、scale、external offset、moveoff | `SIM-CORE` |
| 补偿 | cutter radius、tool length、dynamic tool length、additional tool offset、wear、螺距误差 | `SIM-CORE` |
| 主轴同步 | threading、G33/G33.1、rigid tapping、CSS、gear、orient、multiple spindle | `SIM-DEVICE` |
| 控制环 | PID、feed/velocity/position loop、encoder、stepgen、adaptive feed | `SIM-CORE` |
| 运动学模块 | `trivkins`、`5axiskins`、`corexykins`、`cubic`、`genhexkins`、`genserkins`、`lineardelta`、`maxkins`、`pentakins`、`rosekins`、`rotarydelta`、`rotatekins`、`scarakins`、`scorbot`、`tripod`、`xyzac-trt`、`xyzbc-trt`、`switchkins`、`ugenser/userkfuncs` | `SIM-CORE` |
| DH/机器人 | DH 参数、PUMA、SCARA、六足、Delta、Pentapod、Scorbot 和自定义静态 kinematics | `SIM-CORE` |
| 用户 kinematics | 构建期静态 WASM ABI、热切换由仿真状态机完成 | `SIM-ADAPTER` |
| 坐标/姿态显示 | joints、axes、pose、forward/inverse、tool orientation 和 singularity 错误 | `WEB-EQUIV` |
## 6. 机床类型和数字孪生
| 仿真机床 | 覆盖内容 | 标记 |
|---|---|---|
| 3/4/5/6/7/8/9 轴铣床 | 轴、关节、刀具、冷却、换刀、探针、坐标系和轨迹 | `SIM-DEVICE` |
| 车床 | G7/G8、G70/G71/G72/G76、主轴 CSS、刀尖半径、背刀塔、Fanuc Y、双主轴 | `SIM-DEVICE` |
| Gantry/CoreXY | 双关节、耦合、gantry HAL、同步误差和回零 | `SIM-DEVICE` |
| 机器人/Delta/Hexapod | 全部内置 kinematics、关节限位、姿态和模型 | `SIM-DEVICE` |
| 等离子 | torch enable、height control、arc-ok、ohmic、pierce、cut recovery、material table、qtplasmac 行为 | `SIM-DEVICE` |
| 激光 | laser power、PWM/模拟输出、动态功率和轨迹同步 | `SIM-DEVICE` |
| 泡沫切割 | 双平面/双 Z、foam kinematics、丝热功率和同步 | `SIM-DEVICE` |
| 探针/自动对刀 | probe input、触发位置、失败/超时、tool sensor 和宏 | `SIM-DEVICE` |
| 3D 打印/挤出 | 虚拟挤出轴、温度/风扇/材料状态(若 LinuxCNC 仿真配置启用) | `SIM-DEVICE` |
| 毛坯和切削 | 轨迹核心与可视化切削层分离;heightfield/voxel/SDF 按机床类型选择 | `WEB-EQUIV` |
| 故障注入 | 限位、跟随误差、探针不触发、主轴不到速、换刀失败、IO 超时、存储失败 | `SIM-DEVICE` |
## 7. HAL 全量和仿真 I/O
### 7.1 HAL 运行时契约
| 功能 | 覆盖内容 | 标记 |
|---|---|---|
| HAL 对象 | component、pin、signal、parameter、owner、type、direction、value、export/unexport | `SIM-CORE` |
| HAL 命令 | `loadrt`、`addf`、`start/stop`、`setp`、`sets`、`net`、`linksp`、`linkps`、`unlinkp`、`show`、`save`、`source` | `SIM-CORE` |
| HAL 线程 | base/servo/thread 周期、顺序、浮点标志、超时和 overrun 事件 | `SIM-ADAPTER` |
| `.comp` ABI | 全部组件模板的参数、pin、function、personality 和 lifecycle | `SIM-CORE` |
| HAL UI | `halui` 全 pin、模式、jog、home、abort、feed/spindle override 和消息 | `SIM-CORE` |
| HAL scope | 采样、触发、通道、缩放、保存和回放 | `WEB-EQUIV` |
| HAL show/meter | pin 图、实时值、类型和连接关系 | `WEB-EQUIV` |
### 7.2 组件 manifest
`linuxcnc/src/hal/components/**` 下的每个 `.comp`、C 组件和测试组件都必须在 manifest 中出现。按类别验收:
- 数学/转换:abs、scale、sum、mult、div、min/max、near、hypot、lincurve、lut、modmath、bit/float/s32/s64/u32/u64 转换。
- 逻辑/选择:and/or/not、mux、demux、select、logic、flipflop、toggle、tristate、oneshot、edge、multiswitch、multiclick。
- 时序/滤波:time、timedelay、timedelta、ton、tof、updown、counter、sample-hold、lowpass、ilowpass、biquad、filter-kalman、ddt、integ、deadzone。
- 运动/控制:PID、limit、limit-axis、limit1/2/3、blend、simple_tp、tpcomp、feedcomp、moveoff、gantry、corexy、millturn、orient、spindle、spindle-monitor、stepgen、encoder、encoder-ratio。
- 信号/诊断:message、watchdog、safety-latch、estop-latch、histobins、latencybins、sampler、streamer、lcd、matrix-kb。
- 设备/仿真:sim-axis-hardware、sim-encoder、sim-home-switch、sim-matrix-kb、sim-parport、sim-spindle、sphereprobe、probe、raster、laserpower、plasmac、thc/thcud、ohmic、charge-pump。
- 测试和用户模板:constant、test、thread、userkins、usercomp、所有 `*.comp` personality 和示例工程。
### 7.3 通用虚拟机床部件
Web 仿真不移植具体硬件驱动,而由稳定的通用模型为仿真配置提供输入输出:
| 通用模型 | 仿真能力 |
|---|---|
| 虚拟数字/模拟 I/O | pin 值、同步/立即变化、等待、延迟、噪声和故障注入 |
| 虚拟寄存器组 | 为 ClassicLadder/仿真 PLC 提供本地寄存器,不实现真实 Modbus transport |
| 虚拟 MPG/手轮/键盘 | Pointer/键盘/触控事件映射为脉冲和 HAL pin |
| 伺服/编码器 | 位置环、量化、噪声、丢脉冲、跟随误差模型 |
| 电机/主轴/冷却/阀 | 可配置惯性、加减速、到速、温度/压力/状态数字孪生 |
真实并口、GPIO、PCI、Mesa/HostMot2/FPGA、串口、VFD、Modbus transport、现场总线和协议工具统一为 `REAL-EXCLUDED`。
## 8. ClassicLadder、Modbus 和 PLC
| 功能 | 覆盖内容 | 标记 |
|---|---|---|
| 工程文件 | `.clp`、sections、symbols、variables、project load/save | `SIM-ADAPTER` |
| Ladder 对象 | contacts、coils、set/reset、timers、IEC timers、monostable、counters、compare、assignment、jump/call | `SIM-CORE` |
| 顺序控制 | GRAFCET steps/transitions/actions、状态和扫描顺序 | `SIM-CORE` |
| 扫描周期 | 虚拟 PLC thread、周期、overrun 和暂停恢复 | `SIM-ADAPTER` |
| Modbus 逻辑 | 使用虚拟寄存器、延迟和错误状态验证 Ladder 逻辑;不实现真实 serial/TCP transport | `SIM-DEVICE` |
| ClassicLadder UI | Web sections、ladder editor、variable/symbol/config/debug windows | `WEB-EQUIV` |
| PLC 与 HAL | pin 绑定、消息、工具换刀、E-stop、冷却和顺序动作 | `SIM-CORE` |
## 9. 工具、IO、主轴、换刀和探针
| 功能 | 覆盖内容 | 标记 |
|---|---|---|
| 工具表 | pocket/tool、X/Y/Z/A/B/C/U/V/W、diameter、front/rear angle、orientation、wear、offset | `SIM-CORE` |
| 工具数据库 | `db_program`、JSON/文本数据库、查询、更新、备份和迁移 | `SIM-ADAPTER` |
| 换刀 | manual、random、non-random、carousel、prepare/change、M6 remap、tool sensor、失败恢复 | `SIM-DEVICE` |
| IO control v1/v2 | tool prepare/change、coolant、lube、spindle brake、mist/flood、aux outputs | `SIM-DEVICE` |
| 主轴 | 多主轴、方向、速度、加减速、CSS、orient、gear、encoder、到速和故障 | `SIM-DEVICE` |
| 进给 | G93/G94/G95、feed hold、override、adaptive、feed stop、feed inhibit | `SIM-CORE` |
| 探针 | G38.x、probe input、位置锁存、宏、失败/超时和对刀 | `SIM-DEVICE` |
| 位置日志 | motion logger、采样、导出、回放和差异 | `WEB-EQUIV` |
## 10. GUI、VCP、可视化和配置工具
所有桌面界面不要求像素级复制,但必须覆盖其仿真工作流、状态、控制项、配置项和脚本接口。
组件信息架构、命令 pending/ack/result、通信信封、快照字段、事件/高频流、背压、错误/取消、离线恢复、多标签页租约、详细任务和 FE-M0..M5 退出条件见[前端与通信详细设计](linuxcnc-web-wasm-frontend-communication-design.md)。本节条目必须绑定该文档中的 UI 工作流和协议消息,不能只以页面存在作为验收。
| LinuxCNC 界面/工具 | Web 等价实现 |
|---|---|
| AXIS/Gremlin | 主控制台、程序、预览、3D 视图、状态、MDI、jog、override、报警、HAL 面板 |
| Gmoccapy/Gscreen | 工业面板、主题、消息、宏按钮、偏好、键盘和触控布局 |
| Touchy/QtTouchy | 触控操作、轴/关节 jog、home、MDI、程序控制和软键 |
| QtDragon/QtVCP | screen/widget schema、动态属性、signals/slots、tabs、custom widget、Vismach |
| QtPlasmaC | 等离子流程、材料表、切割参数、探高、arc-ok、暂停/恢复和日志 |
| PyVCP/GladeVCP | XML/descriptor 转 Web Component,全部 widget 属性、pin 和回调 |
| PanelUI/MDRO | 面板、数字输出、override、模式和用户按键 |
| NGCGUI/PyNGCGUI | 子程序参数表单、预览、生成/加载/运行和参数持久化 |
| HALShow/HALScope/HALMeter | pin 树、连接图、波形、触发、缩放、保存和回放 |
| Vismach | WebGL/WebGPU 机床模型、层级、关节、刀具和姿态 |
| 仿真配置编辑器 | 生成兼容的仿真 INI/HAL/工程 manifest;Stepconf/Pncconf 的驱动、板卡、引脚和时序配置排除 |
| Tooledit/Tool Database | 工具表、数据库查询、编辑、导入导出和换刀状态 |
| Image-to-G-code/NGC tools | 浏览器内纯计算插件;文件通过 OPFS/用户导入,不调用宿主程序 |
| 国际化/主题/快捷键 | 语言资源、主题变量、可配置快捷键和触摸交互 |
## 11. API、远程接口和脚本接口
| 接口 | 仿真实现 | 标记 |
|---|---|---|
| NML command/status/error | Worker 内 message bus,保留消息类型、顺序、状态和错误语义 | `SIM-ADAPTER` |
| `linuxcnc.command/stat/error` | TypeScript API + 可选 Pyodide Python binding | `PY-WASM` |
| `hal`/`hal_glib`/`pyhal` | 虚拟 pin/signal/param、监听、周期回调和类型转换 | `PY-WASM` |
| `gstat`/position logger | 状态快照、流式订阅、OPFS 日志和回放 | `WEB-EQUIV` |
| `linuxcncrsh`/远程命令 | 同源 Worker loopback;可选 WebSocket 仅连接当前仿真会话 | `SIM-ADAPTER` |
| `halcmd`/`haltcl`/`halrun` | Web 控制台命令解析;脚本只作用于当前虚拟工程 | `WEB-EQUIV` |
| MQTT/消息发布 | 本地事件总线和可选浏览器 WebSocket mock,不访问真实设备 | `SIM-DEVICE` |
| UI 插件/自定义面板 | manifest、权限、版本、生命周期和 OPFS 资源 | `WEB-EQUIV` |
### 11.1 诊断、开发和运维工具
| LinuxCNC 工具/能力 | 仿真实现 | 标记 |
|---|---|---|
| `linuxcnc_info` | 输出浏览器、WASM、Worker、OPFS、配置、组件和仿真能力报告 | `WEB-EQUIV` |
| `inivar`/INI 检查 | Web 配置查看、类型转换、include 展开和错误定位 | `WEB-EQUIV` |
| `lintini` | Worker 内静态检查全部 INI/HAL/资源引用 | `WEB-EQUIV` |
| `halcompile`/`modcompile` | 构建流水线中编译 `.comp`;Web 编辑器提供语法/接口检查 | `SIM-ADAPTER` |
| `runtests`/测试选择器 | 浏览器内按 manifest 运行 golden、回归和故障测试 | `WEB-EQUIV` |
| 仿真性能诊断 | 提供批处理耗时、Worker 延迟和 UI 帧率;`latency-test` 的内核实时延迟测试排除 | `WEB-EQUIV` |
| `debuglevel`/调试标志 | 虚拟运行时动态日志级别和 OPFS 日志 | `SIM-ADAPTER` |
| `tool_watch`/tool data monitor | 工具、换刀、数据库和快照监视器 | `WEB-EQUIV` |
| `motion-logger`/`halsampler`/`halstreamer` | 采样、导出、回放和差异可视化 | `WEB-EQUIV` |
| `axis-remote`/`schedrmt`/`linuxcnclcd`/`emclcd` | 同源命令/状态通道和虚拟显示终端 | `SIM-ADAPTER` |
| `linuxcncsvr`/远程 NML 服务 | 仅提供同源仿真会话服务;不监听宿主真实端口 | `SIM-ADAPTER` |
| `decode_dmesg`/系统诊断 | 虚拟设备和 WASM 运行时日志;无宿主内核日志 | `REAL-EXCLUDED` |
## 12. OPFS、快照和可重复仿真
| 功能 | 覆盖要求 | 标记 |
|---|---|---|
| 工程目录 | INI/HAL/TBL/VAR/NGC/PY/XML/TCL/CLP/模型/材料/日志全部可保存 | `SIM-ADAPTER` |
| 文件语义 | open/read/write/stat/readdir/rename/unlink/fsync、相对路径、大小写和错误 | `SIM-ADAPTER` |
| 事务 | prepare/commit、临时文件、SHA-256、原子替换、版本索引 | `SIM-ADAPTER` |
| 恢复 | 刷新、崩溃、半提交、版本迁移、损坏文件和回滚 | `SIM-ADAPTER` |
| 快照 | 任务、解释器、TP、运动、HAL、IO、Python、工具、参数和 UI 状态 | `SIM-ADAPTER` |
| 回放 | 从 tick/事件恢复后与连续运行结果一致 | `SIM-CORE` |
| 任务接续账本 | 请求超时、回答/工具结果丢失、重复响应、Worker 重启;按 `operation_id`、prepare/commit 和最后已验证步骤恢复 | `SIM-ADAPTER` |
| 配额 | estimate、persist、配额不足、清理 cache、导出备份 | `WEB-EQUIV` |
| 离线 | Service Worker 缓存 WASM、Pyodide、样例和 UI;无网加载已有工程 | `WEB-EQUIV` |
## 13. 测试覆盖模型
### 13.1 Golden 对照
原生 LinuxCNC 和 WASM 对每个 manifest 项输出:
- 解释器状态、当前行、模态、参数和返回值
- canonical motion、每 tick 位置/速度/加速度/跟随误差
- 轴/关节/姿态、运动学错误和限位状态
- HAL pin/signal/param、线程顺序和组件输出
- 主轴、工具、探针、换刀、冷却、等离子/激光/泡沫 IO
- Python/remap 输出、异常、日志和事件
- UI 命令、报警、状态和快照恢复结果
### 13.2 样本集合
1. `configs/sim/**` 下全部 INI 和关联资源,而不是只抽取 10 个样例。
2. `tests/**` 下全部可运行仿真测试;只依赖真实硬件、内核实时或驱动的测试登记为排除项。
3. `unit_tests/interp`、`unit_tests/tp`、posemath 和 kinematics 单元测试。
4. 每个 G/M/O 代码至少一个正常、边界、错误和暂停/恢复样例。
5. 每个 HAL 组件至少一个 pin 类型、周期、复位和异常样例。
6. 每种机床类型至少一个完整工程、模型、程序、工具表、IO 和故障回放。
7. 每个 Web UI 工作流覆盖首次启动、刷新恢复、离线、导入导出和键盘/触摸路径。
8. 每个可恢复任务至少覆盖一次请求失败、确认丢失、幂等重试和无法对账的阻断路径。
### 13.3 覆盖率门槛
- 覆盖率门槛与发布门禁 G4/G5 同步;来源、依赖、维度和交互闭包以及具体任务上下文和证据包格式见[执行与交付策略](linuxcnc-web-wasm-execution-strategy.md)第 2.1、3、7 节。
- `SIM-CORE`、`SIM-ADAPTER`、`SIM-DEVICE`、`WEB-EQUIV`、`PY-WASM`:100% manifest 条目有实现和自动测试。
- 每个条目的正常、边界、错误、暂停/恢复、持久化/离线及适用交互维度均有通过记录;缺失任一维度不得为 `accepted`。
- 关键状态和错误的原生/WASM 对照通过率:100%。
- 浮点误差按算法定义容差,默认机床单位目标 `1e-6`。
- OPFS 已提交数据在刷新、Worker 重启和模拟崩溃后可恢复。
- 任何 manifest 缺失、未测试或静默降级都阻止发布。
- 任何孤儿来源、未闭合依赖、无 oracle、未覆盖交互或未解释的差异都阻止发布。
- 前端通信条目必须同时有消息 schema、LinuxCNC 源程序映射、UI 工作流、错误/取消、背压和离线恢复测试;详细字段和 FE/COM 任务见[前端与通信详细设计](linuxcnc-web-wasm-frontend-communication-design.md)。
- `REAL-EXCLUDED` 不计入仿真覆盖率,但配置检查必须返回明确 `real_hardware_excluded`。
## 14. 实施顺序
本节的阶段 A-E 只描述功能交付顺序;对应的 M0-M5 里程碑、工作流边界、固定上下文和返工规则见[执行与交付策略](linuxcnc-web-wasm-execution-strategy.md)第 4、6、8 节。
### 阶段 A:全量清单和运行时骨架
- 生成 manifest,锁定所有文档、源码、配置和测试输入。
- 建立单 Worker、固定 tick、OPFS journal、快照和版本化 ABI。
- 建立 Python/Pyodide Worker 和虚拟 `linuxcnc/hal/gstat` 模块。
### 阶段 B:核心解释和运动全覆盖
- 移植全部 G/M/O、remap、参数、坐标系、补偿、TP、motion、全部 kinematics。
- 完成 mill/lathe/gantry/robot/delta/pentapod/foam/plasma/laser/probe 数字孪生。
### 阶段 C:HAL、PLC、IO 和虚拟机床部件
- 生成并编译全部 HAL 组件 manifest。
- 完成 ClassicLadder、虚拟寄存器、主轴/换刀/探针/编码器/stepgen/限位/故障模型。
- 完成 halcmd/haltcl/halui/HALScope/HALShow。
### 阶段 D:全部 Web UI 和配置工具
- 完成 AXIS、Gmoccapy、Touchy、Gscreen、QtVCP、QtDragon、QtPlasmaC、VCP、Vismach、NGCGUI 等仿真操作能力的 Web 等价工作流和仿真配置编辑器。
- 完成工程导入、导出、离线、国际化、主题和插件权限。
### 阶段 E:全量回归和发布
- 全部 configs/tests/golden/浏览器矩阵跑通。
- 生成版本化差异报告、兼容报告、许可证清单和工程迁移工具。
## 15. 明确排除项
以下不是仿真机床功能,因此不实现,也不能通过浏览器 API 绕过:
- 真实电机、驱动器、主轴、刀具、冷却、气路、液压和工件。
- 真实 Mesa/FPGA、并口、GPIO、PCI、串口、USB、Modbus 设备和现场总线。
- PREEMPT_RT、RTAI、Xenomai、内核模块、CPU 绑定、硬实时和物理步进脉冲。
- 真实急停、安全继电器、门锁、限位开关和人员/设备安全认证。
- 任意宿主路径、shell、fork/exec、子进程、设备文件和网络原始套接字。
排除项的仿真等价行为必须由第 6~9 节的数字孪生提供;例如“主轴不到速”要模拟成可配置状态和故障,而不是把主轴驱动标为“不支持”。