Files
linuxcncWebWASM/doc-rtcp/xyzac-panel-button-parity-test-report.md

8.9 KiB
Raw Blame History

XYZAC TRT 面板按钮对标测试报告

结论

本报告针对当前选定案例 linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini, 按 LinuxCNC AXIS 的命令、门控、状态和错误语义执行了一轮完整面板验收。

selected_case_status: VERIFIED_WITH_SCOPE_GAPS

release_status: STOP_RELEASE

这表示已执行并通过选定 XYZAC 案例的 WASM/Worker 控制闭环,但不宣称整个 LinuxCNC 或所有 AXIS 配置已经数值完全对标。

对标输入

作用 LinuxCNC 原始输入 Web/WASM 输入
AXIS 菜单、快捷键、状态轮询 linuxcnc/src/emc/usr_intf/axis/scripts/axis.py、linuxcnc/share/axis/tcl/axis.tcl web/react/src/App.tsx、web/app/axis-contract.mjs
程序/暂停/恢复/停止 axis.py:task_run/task_step/task_pause/task_resume/task_stop PROGRAM_RUN/STEP/PAUSE/RESUME/ABORT -> SimTask + LinuxCNC source TP
JOG/HOME axis.py:jog_on/jog_off/home_all_joints/home_joint JOG_START/JOG_STOP/HOME -> WasmLinuxcncTp/WasmHomeLimit
MDI/Touch Off axis.py:send_mdi_command/touch_off_system/touch_off_tool MDI_EXECUTE -> linuxcnc-wasm-sim_program
Feed/rapid/spindle override axis.py:set_feedrate/set_rapidrate/set_spindlerate SET_OVERRIDE -> WASM TP/IO
主轴、刹车、冷却、刀具、探针 axis.py:spindle/brake/mist/flood/change_tool SPINDLE_COMMAND/SPINDLE_BRAKE/COOLANT_COMMAND/TOOL_*/PROBE_CONFIG -> WASM IO
预览、实时轨迹、清屏 linuxcnc/lib/python/rs274/glcanon.py XyzacToolPreview,只投影 WASM preview/motion trace
XYZAC M428/M429/M430 switchkins_postgui.hal、remap_subs/428remap.ngc 等 KINEMATICS_SELECT -> WASM kinematics/switchkins

源码输入哈希:

axis.py       328c038a1e8fefd952e53c8e398e3fa98b04602351c44318edd1b044e8f63ffa
glcanon.py    0dfb20f1fdc05289894f3aa638357d98e1063fbd53329c723c777399ec7b33b7
xyzac-trt.ini f985970db293b70c055e4c41fc316d0c16037b5dc7ce07490e18f554e851f811
source slices c9f0b4dc686717b37565f85fb0ab8cc8ded9cfa0028cc0aaaccdbcf808c4c524

AXIS 源控件清单:菜单 80、工具栏 20、快捷键 10,共 110 条,来自 web/workspace/xyzac-trt-source-slices.mjs。

按钮/控件矩阵

下表中的“通过”包含正常路径和刻意触发的 LinuxCNC 门控拒绝;拒绝不是失败,必须返回可解释的 gate/error key。

面板区域 Web 控件 LinuxCNC 命令/源函数 WASM 权威输出 结果
会话 HELLO、SESSION_ATTACH AXIS 启动/状态轮询 sim_protocol、SimTask 通过
Machine Emergency Stop、Release E-stop General_Halt、emcTaskAbort WASM IO + Task ESTOP/RESET 通过
Machine Power On/Off commands.power、emcTaskSetState sim_io_set_power 通过
Machine Reset commands.reset WASM Task/IO reset 通过
Machine HOME ALL home_all_joints WasmHomeLimit 五关节回零 通过
Machine Run Startup Sequence release -> power -> home -> run Worker 固定顺序 通过
Program Load open_file_guts WASM interpreter preview 通过
Program Run task_run / AUTO_RUN WASM program + source TP 通过
Program Pause / Resume task_pause / task_resume WASM interpreter + TP pause/resume 通过
Program Stop task_stop / c.abort WASM TP abort,队列清零 通过
Program Restart reload_file / first line WASM program reload 通过
Program Step / Seek task_step / set_first_line WASM interpreter 通过
JOG X、Y、Z、A、C +/-、Stop jog_plus/jog_minus/jog_on/jog_off WASM motion queue 通过
JOG 越界/非有限速度 LinuxCNC motion limit/ferror WASM 错误 key 通过拒绝
MDI Go、历史命令 send_mdi_command WASM interpreter/canonical 通过
MDI 运行中 MDI manual_ok mdi_while_program_active 通过拒绝
Override Feed Override 50%/200% set_feedrate WASM TP feed override 通过
Override Feed > 200% set_feedrate range motion_override_range 通过拒绝
Spindle CW/CCW/Stop spindle_forward_toggle/spindle WASM spindle command 通过
Spindle +/- SPINDLE_INCREASE/DECREASE WASM signed delta 通过
Spindle Brake EMC_SPINDLE_BRAKE_ENGAGE/RELEASE WASM IO brake state 通过
Coolant Mist/Flood mist_toggle/flood_toggle WASM device IO 通过
Tool Prepare、Prepared、Change、Changed iocontrol/tool handler WASM IO tool state 通过
Probe Arm、Disarm、Trip probe canonical/HAL WASM IO + HAL 通过
Switchkins Identity/M429、TCP: XYZAC/M428、User K/M430 switchkins_postgui.hal + remap files WASM kinematics active_type 通过
Preview Preview、DRO、路径/实时/限位/速度/偏置/范围 glcanon.py draw layers WASM pose/joints/toolpath 通过投影
Preview 缩放、平移、旋转、原点坐标系 AXIS view handlers React/Three display-only state 通过显示
Diagnostics 状态、门控、错误、恢复 AXIS status/error channel Worker snapshot/ledger 通过

