Update wasm port validation state
This commit is contained in:
498
完善wasm/03完全对标LinuxCNC的可执行验收标准.txt
Normal file
498
完善wasm/03完全对标LinuxCNC的可执行验收标准.txt
Normal file
@@ -0,0 +1,498 @@
|
||||
基于Web/WASM/OPFS的LinuxCNC兼容数控仿真平台
|
||||
完全对标LinuxCNC的可执行验收标准
|
||||
版本: 2.1
|
||||
编写日期: 2026-07-09
|
||||
验收对象: wasm-port 目录下的 LinuxCNC WASM/OPFS 移植与浏览器仿真系统
|
||||
对标基准: /home/mes123456/cnc_wams/linuxcnc
|
||||
参考文件: /home/mes123456/cnc_wams/完善wasm/02完全对标linuxcnc的验收标准.txt
|
||||
上游基线: LinuxCNC master, commit 60597ee0718873d2449058c824262a275e5e4bad
|
||||
|
||||
一、验收定位
|
||||
|
||||
1.1 验收目标
|
||||
本文件用于判定 Web/WASM/OPFS 版本是否真正达到“完全对标 LinuxCNC”,验收重点不是界面相似,也不是独立实现一套近似 G 代码解释器,而是证明核心数控语义、错误行为、机床配置行为和可复现实验结果来自 LinuxCNC 源码、测试资产和运行规则。
|
||||
|
||||
本文件同时作为 `/home/mes123456/cnc_wams/wasm-port` 的持续完善依据。后续新增功能、修复缺陷、迁移 LinuxCNC 测试、扩展浏览器 UI 或接入新的运行边界时,必须先在本文件定义的 LinuxCNC 功能树、证据层级、晋级规则和最终判定规则中找到归属;找不到归属的功能不得直接宣称为 LinuxCNC 对标功能。
|
||||
|
||||
系统只有同时满足以下条件,才能判定为“完全对标 LinuxCNC”:
|
||||
|
||||
1. CNC 核心语义由 LinuxCNC 源码提供,项目自有代码不得重新实现 G 代码、刀补、参数、remap、刀具、轨迹规划、运动学或机床控制语义。
|
||||
2. 上游 LinuxCNC 测试资产、nc_files 示例、configs/sim 机床配置能够被系统按层级接入、执行、分类和复验。
|
||||
3. Native、WASM Node、真实浏览器三层结果在可比较范围内一致。
|
||||
4. 浏览器端 OPFS、UI、Worker、C ABI 和适配层只承担文件、调度、展示、持久化和边界桥接职责,不改变 LinuxCNC 行为。
|
||||
5. 不能执行的上游测试必须记录明确阻塞原因、LinuxCNC 行为归属源码和后续解除条件,不能以“忽略”“暂不支持”替代验收说明。
|
||||
|
||||
1.2 验收结论口径
|
||||
验收结论分为四类:
|
||||
|
||||
通过: 已有源码复用证据、上游测试或等价夹具、Native/WASM/浏览器证据,结果与 LinuxCNC 基准一致。
|
||||
条件通过: LinuxCNC 行为已由源码或测试证明,但 Web 平台存在合理边界,例如动态模块加载、实时内核、外部硬件、Python 进程或 full-process HAL 依赖,需要以预编译、虚拟化或明确边界方式验收。
|
||||
不通过: 存在项目自有 CNC 语义、结果与 LinuxCNC 不一致、错误被静默吞掉、测试缺少证据、或 UI 显示与底层状态不一致。
|
||||
阻塞: 当前无法执行,但已明确 LinuxCNC 依赖、源码归属、缺失运行边界、恢复路径和不允许伪造通过的规则。
|
||||
|
||||
1.3 一票否决项
|
||||
出现任一情况,整体验收不得判定为“完全通过”:
|
||||
|
||||
1. JS、TypeScript、浏览器 UI 或项目自有 C/C++ 代码中出现自研 G 代码解释、刀补、固定循环、remap、刀具表、轨迹规划、运动学反解、HAL 数控逻辑,并且未证明该代码只是 LinuxCNC 源码的薄封装。
|
||||
2. 修改上游 vendored 文件内容以适配测试,而未同步说明该修改来自 LinuxCNC 上游变更。
|
||||
3. 把 LinuxCNC full-process 测试降级为普通解释器测试后仍标记为通过。
|
||||
4. 浏览器层测试只验证页面元素存在,不验证底层 LinuxCNC C ABI 输出、状态机或文件持久化结果。
|
||||
5. 对预期失败不记录原因,或把未知失败计入通过率。
|
||||
6. UI 的坐标、模态、刀具、主轴、程序状态与底层状态快照不一致。
|
||||
|
||||
二、验收证据体系
|
||||
|
||||
2.1 基准锁定
|
||||
验收前必须锁定并记录以下信息:
|
||||
|
||||
项目 验收标准
|
||||
LinuxCNC 源码路径 必须指向 /home/mes123456/cnc_wams/linuxcnc
|
||||
上游提交 必须与 wasm-port/tools/upstream-baseline.txt 和 docs/scope-and-baseline.md 一致
|
||||
源码清单 wasm-port/tools/source-manifest.txt 中的 vendored 文件必须可追溯到上游
|
||||
同步校验 wasm-port/tools/verify_vendor_sync.sh 必须通过
|
||||
自研语义检查 wasm-port/tools/verify_no_standalone_cnc_semantics.sh 必须通过
|
||||
证据文档 wasm-port/docs/source-reuse-map.md、compatibility-validation.md、linuxcnc-test-porting-tracker.md 必须同步更新
|
||||
|
||||
2.2 验收证据优先级
|
||||
证据按以下顺序采用,高优先级证据优先于低优先级证据:
|
||||
|
||||
等级 证据类型 验收意义
|
||||
P0 LinuxCNC 上游源码、上游测试脚本、上游 nc_files/configs/sim 定义真实行为
|
||||
P1 vendored 文件字节级同步、source manifest、source reuse map 证明行为来源
|
||||
P2 Native 探针或 native rs274 输出对比 证明脱离浏览器后仍与 LinuxCNC 一致
|
||||
P3 WASM Node 测试 证明编译到 WASM 后语义未漂移
|
||||
P4 真实浏览器测试 证明 OPFS、Worker、UI、C ABI 集成后仍一致
|
||||
P5 人工 UI 截图或录屏 只能作为补充,不能单独作为核心语义证据
|
||||
|
||||
2.3 必跑验收命令
|
||||
完整验收至少执行以下命令,并保存输出日志:
|
||||
|
||||
wasm-port/tools/verify_upstream_baseline.sh
|
||||
wasm-port/tools/verify_vendor_sync.sh
|
||||
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
|
||||
wasm-port/tests/native/verify_native_probes.sh
|
||||
wasm-port/tests/native/verify_nc_files.sh
|
||||
wasm-port/tests/native/verify_sim_configs.sh
|
||||
wasm-port/tests/wasm/node/verify_ini_wasm.sh
|
||||
wasm-port/tests/wasm/node/verify_interp_wasm.sh
|
||||
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
|
||||
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
|
||||
wasm-port/tests/wasm/node/verify_nc_files_wasm.sh
|
||||
wasm-port/tests/wasm/node/verify_tp_wasm.sh
|
||||
wasm-port/tests/opfs/node/verify_file_service.sh
|
||||
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||||
wasm-port/tests/browser/verify_ini_panel_browser.sh
|
||||
wasm-port/tests/browser/verify_interp_browser.sh
|
||||
wasm-port/tests/host/verify_host_smokes.sh
|
||||
|
||||
2.4 结果比较规则
|
||||
1. canonical event 序列必须按事件类型、顺序、关键参数比较。
|
||||
2. 错误文本允许归一化路径、行尾、空白和平台差异,但不得改变错误类别、触发行和关键提示。
|
||||
3. 坐标、刀具补偿、轨迹规划输出采用双精度比较;解释器坐标容差不大于 1e-9,运动/轨迹输出容差不大于 1e-6。
|
||||
4. 浏览器计时不要求达到 Linux 实时内核确定性,但 servo/base 周期调度必须记录期望周期、实际周期、最大抖动和降级策略。
|
||||
5. 所有 expected_fail 必须有固定原因和源码归属;unexpected_fail 必须为 0 才能进入通过结论。
|
||||
|
||||
三、分层验收模型
|
||||
|
||||
3.1 Layer 1: LinuxCNC nc_files 基础示例
|
||||
验收目标: 证明 LinuxCNC 自带示例程序在项目入口中可执行、可分类、可复现。
|
||||
|
||||
验收项 标准要求 证据
|
||||
基础示例执行 linuxcnc/nc_files 基础和 example 程序通过 native rs274 或等价 LinuxCNC 入口执行 verify_nc_files.sh 输出
|
||||
上下文缺失分类 需机床上下文、探针、刀具或入口点的程序必须标为 expected_fail nc-files/summary.tsv
|
||||
禁止修改示例 不得修改上游 G 代码使其通过 vendor sync
|
||||
WASM 代表集 代表性 nc_files 可在 WASM Node 和浏览器执行 verify_nc_files_wasm.sh、verify_interp_browser.sh
|
||||
|
||||
通过标准: total/pass/expected_fail/unexpected_fail 明确,unexpected_fail 为 0。
|
||||
|
||||
3.2 Layer 2: LinuxCNC configs/sim 机床配置
|
||||
验收目标: 证明真实 LinuxCNC 仿真机床配置、INI、tool.tbl、remap 子程序、USER_M_PATH、SUBROUTINE_PATH 能被正确识别和分层处理。
|
||||
|
||||
验收项 标准要求 证据
|
||||
INI 驱动执行 按真实 INI 定位 open file、tool table、parameter file、subroutine path、user M path verify_sim_configs.sh
|
||||
机床类型分类 普通解释器、remap、外部进程、HAL/UI 依赖等分类准确 sim-configs-coverage-matrix.md
|
||||
预期失败固定 standalone rs274 无法覆盖的 task/user-M/HAL/UI 边界必须记录 expected_fail summary.tsv、class-summary.tsv
|
||||
浏览器代表集 可独立执行的代表机床配置进入 WASM/浏览器验证 verify_sim_configs_wasm.sh
|
||||
|
||||
通过标准: native strict harness unexpected_fail 为 0;浏览器代表集不得绕过 INI 上下文。
|
||||
|
||||
3.3 Layer 3: LinuxCNC 源码级 runtime probes
|
||||
验收目标: 证明解释器、remap、tooldata、参数、运动学、轨迹规划等行为通过 vendored LinuxCNC 源码执行。
|
||||
|
||||
验收项 标准要求 证据
|
||||
源码入口 探针直接调用 LinuxCNC 源码入口,不调用项目自研 CNC 语义 source-probes.tsv
|
||||
边界 shim 项目代码只提供文件、状态、HAL/user-M 虚拟边界 native-runtime-probe-summary.tsv
|
||||
负例行为 错误、拒绝、超时、不可达路径均与 LinuxCNC 一致 verify_native_probes.sh
|
||||
|
||||
通过标准: native probes complete,且 source reuse map 已记录行为归属。
|
||||
|
||||
3.4 Layer 4: WASM Node、OPFS、真实浏览器
|
||||
验收目标: 证明 LinuxCNC 行为穿过 Emscripten、C ABI、Node、OPFS、浏览器 UI 后仍保持一致。
|
||||
|
||||
验收项 标准要求 证据
|
||||
WASM C ABI 所有核心调用返回结构化状态和错误,不丢失 LinuxCNC 结果 verify_interp_wasm.sh
|
||||
OPFS 文件 INI、NGC、tool.tbl、var、session 文件可持久化、恢复、覆盖、删除 verify_file_service.sh
|
||||
浏览器真实执行 真实浏览器运行解释器和面板流程,不只做 DOM smoke verify_interp_browser.sh、verify_ini_panel_browser.sh
|
||||
UI 状态同步 坐标、模态、刀具、主轴、程序状态来自底层快照 verify_ui_node_smokes.sh、浏览器日志
|
||||
|
||||
通过标准: targeted smoke 与 aggregate host smoke 均通过,且失败时可定位到 Native/WASM/Browser 的具体层。
|
||||
|
||||
四、核心模块验收标准
|
||||
|
||||
4.1 G 代码解释器
|
||||
源码基准: linuxcnc/src/emc/rs274ngc/
|
||||
|
||||
分类 必须覆盖的 LinuxCNC 行为 最低验收证据
|
||||
基础运动 G0、G1、多轴同步、G53、进给率、路径控制 G61/G64 tests/interp、nc_files、canonical events
|
||||
圆弧/NURBS G2/G3、IJK/R、G17/G18/G19、G5/G5.1/G5.2/G5.3/G6 tests/interp/good、nc_files
|
||||
单位与模式 G20/G21、G90/G91、G90.1/G91.1、G93/G94/G95、G98/G99 fixture matrix
|
||||
坐标系统 G54-G59.3、G10 L2/L20、G52/G92、G92.1/G92.2/G92.3、旋转 tests/interp/g10、g52、rotation
|
||||
固定循环 G80-G89,含钻孔、啄钻、攻丝、镗孔、平面限制和非法轴拒绝 tests/interp/g81、g84、bad
|
||||
刀具补偿 G40/G41/G42、入口/出口、凹角、凸角、平面切换拒绝、车削补偿 tests/ccomp、tests/interp/inside-corners
|
||||
刀长补偿 G43/G43.1/G43.2/G49、G10 工具偏置更新、缺失工具报错 tests/interp/g10、tool fixtures
|
||||
车削循环 G70/G71/G72/G76、恒线速 G96/G97、螺纹同步、无死循环 tests/interp/g71-*、g72-*、g76
|
||||
主轴语义 M3/M4/M5、S、M19、方向、等待、orient offset tests/interp/m19、g76
|
||||
探针与输入 G38.x、M66、输入等待、超时、#5399 tests/interp、remap-io NGC-only
|
||||
O-word 与 M98/M99 子程序、递归、局部参数、返回值、L 次数、外部子程序路径 tests/interp/m98m99、oword、flowsnake
|
||||
参数系统 编号参数、命名参数、INI 参数、只读参数、持久化参数、格式化输出 tests/interp/iniparam、namedparam、magic_comments
|
||||
remap NGC remap、参数传递、执行顺序、嵌套、M30 交互、失败恢复 tests/remap 已纳入项
|
||||
错误行为 零进给、圆弧半径错误、缺工具、非法嵌套、非法参数写入、探针无轴 tests/interp/bad 及负例夹具
|
||||
|
||||
通过标准:
|
||||
1. 所有已纳入解释器测试 Native/WASM/浏览器结果一致。
|
||||
2. 负例必须触发 LinuxCNC 同类错误,不能被吞掉或转换成普通成功。
|
||||
3. 对未纳入的 tests/interp、tests/remap、tests/ccomp 项必须在 porting tracker 中有状态。
|
||||
|
||||
4.2 Task、NML、程序状态和运行控制
|
||||
源码基准: linuxcnc/src/emc/task/、linuxcnc/src/emc/nml_intf/
|
||||
|
||||
验收项 标准要求 最低验收证据
|
||||
程序打开/关闭 打开 NGC 后状态、文件名、初始模态正确 task probes、browser run summary
|
||||
解释执行循环 按 LinuxCNC task 周期读取、执行、更新状态,不由 UI 自行推进 emctask 对标测试
|
||||
暂停/继续 暂停为受控停止,继续从正确断点恢复 taskintf 对标
|
||||
单步 单行执行后进入暂停或等待状态 single-step 类测试
|
||||
abort/stop 中止后队列、状态、错误、运动指令清理符合 LinuxCNC abort 测试或阻塞记录
|
||||
MDI 队列 MDI 命令排队、等待、错误恢复、队列长度符合 LinuxCNC mdi-queue 测试或阻塞记录
|
||||
倍率 feed override、rapid override、spindle override 状态进入底层,不只影响 UI task 状态快照
|
||||
M1/M2/M30 可选停止、程序结束、回卷和模态复位符合 LinuxCNC 解释器和 task 测试
|
||||
|
||||
通过标准: Task 状态必须可从结构化快照验证;full-process 依赖项未实现时必须标记阻塞,不能用普通解释器测试替代。
|
||||
|
||||
4.3 运动控制、轨迹规划和插补
|
||||
源码基准: linuxcnc/src/emc/tp/、linuxcnc/src/emc/motion/
|
||||
|
||||
验收项 标准要求 最低验收证据
|
||||
轨迹规划 连续线段、圆弧、加减速、速度约束、path tolerance 调用 LinuxCNC TP verify_tp_wasm.sh、native TP probes
|
||||
多轴同步 直线/圆弧/旋转轴同步比例正确 轨迹输出对比
|
||||
前瞻 短线段连续路径速度平滑,不出现非法停顿 TP fixture
|
||||
软限位 超程按 LinuxCNC 规则报警,不被 UI 截断 hard-limits 或阻塞记录
|
||||
跟随误差 FERROR/MIN_FERROR 阈值与报警一致 motion 测试或阻塞记录
|
||||
点动 连续点动、增量点动、手轮输入、joint/axis 模式区分 motion/jogwheel 测试或阻塞记录
|
||||
回零 HOME_SEQUENCE、joint 回零、all-home 状态符合 LinuxCNC homing 测试或阻塞记录
|
||||
外部偏置 external offsets 与 motion 状态传播符合 sim configs external_offsets 代表配置
|
||||
|
||||
通过标准: TP/运动输出必须有数值比较;浏览器动画不能替代运动控制验收。
|
||||
|
||||
4.4 运动学与五轴联动
|
||||
源码基准: linuxcnc/src/emc/kinematics/
|
||||
|
||||
验收项 标准要求 最低验收证据
|
||||
trivkins 笛卡尔轴/joint 映射、旋转轴 wrapped rotary 正确 kinematics probes
|
||||
identity kins identity 映射与 LinuxCNC 一致 source probe
|
||||
5axiskins XYZBCW bridge-mill、TRT xyzac/xyzbc 正反解按 LinuxCNC 源码执行 native runtime probes
|
||||
switchkins M428/M429/M430、kinstype guard、坐标/限位切换符合 LinuxCNC sim config 代表项
|
||||
RTCP/G43.4 刀尖点保持、旋转轴联动、刀长偏置传播可数值验证 五轴夹具
|
||||
自定义运动学 预编译模块可用;运行时动态加载缺失时必须标为条件通过 source reuse map
|
||||
|
||||
通过标准: 每类运动学必须记录源码入口、输入姿态、输出坐标、容差和失败原因。
|
||||
|
||||
4.5 HAL、RTAPI 和虚拟硬件边界
|
||||
源码基准: linuxcnc/src/hal/、linuxcnc/src/rtapi/
|
||||
|
||||
验收项 标准要求 最低验收证据
|
||||
HAL 类型 bit、float、s32、u32 pin/signal/param 行为一致 HAL native probes
|
||||
net/link/unlink 连接、断开、多驱动拒绝、类型错误符合 LinuxCNC hal-link-unlink、hal-show
|
||||
组件 and2、or2、not、mux、scale、edge、limit3、timedelay 等常用组件可验证 linuxcnc/tests 对应组件
|
||||
loadrt 预编译组件加载可用;运行时动态编译/内核模块加载为条件通过 module-loading 或阻塞记录
|
||||
线程 servo-thread/base-thread 执行顺序、周期参数、函数调用顺序可观测 threads/overrun 或虚拟调度日志
|
||||
HAL Scope/Meter 波形、采样和数值显示来自 HAL 状态,不由 UI 伪造 UI/browser HAL 证据
|
||||
外部硬件 Mesa、Modbus、VFD、实体 I/O 不要求真实硬件通过,但必须有虚拟边界说明 blocked table
|
||||
|
||||
通过标准: HAL 逻辑组件可在无真实硬件环境中复验;实时内核和硬件驱动类测试只能条件通过或阻塞。
|
||||
|
||||
4.6 刀具、刀库、主轴和 I/O
|
||||
源码基准: linuxcnc/src/emc/tooldata/、linuxcnc/src/emc/iotask/、相关 task/io 源码
|
||||
|
||||
验收项 标准要求 最低验收证据
|
||||
tool.tbl 读取、写入、随机/非随机刀库、口袋号、刀号、磨损字段一致 tooldata probes
|
||||
T/M6/M61 换刀、设当前刀、缺失刀具、重载刀表符合 LinuxCNC toolchanger 或阻塞记录
|
||||
T0 无刀、启动刀、随机刀库状态符合 LinuxCNC t0/tool-info 或阻塞记录
|
||||
刀具数据库 DB_PROGRAM 协议、g/l/u/p/FINI 行为按 LinuxCNC 归属记录 tool DB boundary evidence
|
||||
主轴控制 多主轴选择、速度、方向、orient、同步进给和刚性攻丝一致 interp spindle tests
|
||||
冷却/辅助 IO M7/M8/M9、M62-M68、输入等待与 HAL/IO 状态传播一致 remap-io、IO tests
|
||||
|
||||
通过标准: tooldata 行为不得由 JS 解析替代;OPFS 只能作为存储介质。
|
||||
|
||||
4.7 INI、文件系统和 OPFS
|
||||
源码基准: linuxcnc/src/emc/ini/、OPFS runtime adapters
|
||||
|
||||
验收项 标准要求 最低验收证据
|
||||
INI 解析 注释、空白、续行、重复 key、缺值、大小写、路径解析符合 LinuxCNC tests/inifile
|
||||
配置目录 多机床目录、相对路径、OPEN_FILE、TOOL_TABLE、PARAMETER_FILE 正确 resolve/staging tests
|
||||
参数文件 var 文件恢复、保存、禁用 G92 持久化行为一致 interp g52/g92 tests
|
||||
OPFS 持久化 会话刷新后 NGC、INI、HAL、tool.tbl、var、快照仍可读取 OPFS browser tests
|
||||
错误处理 文件缺失、权限/路径错误、无效编码有清晰错误 file-service tests
|
||||
|
||||
通过标准: OPFS 中的文件内容必须可导出并与输入对比;路径规划不得依赖浏览器目录枚举的偶然结果。
|
||||
|
||||
4.8 浏览器 UI 与可视化
|
||||
验收目标: UI 必须是 LinuxCNC 状态的呈现和控制入口,而不是另一个状态真相。
|
||||
|
||||
验收项 标准要求 最低验收证据
|
||||
坐标显示 机床坐标、工件坐标、相对坐标、joint/axis 模式来源于底层状态 browser state snapshot
|
||||
模态显示 G/M 模态、单位、平面、坐标系、进给模式与解释器一致 interp browser smoke
|
||||
程序运行 打开、运行、暂停、单步、停止、错误定位可操作 UI workflow smoke
|
||||
3D 刀路 刀路来自 canonical/motion 事件,视图切换不改变底层结果 3D screenshot smoke
|
||||
HAL 监视 信号、pin、参数显示来自 HAL 快照 HAL UI tests
|
||||
文件管理 导入、保存、切换机床、恢复会话后状态一致 OPFS session workflow
|
||||
错误呈现 错误类别、行号、LinuxCNC 原因向用户可见 browser negative fixtures
|
||||
|
||||
通过标准: UI smoke 必须验证底层结果,不得只验证按钮存在。
|
||||
|
||||
4.9 多通道、并发和隔离
|
||||
验收项 标准要求 最低验收证据
|
||||
多实例 多个浏览器标签页或机床实例状态隔离 OPFS/session tests
|
||||
多通道 如宣称支持多通道,必须有独立解释器状态、倍率、坐标系和同步握手 多通道 fixture
|
||||
Worker 隔离 解释器/运动/OPFS Worker 崩溃不污染其他实例 worker error tests
|
||||
并发文件访问 同一配置并发读写有锁或明确冲突策略 file-service tests
|
||||
|
||||
通过标准: 没有证据时不得宣称 LinuxCNC 多通道完全通过。
|
||||
|
||||
五、上游测试纳入标准
|
||||
|
||||
5.1 每个 LinuxCNC 测试进入项目时必须完成
|
||||
1. 记录上游路径。
|
||||
2. 原样复制或通过脚本提取到 wasm-port/vendor/linuxcnc/。
|
||||
3. 加入 source manifest 或 vendor sync 规则。
|
||||
4. 记录行为归属 LinuxCNC 源码文件。
|
||||
5. 优先添加 Native 覆盖。
|
||||
6. 能进入 WASM 的添加 Node 覆盖。
|
||||
7. 涉及 OPFS/UI 的添加真实浏览器覆盖。
|
||||
8. 与上游输出或 LinuxCNC 行为做比较。
|
||||
9. 更新 source-reuse-map.md、compatibility-validation.md、linuxcnc-test-porting-tracker.md。
|
||||
10. 如不能执行,加入 blocked table,并说明阻塞依赖。
|
||||
|
||||
5.2 测试分类规则
|
||||
分类 处理方式
|
||||
纯解释器测试 优先纳入 Native/WASM/浏览器
|
||||
需要 INI/tool/var/subroutine 的测试 通过 LinuxCNC INI 上下文 staging 纳入
|
||||
需要 NGC remap 的测试 只有在 LinuxCNC remap 源码路径接入后才可标通过
|
||||
需要 Python remap 的测试 未接入 Python runtime 前标阻塞或条件通过
|
||||
需要 full-process task/HAL/motion 的测试 不得降级为解释器通过,必须保留 full-process 边界说明
|
||||
需要真实硬件/实时内核的测试 以虚拟边界、预编译组件或阻塞项验收
|
||||
GUI smoke 测试 只能证明 UI 启动,不能证明 CNC 语义
|
||||
|
||||
5.3 wasm-port 持续完善闭环
|
||||
每次为 `wasm-port` 增加或修复功能,必须按以下闭环推进,不能只完成代码实现:
|
||||
|
||||
步骤 输出物 通过条件
|
||||
1. 功能定位 记录对应 LinuxCNC 源码目录、测试目录、configs/sim 或 nc_files 资产 能说明该功能在 LinuxCNC 中由谁定义
|
||||
2. 边界判断 标记为纯源码复用、WASM 边界、OPFS 边界、浏览器 UI 边界、full-process 边界或硬件边界 不能把 full-process 或硬件行为伪装成纯解释器行为
|
||||
3. 源码接入 更新 vendor 提取、source manifest、source reuse map `verify_vendor_sync.sh` 通过
|
||||
4. Native 证明 新增或扩展 native probe、native rs274 对比或上游 test.sh 对比 Native 层先通过或明确 expected_fail
|
||||
5. WASM 证明 通过 C ABI、Node runner 或 SDK 执行相同行为 WASM 输出与 Native 一致
|
||||
6. 浏览器证明 涉及 OPFS/UI/Worker 的功能必须有真实浏览器测试 浏览器结果与 WASM/Native 一致
|
||||
7. 文档同步 更新 compatibility-validation、linuxcnc-test-porting-tracker、必要的工作台账 阻塞项、证据入口、运行命令可追踪
|
||||
8. 回归门禁 运行最小相关命令,重大功能运行 host aggregate smoke 不能引入新的 unexpected_fail
|
||||
|
||||
5.4 功能晋级状态
|
||||
`wasm-port` 的每个 LinuxCNC 对标功能必须使用以下状态,不得只写“已完成”:
|
||||
|
||||
状态 含义 允许宣称
|
||||
L0 已盘点 已确认 LinuxCNC 源码和测试资产归属 只能宣称已纳入计划
|
||||
L1 已同步 相关上游文件已 vendored 并可同步校验 只能宣称源码已接入
|
||||
L2 Native 通过 Native probe 或上游输出对比通过 可宣称核心语义在 Native 层对标
|
||||
L3 WASM 通过 WASM Node 结果与 Native 一致 可宣称 WASM 核心语义对标
|
||||
L4 Browser 通过 真实浏览器/OPFS/Worker 结果与 WASM 一致 可宣称浏览器运行边界对标
|
||||
L5 UI 发布 用户界面状态、错误、操作流与底层一致并进入汇总门禁 可作为用户可见功能发布
|
||||
Blocked 阻塞 缺 Python/full-process/HAL/硬件/实时内核/外部进程边界 只能宣称已识别阻塞,不能宣称功能通过
|
||||
|
||||
5.5 功能不得降级验收
|
||||
以下降级方式一律无效:
|
||||
1. 只验证 G 代码能解析,却宣称 task/motion/HAL 已通过。
|
||||
2. 只验证 canonical event,却宣称真实机床状态、回零、限位、跟随误差已通过。
|
||||
3. 只验证 Native,却宣称浏览器 OPFS 或 UI 已通过。
|
||||
4. 只验证浏览器按钮存在,却宣称 LinuxCNC 状态机已通过。
|
||||
5. 只手写一个简化 fixture,却替代 LinuxCNC 上游测试或 configs/sim 资产。
|
||||
|
||||
六、性能、稳定性和确定性标准
|
||||
|
||||
6.1 性能指标
|
||||
指标 最低标准
|
||||
解释器吞吐 代表性 nc_files 和 configs/sim 程序可在合理时间内完成,不能因 O-word/remap 递归出现非 LinuxCNC 死循环
|
||||
WASM 初始化 核心模块可重复初始化、销毁、重新加载,无残留全局状态污染
|
||||
OPFS 延迟 常规 INI/NGC/tool/var 文件读写不阻塞 UI 主线程
|
||||
浏览器渲染 3D 刀路和状态面板更新不影响底层解释执行结果
|
||||
内存 重复运行测试后无持续增长到不可用的泄漏
|
||||
|
||||
6.2 确定性指标
|
||||
1. 同一输入在 Native、WASM Node、浏览器中产生相同 canonical 事件或等价状态。
|
||||
2. 同一浏览器重复运行三次,结果一致。
|
||||
3. expected_fail 列表稳定,不随执行顺序变化。
|
||||
4. 多实例运行时文件和状态互不污染。
|
||||
|
||||
七、安全和平台边界
|
||||
|
||||
验收项 标准要求
|
||||
文件隔离 浏览器只能访问 OPFS 或用户显式导入文件,不能假定本机路径可直接访问
|
||||
用户 M 代码 外部进程类 USER_M_PATH 在浏览器中必须是明确虚拟边界,不得静默执行宿主命令
|
||||
Python remap 未设计 Python runtime 沙箱前,不得宣称浏览器完整执行 Python remap
|
||||
网络 linuxcncrsh/TCP/MQTT 等网络能力未实现时必须标阻塞
|
||||
硬件驱动 Mesa、Modbus、VFD、实体 I/O 只能通过虚拟接口或 host bridge 条件验收
|
||||
|
||||
八、LinuxCNC 功能树到 wasm-port 的持续完善矩阵
|
||||
|
||||
8.1 源码功能树映射
|
||||
`wasm-port` 的持续完善必须覆盖 LinuxCNC 的真实功能树。下表不是一次性验收清单,而是后续补功能、补测试、补 UI 和补运行边界的任务来源。
|
||||
|
||||
LinuxCNC 源码/资产 定义的能力 wasm-port 持续完善目标 最低晋级目标
|
||||
linuxcnc/src/emc/rs274ngc G 代码解释、参数、O-word、remap、canonical 输出 保持解释器行为完全来自 LinuxCNC;持续扩展 tests/interp、tests/remap、tests/ccomp 覆盖 L4 Browser 通过;Python remap 类可先 Blocked
|
||||
linuxcnc/src/emc/task Task 状态机、运行模式、程序队列、pause/resume/abort/step 把浏览器运行控制对齐 emctask/taskintf,不允许 UI 自己造状态 L3 WASM 通过;涉及 UI 的达到 L5
|
||||
linuxcnc/src/emc/nml_intf NML 命令、状态结构、错误通道 提供结构化 C ABI/JS SDK 状态映射,保持字段语义与 LinuxCNC 一致 L4 Browser 通过
|
||||
linuxcnc/src/emc/motion 运动控制、joint/axis、限位、回零、跟随误差、点动 建立 motion runtime probe 和浏览器状态验证;full-process 依赖项先记录阻塞 L3 WASM 通过;full-process 项 Blocked
|
||||
linuxcnc/src/emc/tp 轨迹规划、速度约束、前瞻、path tolerance 持续增加 TP native/WASM 数值对比和复杂路径 fixture L3 WASM 通过
|
||||
linuxcnc/src/emc/kinematics 运动学正反解、trivkins、5axis、switchkins 对五轴、TRT、SCARA、gantry、wrapped rotary 建立源码级 probe L4 Browser 通过
|
||||
linuxcnc/src/emc/tooldata 刀具表、刀库、随机/非随机、DB_PROGRAM 协议 工具数据逻辑必须来自 LinuxCNC;OPFS 只做存储 L4 Browser 通过;外部 DB 进程可先 Blocked
|
||||
linuxcnc/src/emc/ini INI 解析和配置查找 用 LinuxCNC INI 规则驱动 configs/sim staging;覆盖注释、续行、重复 key 等 L4 Browser 通过
|
||||
linuxcnc/src/hal HAL pin/signal/param、halcmd、组件、线程调度 先实现可预编译虚拟 HAL 和常用组件,再逐步扩展 full-process HAL L3 WASM 通过;硬件项条件通过/Blocked
|
||||
linuxcnc/src/rtapi 实时 API、共享内存、线程、模块生命周期 浏览器采用虚拟化边界,记录实时内核差异;不宣称硬实时 条件通过
|
||||
linuxcnc/src/libnml NML、posemath、RCS 基础库 复用姿态/坐标/NML 基础结构,避免 JS 重写状态协议 L3 WASM 通过
|
||||
linuxcnc/src/emc/pythonplugin Python 插件、Python remap 边界 设计 Pyodide/host Python 边界前保持阻塞,不用 JS 伪造 Python 行为 Blocked 或条件通过
|
||||
linuxcnc/src/emc/usr_intf AXIS、gmoccapy、qtvcp、touchy 等 UI 行为参考 浏览器 UI 只对标操作语义和状态呈现,不复制桌面 GUI 技术栈 L5 UI 发布
|
||||
linuxcnc/configs/sim 真实仿真机床配置、INI/HAL/NGC/tool/remap/user-M 作为机床能力推广入口,按配置族建立覆盖矩阵 L2/L3/L4 分层推进
|
||||
linuxcnc/nc_files 官方 G 代码示例和宏 作为解释器和文件执行基本烟测入口 L4 Browser 通过
|
||||
linuxcnc/tests 上游回归测试 作为持续完善主任务池;每个跳过项必须有阻塞原因 逐项 L0 到 L5 或 Blocked
|
||||
|
||||
8.2 configs/sim 机床族推进矩阵
|
||||
后续完善 `wasm-port` 时,必须把 LinuxCNC `configs/sim` 当作真实机床能力库逐族推进。
|
||||
|
||||
机床族 代表能力 wasm-port 推进要求 不可降级点
|
||||
axis 基础配置 三轴、车床、foam、wrapped rotary、external offsets、gantry 优先形成浏览器可打开、可运行、可保存的代表配置 不能丢弃 INI/tool/var/subroutine 上下文
|
||||
axis/remap 内置命令扩展、NGC remap、toolchange、stop-lookahead 先覆盖 NGC remap;Python remap 未接入前阻塞 不能用 JS 回调替代 LinuxCNC remap
|
||||
axis/vismach 五轴、机器人、PUMA、SCARA、hexapod、millturn 用 kinematics/source probe 和代表程序验证空间运动 不能只展示 3D 模型就宣称运动学通过
|
||||
gmoccapy/qtvcp/qtdragon/touchy UI 与宏、Python、tool probe、plasma 等流程 抽取操作语义和配置行为进入 Web UI;桌面 UI 进程保持边界 不能把桌面 GUI smoke 当作 Web 功能通过
|
||||
qtplasmac/plasma 等离子专用 HAL、Python、实时 IO 先建立阻塞和虚拟 IO 模型,再逐步接入 不能宣称真实切割过程通过
|
||||
woodpecker 面向教学和多配置体验的完整 UI/机床包 可作为 Web 产品化体验参考,但底层仍按 LinuxCNC 证据验收 不能只迁移外观
|
||||
|
||||
8.3 上游测试族推进矩阵
|
||||
`linuxcnc/tests` 是持续完善的主要入口。每个测试族的处理原则如下:
|
||||
|
||||
测试族 优先级 推进策略
|
||||
tests/interp 最高 持续扩展 Native/WASM/Browser 解释器覆盖,负例和错误文本同等重要
|
||||
tests/remap 最高 NGC remap 优先;Python remap 建立 runtime 边界后再晋级
|
||||
tests/ccomp 最高 刀补几何必须进入数值和 canonical 对比
|
||||
tests/inifile 高 补齐 INI 解析边界,避免 Web staging 与 LinuxCNC 规则漂移
|
||||
tests/trajectory-planner 高 通过 TP API probe 验证,不用浏览器动画替代
|
||||
tests/motion 高 能拆 API probe 的先拆;full-process motion 保持阻塞说明
|
||||
tests/hal*、module-loading、threads 中高 常用 HAL 组件预编译验收,动态加载/实时线程条件通过
|
||||
tests/toolchanger、tool-info、t0 中高 tooldata 先行,task/io full-process 后续接入
|
||||
tests/mdi-queue、linuxcncrsh 中 需 task 队列和 socket/server 边界,未接入前阻塞
|
||||
tests/ui-smoke 中 只作为 UI 启动参考,不能作为 CNC 语义证据
|
||||
tests/mb2hal、mqtt、硬件驱动类 低到中 定义 host/virtual I/O 边界后逐步推进
|
||||
|
||||
8.4 wasm-port 功能路线分组
|
||||
为便于持续开发,`wasm-port` 后续功能应按以下分组推进:
|
||||
|
||||
分组 目标 进入条件 完成条件
|
||||
A 解释器与文件执行 扩大 G 代码、参数、O-word、remap、错误覆盖 有上游 tests/interp/remap/ccomp/nc_files 资产 L4 Browser 通过且 unexpected_fail 为 0
|
||||
B 机床配置与 OPFS 扩大 configs/sim、INI、tool、var、subroutine staging 有真实 configs/sim 代表配置 浏览器可导入/运行/保存/恢复
|
||||
C Task 和运行控制 对齐 emctask、taskintf、NML 状态 已有解释器和状态 C ABI 暂停/继续/单步/abort 状态可验证
|
||||
D Motion、TP、Kinematics 对齐轨迹规划、joint/axis、五轴、RTCP 已有 Native source probe 数值输出与 LinuxCNC 容差内一致
|
||||
E HAL、IO、Tool、Spindle 对齐 HAL 虚拟化、tooldata、主轴、冷却、M62-M68 已有源码归属和边界设计 预编译/虚拟边界通过,full-process 项记录阻塞
|
||||
F Browser UI 产品化 把 LinuxCNC 状态可靠呈现给用户 底层 L3/L4 已通过 UI 操作不产生独立真相,截图和状态快照同时通过
|
||||
G Python/外部进程边界 接入 Python remap、USER_M_PATH、tool DB、linuxcncrsh 等 已有安全和沙箱设计 不得破坏浏览器安全模型,Native/WASM/Browser 证据齐全
|
||||
|
||||
8.5 每轮开发的最小验收包
|
||||
不同规模改动必须运行不同最小验收包:
|
||||
|
||||
改动类型 最小验收命令
|
||||
文档或测试清单变更 检查相关文档链接、更新 gptlog-process/gpdlog.md
|
||||
vendored 源码或测试资产变更 `wasm-port/tools/verify_vendor_sync.sh`、相关 source manifest 校验
|
||||
解释器/参数/remap 变更 `wasm-port/tests/native/verify_native_probes.sh`、`wasm-port/tests/wasm/node/verify_interp_wasm.sh`、`wasm-port/tests/browser/verify_interp_browser.sh`
|
||||
INI/OPFS/配置 staging 变更 `wasm-port/tests/wasm/node/verify_ini_wasm.sh`、`wasm-port/tests/opfs/node/verify_file_service.sh`、`wasm-port/tests/browser/verify_ini_panel_browser.sh`
|
||||
configs/sim 变更 `wasm-port/tests/native/verify_sim_configs.sh`、`wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh`、inventory 验证
|
||||
TP/运动学变更 `wasm-port/tests/wasm/node/verify_tp_wasm.sh`、对应 native source probe
|
||||
UI 变更 `wasm-port/tests/ui/node/verify_ui_node_smokes.sh`、相关 browser smoke
|
||||
跨模块或发布前变更 `wasm-port/tests/host/verify_host_smokes.sh` 加所有相关 targeted checks
|
||||
|
||||
8.6 功能完成定义
|
||||
一个功能只有同时满足以下条件,才能从“开发完成”进入“验收完成”:
|
||||
1. 有 LinuxCNC 源码或测试资产归属。
|
||||
2. 没有项目自研 CNC 语义。
|
||||
3. Native 层先通过或明确阻塞。
|
||||
4. WASM 层结果与 Native 一致。
|
||||
5. 涉及浏览器、OPFS、UI 的功能有真实浏览器证据。
|
||||
6. 文档、tracker、source reuse map、compatibility validation 同步更新。
|
||||
7. expected_fail 与 blocked 项稳定、可解释、可复验。
|
||||
8. 用户可见说明不超出证据覆盖范围。
|
||||
|
||||
九、验收汇总模板
|
||||
|
||||
验收时必须填写以下汇总表:
|
||||
|
||||
模块 总项 通过 条件通过 阻塞 不通过 证据入口
|
||||
源码基线与同步 0 0 0 0 verify_upstream_baseline.sh、verify_vendor_sync.sh
|
||||
自研语义禁止 0 0 0 0 verify_no_standalone_cnc_semantics.sh
|
||||
G代码解释器 0 0 0 0 verify_native_probes.sh、verify_interp_wasm.sh、verify_interp_browser.sh
|
||||
remap/O-word/参数 0 0 0 0 linuxcnc-test-porting-tracker.md
|
||||
刀补/固定循环/车削 0 0 0 0 tests/ccomp、tests/interp
|
||||
Task/NML/状态机 0 0 0 0 task 对标测试
|
||||
运动/TP/插补 0 0 0 0 verify_tp_wasm.sh
|
||||
运动学/五轴/RTCP 0 0 0 0 kinematics probes、sim configs
|
||||
HAL/RTAPI 0 0 0 0 HAL tests、blocked table
|
||||
刀具/主轴/IO 0 0 0 0 tooldata、toolchanger、spindle tests
|
||||
INI/OPFS/文件系统 0 0 0 0 verify_file_service.sh、browser OPFS
|
||||
configs/sim 0 0 0 0 verify_sim_configs.sh
|
||||
浏览器 UI 0 0 0 0 browser smoke、UI node smokes
|
||||
多实例/并发 0 0 0 0 session workflow
|
||||
文档与证据 0 0 0 0 compatibility-validation.md、source-reuse-map.md
|
||||
|
||||
十、最终判定规则
|
||||
|
||||
10.1 完全通过
|
||||
满足以下全部条件:
|
||||
1. 必跑命令全部通过。
|
||||
2. unexpected_fail 为 0。
|
||||
3. 所有 claimed feature 均有 P0-P4 证据链。
|
||||
4. 阻塞项均为 Web 平台、硬件、实时内核或尚未接入 runtime 边界导致,并已记录。
|
||||
5. 没有一票否决项。
|
||||
|
||||
10.2 条件通过
|
||||
满足以下全部条件:
|
||||
1. 核心解释器、参数、刀具、remap、TP、运动学、OPFS 和浏览器代表流程通过。
|
||||
2. full-process HAL/task/motion、Python remap、动态 loadrt、硬件驱动等边界项有明确阻塞表。
|
||||
3. 用户可见功能没有宣称超过证据覆盖范围。
|
||||
|
||||
10.3 不通过
|
||||
出现以下任一情况:
|
||||
1. 自研 CNC 语义替代 LinuxCNC 语义。
|
||||
2. Native 与 WASM/浏览器结果不一致且无合理平台边界说明。
|
||||
3. 未知失败被计入 expected_fail。
|
||||
4. UI 状态与底层 LinuxCNC 状态不一致。
|
||||
5. 未执行或未保存关键验收命令输出。
|
||||
|
||||
十一、与旧版验收标准的关系
|
||||
|
||||
旧版“02完全对标linuxcnc的验收标准.txt”可作为功能覆盖目标参考;本文件作为新的执行标准,重点补充以下要求:
|
||||
|
||||
1. 从“功能清单通过”升级为“源码来源、测试资产、运行层级和证据链通过”。
|
||||
2. 明确禁止项目自研 CNC 语义冒充 LinuxCNC 行为。
|
||||
3. 把 Native、WASM Node、真实浏览器拆成四层验收。
|
||||
4. 把 full-process、Python remap、HAL、硬件驱动等边界从笼统受限改为可追踪阻塞项。
|
||||
5. 把 UI 验收从页面存在升级为底层状态一致性验收。
|
||||
6. 把 expected_fail 和 blocked 项纳入正式验收口径,要求 unexpected_fail 为 0。
|
||||
7. 增加 LinuxCNC 功能树到 `wasm-port` 的持续完善矩阵,使本文档可直接作为后续功能开发、测试迁移、浏览器集成和发布验收的推进依据。
|
||||
|
||||
最终结论模板:
|
||||
|
||||
本次验收以 /home/mes123456/cnc_wams/linuxcnc 的 LinuxCNC 源码和测试资产为唯一数控语义基准。经源码同步、自研语义禁止、Native、WASM Node、OPFS、真实浏览器和 UI 状态一致性验证后,若所有必跑命令通过、unexpected_fail 为 0、阻塞项均有明确 LinuxCNC 依赖和恢复路径,则可判定系统达到“完全对标 LinuxCNC”的可执行验收标准。
|
||||
Reference in New Issue
Block a user