4.7 KiB
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-003:Resume 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-004:Immediate 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-005:STEP 不是普通 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-007:Run Ready 验证不代替 ESTOP/Power/Home/Run
日期:2026-07-07
决策:
Web Node 回归中的 RUN_READY 保持 AXIS 风格“准备并打开程序”的语义,不把上电、Home All、切 AUTO 或 Run 混入 Run Ready。需要运行程序时,测试显式执行:
TOGGLE_POWERHOMESET_MODE autoRUN
原因:
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 状态下执行。