51 lines
5.6 KiB
Markdown
51 lines
5.6 KiB
Markdown
# 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/SO,spindle 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 多通道仍不继承通过。
|