Files
cnc_wams/work/working8-暂停按钮/06-决策记录.md
2026-07-07 16:46:39 -04:00

127 lines
4.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.
# 06-决策记录
## DR-W8-001暂停语义必须分成 task/interpreter 与 motion/trajectory 两层
日期2026-07-07
决策:
暂停按钮不能只修改 Web `runState`,必须同时维护:
- task/interpreter`interpState``interpResumeState``taskPaused`
- motion/trajectory`motion.paused`、queue 保留、速度归零或受控减速;
- 后续 TP`tpPause()``tpResume()`
原因:
LinuxCNC AXIS 的暂停调用链明确同时发送 `EMC_TASK_PLAN_PAUSE``EMCMOT_PAUSE`,并由 TP 完成暂停减速语义。只改 UI 状态会出现按钮显示暂停但底层行号或运动继续推进的问题。
影响:
所有验收必须检查 task 与 motion 两层状态,不能只检查 `runState=paused`
## DR-W8-002工具栏 Pause 是 toggle菜单 Pause 和 Resume 是独立命令
日期2026-07-07
决策:
Web 工具栏 `tbtn_pause` 对标 AXIS `task_pauseresume`;菜单 Pause 对标 `task_pause`;菜单 Resume 对标 `task_resume`
原因:
AXIS 源码中工具栏按钮会根据 `s.paused` 在 pause/resume 间切换,菜单命令则分别有独立 gate。混用会导致菜单 Pause 在 paused 状态误触发 resume或工具栏无法恢复。
影响:
`linuxcnc-task-policy.js` 中必须保留菜单 Pause 的严格条件AUTO 且 interpreter 为 `reading/waiting`。工具栏 toggle 的恢复判断优先使用 motion paused。
## DR-W8-003Resume gate 应优先接受 motion paused
日期2026-07-07
决策:
Web resume gate 不应只依赖 `interpState === "paused"`,应接受:
- `motionPaused === true`
-`taskPaused === true`
-`interpState === "paused"`
原因:
AXIS `task_resume()``task_pauseresume()` 的恢复判断核心是 `s.paused`,该字段来自 motion/traj 层,而不是单纯 task interpreter 状态。WASM 和 Web 状态同步存在短窗口motion paused 是恢复按钮是否可用的关键来源。
影响:
需要把 `taskHalStatus.motionStatus.motion.paused` 映射进 Web state并更新按钮 active/title 和 RESUME gate。
## DR-W8-004Immediate pause 不清空运动队列
日期2026-07-07
决策:
用户点击暂停时motion runtime 应立即停止继续消费普通 move但不能清空队列。
原因:
LinuxCNC `tpPause()` 设置 `tp->pausing=1`,使规划器受控降速并保留队列;`tpResume()` 后从原队列继续。清空队列会把 pause 变成 stop/abort破坏恢复语义。
影响:
`linuxcnc_motion_runtime.c` 的 pause 处理应设置 paused 和速度状态,暂停期间只允许 STEP/RESUME/ABORT 继续处理。
## DR-W8-005STEP 不是普通 Resume
日期2026-07-07
决策:
STEP 必须实现“短暂推进一个 motion id 或一行后自动回暂停”,不能等同于 resume。
原因:
LinuxCNC motion 中 `EMCMOT_STEP` 会记录 `idForStep`,短暂恢复 TP检测 id 改变后自动 `tpPause()`。如果 STEP 只是 resume会导致程序连续运行破坏 AXIS 单步语义。
影响:
需要在 motion runtime 中增加 stepping/id 追踪,并在 task runtime 中保持 step 完成后的 paused 状态。
## DR-W8-006短期先修 wrapper 可观测语义,长期迁移到 vendored TP
日期2026-07-07
决策:
当前阶段先在 `linuxcnc_task_hal_wasm.cpp``linuxcnc_motion_runtime.c` 修正 pause/resume/step 的可观测状态与队列行为;随后通过 `linuxcnc_tp_wasm.c` 增加 TP pause/resume probe并逐步让 task-hal motion runtime 使用 vendored TP。
原因:
`wasm-port` 的原则是复用 LinuxCNC 源码,不扩展手写 CNC 语义。但现有前端依赖 task-hal runtime直接替换为 TP 全链路风险较大。分两步推进可以先修正暂停按钮,再用 TP 证据收敛底层实现。
影响:
任务矩阵把 `W8-001``W8-006` 作为短期必要任务,把 `W8-007` 作为向 LinuxCNC TP 真实语义收敛的关键任务。
## DR-W8-007Run Ready 验证不代替 ESTOP/Power/Home/Run
日期2026-07-07
决策:
Web Node 回归中的 `RUN_READY` 保持 AXIS 风格“准备并打开程序”的语义不把上电、Home All、切 AUTO 或 Run 混入 Run Ready。需要运行程序时测试显式执行
- `TOGGLE_POWER`
- `HOME`
- `SET_MODE auto`
- `RUN`
原因:
AXIS toolbar/menu 的 Run Ready 入口不是 LinuxCNC task run 命令,也不能替用户绕过机床状态前置条件。把 power/home/run 混进 Run Ready 会污染暂停按钮验收,因为后续 pause/resume gate 无法区分“程序准备”与“任务正在运行”。
影响:
`verify_run_feedback_loop.mjs` 先断言 Run Ready 已准备 task/HAL session再显式走 power/home/auto/run 流程;暂停恢复验收只在真实 running 状态下执行。