本轮自动化结果

聚合用例:web/worker/test_xyzac_panel_buttons.mjs

{
  "schema": "xyzac-panel-button-parity.v1",
  "source": "linuxcnc-wasm-worker",
  "verified_paths": 94,
  "expected_error_paths": 8,
  "blocked_by_abi_paths": 7,
  "selected_case_release_status": "STOP_RELEASE"
}

94 条通过路径包括:

  • Machine:HELLO、SESSION_ATTACH、LOAD_WORKSPACE、ESTOP、ESTOP_RESET、POWER、RESET、HOME ALL、启动序列;
  • Program:LOAD、RUN、SIM_STEP、PAUSE、SNAPSHOT、RESUME、ABORT/STOP、RESTART、STEP、SEEK、按行恢复;
  • JOG:XYZAC 五轴启动、固定 tick 采样和停止;
  • MDI:正常 G-code、运行中门控和非法 G-code 错误回显;
  • Feed Override:50%、200% 和 201% 拒绝;
  • 主轴:CW、signed increase/decrease、Stop、Brake engage/release;
  • Coolant、Tool prepare/change ack、Probe arm/disarm、ESTOP recovery;
  • M428/M429/M430、VISUAL_CLEAR 和诊断快照。

8 条错误路径是刻意验证的拒绝:OFF 状态 Run/HOME/JOG/MDI/M428、Feed 201%、非法 MDI、运行中 MDI。它们均返回 LinuxCNC/WASM 可读原因,没有把拒绝当成成功。

3D_Chips 长程序补充验证:

source_length: 200509
line_count: 4711
preview_segments: 4684
fixed_tick_samples: 1500
execution_line: 168
execution_trace_entries: 166
motion_authority: wasm

当前未闭合项

这些项目在本轮明确记录为 blocked_by_abi,没有伪造通过:

  1. Home Axis:当前 WASM home 状态只暴露 aggregate homed,没有 LinuxCNC 每关节 homed mask;当前按钮调用的是统一 home。
  2. Override Limits:原始 AXIS toggle_override_limits 有独立 motion command;选定 XYZAC WASM 配置目前把 limits 作为配置所有权,尚无等价 command ABI。
  3. Jog Speed 和 Max Velocity slider:当前是 React 控件状态,尚未接入 WASM jog/max velocity command。
  4. Block delete 和 Optional pause:当前是 React toggle,尚未写入 WASM interpreter modal/control state。
  5. Tool Touch Off:当前按钮发送固定 G43;原始 AXIS 先取得用户值,再发送 G10 L10/L11 和 G43,交互输入流程尚未闭合。
  6. Edit tool data、Quit:依赖桌面进程/外部编辑器,属于浏览器 HOST_BOUNDARY,不在仿真 Web 范围内。

复现命令

scripts/build-wasm.sh
npm run build --prefix web/react
node --experimental-strip-types web/worker/test_xyzac_panel_buttons.mjs
node --experimental-strip-types web/worker/test_xyzac_button_constraints.mjs
node --experimental-strip-types web/worker/test_xyzac_workflow.mjs
node --experimental-strip-types web/worker/test_xyzac_manual_control.mjs
node --experimental-strip-types web/worker/test_xyzac_feed_override.mjs
node --experimental-strip-types web/worker/test_xyzac_trt_io_authority.mjs
node --experimental-strip-types web/worker/test_xyzac_3d_chips.mjs
bash -n run-5axis-rtcp.sh

本轮结果:WASM 构建通过,原生 CTest 22/22 通过,XYZAC 聚合按钮测试通过,3D_Chips 固定 tick 长程序测试通过。发布站点 UI 运行/暂停/恢复/停止也已在 Chromium 仿真环境执行;Safari 和真实物理断电不属于本项目范围。

证据哈希

panel_button_test_output 4447f37d8db6724fcd43518e8ddcd18d54e40faaedc77be9ea01abdc573226bc
3d_chips_test_output     493ed6c901d18fae8fa02d0dc26ee0575ce78c53557351a468fc1df622e48ea4
wasm_io_source           1cb066d185dd2c5bbf435e022c2518483bd44962e5a0303248757b2da51740f7
wasm_io_c_source         09bce1430d6f71702ca0b3bf29ac50db377a6f232ce0d1a9b2c1eaac7ea2162e
panel_button_test_source 80782fc1f85f88beb48ec3dfaf638a93f2edb912e694840199dbff504477fe74

报告对应提交前工作树保留了既有 coverage 大文件和 LinuxCNC 子模块改动;本轮只提交面板 WASM I/O 修正、step 状态修正、聚合测试和本报告。