Files
cnc_wams/完善wasm/working/16-04多通道源码边界复核.md
2026-07-10 21:26:42 -04:00

5.6 KiB
Raw Permalink Blame History

16-04 多通道源码边界复核

定位

本文件复核 04基于Web的LinuxCNC兼容数控仿真平台.txt2.5 多通道支持。04 将 5.1-5.5 均标为通过,并把源码位置概括为 src/emc/task/emctaskmain.ccM100/M101 + HAL 和“通道独立状态”。本轮以本地 LinuxCNC commit 60597ee0718873d2449058c824262a275e5e4bad 为准,确认这些说法是否可作为无条件通过证据。

严格结论

04 的“多通道”不能直接按本地 LinuxCNC 单个 task 进程宣称 5/5 通过。源码显示 LinuxCNC task 主路径是一个 command/status/error NML 组合、一个全局 EMC_STAT、一个 pinterp 解释器指针和一个 interp_list 解释器输出队列。LinuxCNC 可以通过多进程/多配置/多实例组合实现多机床或多任务隔离,但这不是 emctaskmain.cc 内建的“两个或三个独立解释器通道”。

逐项复核表

04 项 04 写法 本地 LinuxCNC 证据 严格状态 后续处理
5.1 双通道并行,两个独立解释器 emctask.cc:47-49 只有全局 pinterpemctask.cc:433-455 初始化单个解释器;emctaskmain.cc:100-109 是单 command/status/error NML 组合 条件通过:可按两个 LinuxCNC 实例或两个 Web session 设计,但不是单 task 内建双通道 需新增 multi-session gate证明两个独立 INI/参数/OPFS session 可并行且状态互不污染
5.2 三通道并行,最多 3 通道 本地源码未见固定“三通道”上限;emctaskmain.cc 主路径仍是单 interp_list 和单 task 状态 不通过当前证据04 的“三通道”数量口径未被本地源码证实 若要保留三通道目标,必须作为 Web 多实例扩展验收,且标明非 LinuxCNC 单 task 内建能力
5.3 通道同步握手M 代码 + HAL 信号 interp_convert.cc:3819-3940 支持 M62-M68 数字/模拟 IO 和 M66 waitdocs/src/gcode/m-code.adoc:703-728 支持 M100-M199 外部程序;这些是同步原语,不是通道管理器 条件通过LinuxCNC 有 HAL/User-M 同步原语,但多通道握手需要上层实例编排 需提供两个 session 的 HAL 信号或 User-M 边界 proof浏览器内不得静默执行宿主外部 M 程序
5.4 独立倍率控制,每通道独立倍率 emc_nml.hh:585-628 定义全局 traj feed/rapid scale 和按 spindle 的 spindle scaleemctaskmain.cc:1777-1807 设置全局 traj scale/rapid scale/FO/FH/SOspindle scale 按主轴而非 CNC 通道 待实现 gate单 task 下无“每通道”倍率字段证据 只能在多实例/session 层实现每实例倍率;必须输出每 session 独立 task/traj 状态快照
5.5 独立坐标系,每通道独立 G54-G59.3 interp_internal.hh:734-739 记录单解释器活动坐标系、G5x offset、rotationrs274ngc_pre.cc:2488-2525 由 INI 的 PARAMETER_FILE 指定参数文件 条件通过:每个解释器/实例可有独立参数文件和坐标状态;单 task 内未见多通道坐标状态数组 按“每 session 独立 INI + 参数文件 + G5x 状态”验收,不得宣称单 task 内多通道坐标系已支持

相关但不能混淆的证据

LinuxCNC 有多主轴证据,但多主轴不等于 04 的多 CNC 通道:

  • configs/sim/axis/lathe_multispindle/README:1-7 说明这是 2-spindle lathe 示例,最多 8 个 spindle通过 $ 选择主轴。
  • configs/sim/axis/lathe_multispindle/lathe.ini:114-116 设置 [TRAJ] SPINDLES = 2
  • configs/sim/axis/lathe_multispindle/core_sim.hal:7 通过 num_spindles=[TRAJ]SPINDLES 加载 motion。

这些证据可支撑 7.4 多主轴选择和主轴倍率按 spindle 管理,不能用于证明 5.1-5.5 的多 CNC 通道全部通过。

Web/WASM 对标口径

当前 wasm-portweb-rtcp-5axis-xyzbc-trt-sim-plan 的可用证据主要覆盖 session/OPFS 隔离、单代表机床运行、Task/HAL 状态和五轴代表应用。它们可以作为未来多通道 gate 的基础,但本轮未发现现成的专用 multi-channel browser/evidence gate。

后续要把 5.1-5.5 晋级,最低应新增:

  1. wasm-port 多 session Node gate两个或三个 session 同时加载不同 INI、参数文件、程序和 task 状态,验证互不污染。
  2. xyzbc-trt Web evidence输出每 session 的 program、G5x、倍率、HAL 同步事件和 snapshot id。
  3. 同步握手 proof使用 M62-M68/M66 或受控 User-M 边界,证明一个 session 的同步事件不会越界影响另一个 session。
  4. 明确边界:浏览器内不自动执行宿主 M100-M199 外部程序;需要宿主 opt-in 或受控模拟。

结论

INT-015/ACC-028 的复核结论是04 多通道 5 项不能按 emctaskmain.cc 直接宣称 5/5 通过。5.1、5.3、5.5 可作为“多实例/session 条件通过目标”5.2 的“三通道上限”未被本地 LinuxCNC 源码证实5.4 需要新增每 session 独立倍率 gate。后续必须以专门 multi-session gate 和 Web evidence 替代 04 原文的概括性通过结论。

后续状态

5.4 的每 session feed/spindle override 隔离 evidence 已由 ACC-042/INT-029 实施,随后 ACC-046/INT-033 扩展为三个独立 session 并通过。04 已将固定“最多三通道”修订为“至少三个独立 Web session”。该证据仍属于 multi-session 条件实现,不改写 LinuxCNC 单 task 的源码边界。

ACC-047/INT-034 又补齐三个独立 LinuxCNC interpreter WASM module 的 G55/G56/G57、10/20/30° rotation 和 M62 P1/P2/P3 canonical output 隔离,并验证上层只消费匹配同步通道。至此 5.1、5.3、5.5 已有专项 proof宿主 User-M 和单 task 多通道仍不继承通过。