Files
cnc_wams/web-rtcp-5axis-sim-plan/working_run/10-run-control-tests-and-ini-cycle-steps.md

211 lines
5.7 KiB
Markdown
Raw 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.
# 10 RUN 控制类测试与 INI 周期派生详细步骤
生成时间2026-06-22
## 1. 本轮目标
`05``09` 已完成 RUN 主链路、浏览器 RUN 证据和米单位场景的基础上,继续补齐 `07``09` 中列出的剩余可自动验证项。
本轮执行范围:
```text
1. ABORT 后 taskHalStatusLoop.active=falserunState/status 正确。
2. STEP 在 task/HAL runtime loaded 时仍消费 linuxcnc-task-motion-hal-wasm feedback。
3. RUN gate 对 machine ON / AUTO / homed / opened-file 保持细粒度失败断言。
4. taskHalStatusLoop 的 taskPeriodNs/servoPeriodNs 从 INI TASK.CYCLE_TIME / EMCMOT.SERVO_PERIOD 派生。
5. xyzbc-trt 增加 RUN status loop 对称 node 测试。
```
不在本轮执行:
```text
1. 新增浏览器 desktop/mobile 米尺度截图证据。
2. G20/G21 中途切换浏览器端预览用例。
3. 新增真实 LinuxCNC native 对照资产。
```
## 2. 执行顺序
### 步骤 1建立当前基线
运行:
```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_run_feedback_loop.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
```
通过标准:
```text
现有 xyzac RUN feedback loop、RUN preconditions、task/HAL runtime smoke 均可复现。
```
### 步骤 2实现 INI 周期派生
代码落点:
```text
app/src/state/store.js
```
实现要求:
```text
1. 从 state.linuxCncIniConfig.task.cycleTimeSeconds 派生 taskPeriodNs。
2. 从 state.linuxCncIniConfig.emcmot.servoPeriodNs 派生 servoPeriodNs。
3. runTaskHalCommandSequence 默认使用派生周期。
4. startTaskHalStatusLoop 默认使用派生周期。
5. 如果 INI 字段缺失,才回退到原默认值 task=10000000ns / servo=1000000ns。
```
验收断言:
```text
xyzac-trt.ini: TASK.CYCLE_TIME=0.010 -> taskPeriodNs=10000000。
xyzac-trt.ini: EMCMOT.SERVO_PERIOD=1000000 -> servoPeriodNs=1000000。
```
### 步骤 3补 ABORT/STEP node 测试
测试落点:
```text
tests/node/verify_run_feedback_loop.mjs
```
新增断言:
```text
1. RUN 后 loop sequence/tick/history 由 task/HAL feedback 产生。
2. ABORT 后 taskHalStatusLoop.active=false。
3. ABORT 后 stopReason 为 aborted 或 runState 被 task/HAL status 收敛到 stopped/complete。
4. STEP 后 programRuntimeFeedback.sourceMode 是 linuxcnc-task-motion-hal-wasm。
5. STEP 后不出现 fixture-line-playback。
```
### 步骤 4补 RUN gate 细粒度断言
测试落点:
```text
tests/node/verify_run_preconditions.mjs
```
新增断言:
```text
1. INI/profile/kinematics/machine-file ready 但 machine off 时RUN gate 返回 machine must be on。
2. machine on 但未 home 时RUN gate 返回 home machine first。
3. homed 但 manual mode 时RUN gate 返回 switch to auto mode first。
4. selected G-code/session 缺失时validateRunPreconditions 返回 no machine-file G-code opened。
```
### 步骤 5补 xyzbc RUN status loop 对称测试
测试落点:
```text
tests/node/verify_run_feedback_loop.mjs
```
流程:
```text
1. 加载 profile=xyzbc-trt。
2. 解析 xyzbc-trt.ini。
3. attach xyzbc-trt kinematics runtime。
4. stage machine files。
5. 选择 xyzbc_switchkins.ngc 或 boat-xyzbc.ngc。
6. POWER -> HOME -> AUTO -> RUN。
7. 断言 taskHalStatusLoop/profile/kinematics/sourceMode/history 与 xyzbc 一致。
```
### 步骤 6验证
运行:
```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_run_feedback_loop.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
```
通过标准:
```text
所有命令返回 0。
新增断言覆盖 ABORT、STEP、RUN gate、INI cycle period、xyzbc RUN symmetry。
```
## 3. 完成记录模板
执行完成后,追加记录:
```text
1. 修改文件。
2. 新增断言。
3. 验证命令与结果。
4. 未完成项和下一步。
```
## 4. 本轮完成记录
完成时间2026-06-22 17:45 EDT
修改文件:
```text
app/src/state/store.js
tests/node/verify_run_feedback_loop.mjs
tests/node/verify_run_preconditions.mjs
working_run/README.md
working_run/10-run-control-tests-and-ini-cycle-steps.md
```
完成内容:
```text
1. runTaskHalCommandSequence 默认周期改为从 INI 派生:
TASK.CYCLE_TIME -> taskPeriodNs。
EMCMOT.SERVO_PERIOD -> servoPeriodNs。
2. startTaskHalStatusLoop 默认周期改为从同一个 INI 派生。
3. verify_run_feedback_loop.mjs 增加 STOP、ABORT、STEP、xyzbc-trt 对称 RUN 覆盖。
4. verify_run_feedback_loop.mjs 断言 taskHalStatusLoop.taskPeriodNs=10000000、
servoPeriodNs=1000000且 feedback sourceMode 不回退 fixture-line-playback。
5. verify_run_preconditions.mjs 增加 RUN gate 细粒度断言:
machine off、not homed、manual mode、未打开 selected G-code。
6. working_run/README.md 增加 10 文档索引,并把下一步改为米尺度浏览器截图证据。
```
验证结果:
```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_run_feedback_loop.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
```
结果:
```text
全部通过。
run_preconditions_ini_profile_smoke=ok
run_feedback_status_loop_smoke=ok
linuxcnc_task_hal_runtime_smoke=ok
gmoccapy_static_build=ok
smoke:node 全部通过。
```
剩余项:
```text
1. 增加浏览器 desktop/mobile 米尺度截图证据。
2. 后续可补 G20/G21 中途切换浏览器端预览用例。
```