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

5.7 KiB
Raw Blame History

10 RUN 控制类测试与 INI 周期派生详细步骤

生成时间2026-06-22

1. 本轮目标

0509 已完成 RUN 主链路、浏览器 RUN 证据和米单位场景的基础上,继续补齐 0709 中列出的剩余可自动验证项。

本轮执行范围:

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 测试。

不在本轮执行:

1. 新增浏览器 desktop/mobile 米尺度截图证据。
2. G20/G21 中途切换浏览器端预览用例。
3. 新增真实 LinuxCNC native 对照资产。

2. 执行顺序

步骤 1建立当前基线

运行:

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

通过标准:

现有 xyzac RUN feedback loop、RUN preconditions、task/HAL runtime smoke 均可复现。

步骤 2实现 INI 周期派生

代码落点:

app/src/state/store.js

实现要求:

1. 从 state.linuxCncIniConfig.task.cycleTimeSeconds 派生 taskPeriodNs。
2. 从 state.linuxCncIniConfig.emcmot.servoPeriodNs 派生 servoPeriodNs。
3. runTaskHalCommandSequence 默认使用派生周期。
4. startTaskHalStatusLoop 默认使用派生周期。
5. 如果 INI 字段缺失,才回退到原默认值 task=10000000ns / servo=1000000ns。

验收断言:

xyzac-trt.ini: TASK.CYCLE_TIME=0.010 -> taskPeriodNs=10000000。
xyzac-trt.ini: EMCMOT.SERVO_PERIOD=1000000 -> servoPeriodNs=1000000。

步骤 3补 ABORT/STEP node 测试

测试落点:

tests/node/verify_run_feedback_loop.mjs

新增断言:

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 细粒度断言

测试落点:

tests/node/verify_run_preconditions.mjs

新增断言:

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 对称测试

测试落点:

tests/node/verify_run_feedback_loop.mjs

流程:

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验证

运行:

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

通过标准:

所有命令返回 0。
新增断言覆盖 ABORT、STEP、RUN gate、INI cycle period、xyzbc RUN symmetry。

3. 完成记录模板

执行完成后,追加记录:

1. 修改文件。
2. 新增断言。
3. 验证命令与结果。
4. 未完成项和下一步。

4. 本轮完成记录

完成时间2026-06-22 17:45 EDT

修改文件:

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

完成内容:

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 文档索引,并把下一步改为米尺度浏览器截图证据。

验证结果:

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

结果:

全部通过。
run_preconditions_ini_profile_smoke=ok
run_feedback_status_loop_smoke=ok
linuxcnc_task_hal_runtime_smoke=ok
gmoccapy_static_build=ok
smoke:node 全部通过。

剩余项:

1. 增加浏览器 desktop/mobile 米尺度截图证据。
2. 后续可补 G20/G21 中途切换浏览器端预览用例。