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

51 lines
5.6 KiB
Markdown
Raw Permalink 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.
# 16-04 多通道源码边界复核
## 定位
本文件复核 `04基于Web的LinuxCNC兼容数控仿真平台.txt``2.5 多通道支持`。04 将 5.1-5.5 均标为通过,并把源码位置概括为 `src/emc/task/``emctaskmain.cc``M100/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` 只有全局 `pinterp``emctask.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 wait`docs/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 scale`emctaskmain.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、rotation`rs274ngc_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-port``web-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 多通道仍不继承通过。