127 lines
8.8 KiB
Markdown
127 lines
8.8 KiB
Markdown
# 22-04 Full-Process Realtime Runtime Proof 实现缺口复核
|
||
|
||
## 定位
|
||
|
||
本文件落实 `ACC-034/INT-021`:在 `14-04-125项逐项源码证据绑定表.md` 已把 full-process / realtime 缺口集中列出之后,继续复核 `wasm-port` 和 `web-rtcp-5axis-xyzbc-trt-sim-plan` 是否已经具备可机读的 task/motion/HAL 运行时 proof,以及哪些边界仍必须保持条件通过或 Blocked。
|
||
|
||
覆盖 04 条目:
|
||
|
||
- `2.1-2.12 Task`
|
||
- `3.1-3.11 Motion`
|
||
- `4.12 servo-thread 调度`
|
||
- `8.4-8.10 五轴联动与 RTCP 代表运行`
|
||
- 与 full-process 相关的 Tool DB、User-M、硬件、实时内核、原生 LinuxCNC process topology
|
||
|
||
严格口径:Web/WASM 可以晋级为 `linuxcnc_task_motion_hal_wasm_simulation_runtime`,但这不等于已经运行 LinuxCNC 原生实时内核、真实硬件驱动、任意宿主 User-M 外部进程或完整 native NML/process topology。只要 `hostRealtimeKernel=false`、`hardwareDrive=false`、`hostExternalUserMProcessReady=false` 或 `hostToolDbProcessReady=false`,这些宿主/硬件边界仍不得改写为无条件完成。
|
||
|
||
## LinuxCNC 源码对照
|
||
|
||
| 功能域 | LinuxCNC 源码或资产 | 对标含义 |
|
||
| --- | --- | --- |
|
||
| Task 状态机 | `linuxcnc/src/emc/task/emctaskmain.cc`、`taskintf.cc`、`emctask.cc` | 程序加载、run/pause/resume/step/abort、task state/mode/interp state |
|
||
| Motion/servo | `linuxcnc/src/emc/motion/control.c`、`command.c`、`motion.c` | motion command、servo cycle、joint/axis 状态、pause/abort/queue |
|
||
| TP/TC | `linuxcnc/src/emc/tp/tp.c`、`tc.c` | 轨迹队列、速度规划、暂停继续和采样 |
|
||
| HAL thread | `linuxcnc/src/hal/hal_lib.c`、`hal_priv.h`、`components/threads.c` | pin/signal/param、thread/addf/call 执行边界 |
|
||
| 五轴配置 | `linuxcnc/configs/sim/axis/vismach/5axis/*` | `xyzbc-trt`/`xyzac-trt`/switchkins 代表机床文件 |
|
||
|
||
## 当前实现复核
|
||
|
||
### `wasm-port`
|
||
|
||
当前可见实现资产:
|
||
|
||
| 资产 | 作用 |
|
||
| --- | --- |
|
||
| `runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp` | 导出 `lctask_*` C ABI,组合 task subset、motion runtime、HAL runtime、状态 JSON |
|
||
| `runtime/core/linuxcnc_task_subset/emctask_wasm_subset.cc` | 对 `emcTaskAbort`、`emcTaskSetMode`、`emcTaskSetState`、`emcTaskPlan*` 等上游 task 关键语义做子集映射 |
|
||
| `runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c` | 运动状态、servo step、motion ready JSON |
|
||
| `runtime/core/linuxcnc_wrap/linuxcnc_hal_runtime.cpp` | virtual HAL pin/signal/param/net/thread/addf/call 运行时 |
|
||
| `runtime/sdk/src/linuxcnc-task-hal.js` | JS SDK 只负责加载 WASM、传 JSON、读取 status/events,不实现 CNC 语义 |
|
||
| `tests/wasm/node/verify_task_hal_wasm.sh` | task/HAL WASM 运行时 smoke |
|
||
| `tests/wasm/node/verify_hal_runtime.sh` | HAL registry、net propagation、thread scheduler、blocked user edge |
|
||
|
||
当前严格判断:
|
||
|
||
- 可作为 Web/WASM 仿真运行时 proof:`lctask_*` C ABI、task/motion/HAL readiness、status JSON、HAL thread scheduler、Web 项目的 task/HAL store 集成。
|
||
- 不可作为宿主实时 proof:浏览器或 Node 中的周期循环不是 LinuxCNC realtime kernel;`servoCycle`、`taskCycle` 只能作为仿真周期证据。
|
||
- 不可作为完整 native process topology proof:当前未声明原生 NML 多进程、rtapi_app、halcmd 动态模块加载和硬件驱动全链路已在浏览器复现。
|
||
|
||
### `web-rtcp-5axis-xyzbc-trt-sim-plan`
|
||
|
||
当前可见实现资产:
|
||
|
||
| 资产 | 作用 |
|
||
| --- | --- |
|
||
| `app/src/runtime/full-execution-boundary.js` | 汇总 kinematics、interpreter、planner、machine-file remap、task/HAL、Tool DB、User-M readiness,并输出晋级/阻塞字段 |
|
||
| `app/src/runtime/linuxcnc-task-hal-runtime.js` | 包装 `wasm-port` task/HAL SDK,归一化 task/motion/HAL status 到 Web store |
|
||
| `tests/node/verify_full_execution_boundary.mjs` | 验证 blocked、canonical、machine-file remap、task/HAL promoted 等阶段边界 |
|
||
| `tests/node/verify_linuxcnc_task_hal_runtime.mjs` | 验证真实 profile、machine file staging、task/HAL run、MDI switchkins、JOG、PAUSE、STOP |
|
||
| `tests/node/verify_native_task_hal_audit.mjs` | 生成 `build/readiness/native-task-hal-readiness.json`,锁定 Web simulation promotion 与宿主硬件/实时边界 |
|
||
| `tests/browser/gmoccapy_shell_smoke.html` | 浏览器层检查 full execution boundary、task/HAL runtime readiness、host realtime false 等 UI 字段 |
|
||
|
||
`full-execution-boundary.js` 的晋级字段可用于判定:
|
||
|
||
```text
|
||
semanticBoundary = linuxcnc_task_motion_hal_wasm_simulation_runtime
|
||
fullLinuxCncProgramExecutionReady = true
|
||
promotionAllowed = true
|
||
hardwareDrive = false
|
||
hostRealtimeKernel = false
|
||
hostExternalUserMProcessReady = false
|
||
hostToolDbProcessReady = false
|
||
arbitraryUserMExecution = false
|
||
```
|
||
|
||
上述组合的含义是:Web/WASM 仿真运行时可晋级,但宿主实时/硬件/任意外部进程边界仍被显式关闭。
|
||
|
||
## 必须保持的降级禁止规则
|
||
|
||
| 风险 | 禁止做法 | 正确状态 |
|
||
| --- | --- | --- |
|
||
| full-process 降级 | 用普通解释器 canonical events 代替 task/motion/HAL runtime proof | 只能到 canonical boundary,不能 full execution ready |
|
||
| 实时内核误报 | 把 `servoCycle`/Web Worker/Node loop 写成 Linux realtime kernel | `hostRealtimeKernel=false`,条件通过 |
|
||
| 硬件误报 | 把 virtual HAL 或 UI 状态写成真实硬件驱动 | `hardwareDrive=false`,Blocked/非目标 |
|
||
| 外部进程误报 | 把 Web simulation Tool DB/User-M 写成宿主任意外部进程 | `hostExternalUserMProcessReady=false`、`hostToolDbProcessReady=false` |
|
||
| UI 伪通过 | 只看按钮/截图,不检查 task/motion/HAL status JSON | 不得晋级 |
|
||
| profile 继承 | 用 `xyzbc-trt` 一套证据宣称所有五轴 profile 完成 | 只能按 profile 逐项晋级 |
|
||
|
||
## 当前严格状态
|
||
|
||
| 04 范围 | 当前状态 | 原因 | 晋级或保持条件 |
|
||
| --- | --- | --- | --- |
|
||
| Task run/pause/resume/step/abort | 条件通过到 Web/WASM task runtime | 已有 `lctask_*`、task state/status 和 Web store gate | 继续跑 `verify_task_hal_wasm.sh`、`verify_linuxcnc_task_hal_runtime.mjs`、browser full boundary gate |
|
||
| Motion/TP runtime | 条件通过到 Web/WASM 仿真 runtime | 已有 motion runtime、TP gate、task/HAL status 和 sample proof | 不得宣称真实硬件 servo;需保留 planner/runtime gate |
|
||
| HAL servo-thread 调度 | 条件通过到 virtual HAL thread | `verify_hal_runtime.sh` 覆盖 thread/addf/call;但不是 Linux realtime kernel | `hostRealtimeKernel=false` 必须保留 |
|
||
| Full LinuxCNC Web 仿真执行 | 可按 `linuxcnc_task_motion_hal_wasm_simulation_runtime` 晋级 | `full-execution-boundary` 汇总 task/motion/HAL、Tool DB、User-M Web simulation readiness | 仅限 Web/WASM simulation boundary |
|
||
| 完整 native process topology | Blocked/非目标 | 浏览器未运行 LinuxCNC 原生 NML 多进程和 rtapi/halcmd 动态拓扑 | 不得从 Web smoke 自动晋级 |
|
||
| 硬件驱动 | Blocked/非目标 | 项目目标明确为全软件仿真 | 保持 `hardwareDrive=false` |
|
||
| 宿主实时内核 | 条件通过/Blocked | Web/Node 不具备 LinuxCNC realtime kernel | 保持 `hostRealtimeKernel=false` |
|
||
| 任意宿主 User-M/Tool DB 外部进程 | Blocked | 当前仅有 controlled Web simulation boundary | 保持 host process false,除非新增 opt-in native gate |
|
||
|
||
## 后续专项 Gate
|
||
|
||
建议把以下命令作为 full-process/realtime proof 的最小复验包:
|
||
|
||
```bash
|
||
cd wasm-port && ./tests/wasm/node/verify_task_hal_wasm.sh
|
||
cd wasm-port && ./tests/wasm/node/verify_hal_runtime.sh
|
||
node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_full_execution_boundary.mjs
|
||
node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
|
||
node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_native_task_hal_audit.mjs
|
||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
|
||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
|
||
```
|
||
|
||
通过标准:
|
||
|
||
- `full_execution_boundary_smoke=ok`。
|
||
- `linuxcnc_task_hal_runtime_smoke=ok`、`task_hal_machine_file_smoke=ok`、`switchkins_remap_hal_sync_smoke=ok`。
|
||
- `native_task_hal_source_artifact_audit=ok`。
|
||
- readiness artifact 中 `promotion_scope=web_simulation_only`。
|
||
- `hardware_drive=0`、`host_realtime_kernel=0`、`host_external_user_m_process_ready=0`、`host_tool_db_process_ready=0`。
|
||
- 浏览器 full boundary 页面必须渲染 task/HAL readiness,并保持 host realtime false。
|
||
|
||
## 结论
|
||
|
||
`ACC-034/INT-021` 已完成实现缺口复核。当前两个目标项目已经具备 Web/WASM task-motion-HAL 仿真运行时 proof 的关键实现和 gate;但这只能支撑 `linuxcnc_task_motion_hal_wasm_simulation_runtime` 这个边界,不能把 04 中涉及实时内核、硬件驱动、完整 native process topology、任意宿主 User-M/Tool DB 外部进程的内容晋级为无条件完成。后续文档和验收必须同时记录 promotion 和保留的 host/hardware/realtime false 字段。
|