Files
cnc_wams/完善wasm/working/17-04-HAL-Scope-Meter结构化证据复核.md
2026-07-10 21:26:42 -04:00

156 lines
7.2 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.
# 17-04 HAL Scope/Meter 结构化证据复核
## 定位
本文件落实 `ACC-029``INT-016`,只复核 `04基于Web的LinuxCNC兼容数控仿真平台.txt` 中与 HAL Scope/Meter 相关的条目:
- `4.13 HAL Scope`
- `4.14 HAL Meter`
- `10.7 HAL Scope`
严格口径:
1. LinuxCNC 原生 `halscope``halmeter` 是 HAL 工具,不是普通 Web 截图功能。
2. 浏览器不能声明运行了 LinuxCNC 原生 GTK/实时 HAL 工具,除非实际启动对应 native 工具并采集其输出。
3. Web 等效实现可以作为替代证据,但必须输出结构化 HAL sample、meter value 或 waveform evidence截图只能作为 P5 辅助证据。
## LinuxCNC 源码证据
| 工具 | LinuxCNC 归属 | 关键行为 | 对 Web 的约束 |
| --- | --- | --- | --- |
| `halscope` | `src/hal/utils/scope.c``scope_rt.c``scope_shm.h``scope_usr.h``docs/src/hal/halscope.adoc``docs/src/man/man1/halscope.1.adoc` | 原生软件示波器,由用户态 GUI 和 `scope_rt` HAL 实时组件协作通过共享内存、采样周期、record length、trigger、channel data 捕获 HAL pin/signal/parameter 波形 | Web 只能声明“等效 HAL waveform evidence”不能把 canvas 折线或 UI 截图当作原生 `halscope` |
| `halmeter` | `bin/halmeter``docs/src/man/man1/halmeter.1.adoc` | 原生 HAL 万用表,用独立 HAL 连接观察单个 pin、signal 或 parameter 当前值 | Web 可用 virtual HAL registry/snapshot/readPin 等价覆盖当前值观察,但必须输出可复验 JSON |
源码级边界:
- `scope_rt.c` 导出 `scope.sample`,并维护 `IDLE``INIT``PRE_TRIG``TRIG_WAIT``POST_TRIG``DONE` 等采样状态。
- `scope_rt.c` 的采样逻辑按通道读取 HAL 数据地址,支持 bit/u32/s32/float 等数据宽度。
- `scope_shm.h` 固定了共享控制区,包括采样周期、记录长度、预触发、触发通道、触发电平、强制触发、当前样本、每通道 offset/type/len 等字段。
- `scope_usr.h` 记录用户态横轴、纵轴和通道选择状态,说明 `halscope` 不是单个静态数据点,而是有采样窗口和通道配置的波形工具。
- `halmeter.1.adoc``halmeter` 定义为观察 HAL pin、signal、parameter 的工具,行为接近单值仪表,不等价于 `halscope` 的波形缓存。
## 现有 Web/WASM 证据
| 项目 | 已有证据 | 可支撑内容 | 不足 |
| --- | --- | --- | --- |
| `wasm-port` | `tests/ui/node/verify_real_simulation_programs.mjs` | virtual HAL pin registry、bridge snapshot、runtime read/write、`spindle.0.speed-out``iocontrol.0.coolant-flood` 等当前值证据 | 可支撑 meter/status snapshot不能单独支撑 `halscope` waveform |
| `wasm-port` | `runtime/opfs/snapshot-store.js` | OPFS session 中校验 `virtualHal.state.source === "browser-virtual-hal"`,并保存 virtual HAL 状态和诊断 | 证明状态可持久化不证明固定采样周期、trigger 和多 sample 波形 |
| `web-rtcp-5axis-xyzbc-trt-sim-plan` | `tests/node/verify_gmoccapy_hal_model.mjs` | gmoccapy HAL model、pin groups、core/spindle/postgui nets、source compliance | 可支撑 HAL 模型和 UI 监视;不等价于原生 `halscope` 采样器 |
## 结构化 evidence 要求
### HAL Meter JSON
`4.14 HAL Meter``10.6 HAL 信号监视` 后续晋级至少需要输出如下结构,文件格式可为 JSON 或 JSONL
```json
{
"apiName": "hal_meter_evidence",
"source": "browser-virtual-hal",
"sampleTime": "2026-07-10T12:41:00Z",
"items": [
{
"name": "spindle.0.speed-out",
"sourceKind": "pin",
"type": "float",
"value": 1200,
"writable": false,
"signal": "spindle-speed"
}
],
"integrity": {
"complete": true,
"sourceReference": "linuxcnc/docs/src/man/man1/halmeter.1.adoc"
}
}
```
验收规则:
- `items` 必须覆盖 pin、signal 或 parameter 中实际声称支持的类型。
- 每个 item 必须记录 `name``sourceKind``type``value`
- 如支持写入或 UI 修改,必须记录 `writable`,并用 runtime read/write gate 证明写入后快照更新。
- 只显示 UI 数字、截图或 canvas 文本不构成 P3/P4 证据。
### HAL Scope Waveform JSON
`4.13 HAL Scope``10.7 HAL Scope` 后续晋级至少需要输出如下结构:
```json
{
"apiName": "hal_scope_waveform_evidence",
"source": "browser-virtual-hal",
"samplePeriodNs": 1000000,
"recordLength": 256,
"channelCount": 2,
"trigger": {
"channel": 0,
"edge": "rising",
"level": 0.5,
"forced": false
},
"channels": [
{
"index": 0,
"name": "spindle.0.speed-out",
"kind": "pin",
"type": "float",
"scale": 1,
"units": "rpm"
}
],
"samples": [
{
"sampleIndex": 0,
"timeNs": 0,
"values": [0, false]
}
],
"sourceReference": {
"linuxcnc": [
"linuxcnc/src/hal/utils/scope_rt.c",
"linuxcnc/src/hal/utils/scope_shm.h",
"linuxcnc/docs/src/hal/halscope.adoc"
]
}
}
```
验收规则:
- `samplePeriodNs``recordLength``channelCount` 必须非空且与 `samples` 数量一致。
- `channels` 必须记录每个通道的 HAL 名称、来源类型、HAL 数据类型和缩放信息。
- `trigger` 必须记录触发来源;如采用强制触发,必须显式 `forced: true`
- `samples` 必须是可解析的结构化数组,不能只保存截图像素或 canvas polyline。
- Node gate 至少校验字段完整性、采样数量、时间单调、通道数量和值类型Browser gate 可在此基础上验证 UI 渲染。
## 04 条目结论
| 04 项 | 复核结论 | 后续 gate |
| --- | --- | --- |
| `4.13 HAL Scope` | 条件通过目标。LinuxCNC 原生 `halscope` 是 RT/GTK 工具;浏览器当前只能按等效 waveform evidence 验收 | 新增 `hal_scope_waveform_evidence` JSON/Node gate可选 browser canvas 只作为 P4/P5 补充 |
| `4.14 HAL Meter` | 条件通过。当前 virtual HAL pin registry/snapshot/read/write 能支撑 meter-like 当前值证据,但不是原生 GTK `halmeter` | 新增 `hal_meter_evidence` JSON/Node gate覆盖 pin/signal/parameter 当前值 |
| `10.7 HAL Scope` | 待实现 gate。Web UI 的 HAL Scope 不能只凭截图晋级 | 新增 waveform JSON、字段校验、浏览器渲染 smoke 和 evidence 文件路径 |
## 最小验收命令建议
后续实现对应 gate 后,至少补入以下命令之一:
```bash
cd wasm-port && node tests/ui/node/verify_hal_meter_evidence.mjs
cd wasm-port && node tests/ui/node/verify_hal_scope_waveform_evidence.mjs
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
```
若只是维护当前文档边界,继续使用本轮静态复核和 smoke 命令:
```bash
cd wasm-port && ./tools/verify_upstream_baseline.sh
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
```
## 结论
`ACC-029/INT-016` 已完成 HAL Scope/Meter 源码边界复核。当前可以把 `4.14 HAL Meter` 归为“已有 virtual HAL 基础、需 meter JSON gate 的条件通过”,把 `4.13/10.7 HAL Scope` 归为“原生工具已定位、Web 等效 waveform gate 待实现”。后续不能再用单张 UI 截图或 04 文本中的“通过”直接宣称 HAL Scope 已完整对标 LinuxCNC。