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

4.7 KiB
Raw Blame History

06-决策记录

DR-W8-001暂停语义必须分成 task/interpreter 与 motion/trajectory 两层

日期2026-07-07

决策:

暂停按钮不能只修改 Web runState,必须同时维护:

  • task/interpreterinterpStateinterpResumeStatetaskPaused
  • motion/trajectorymotion.paused、queue 保留、速度归零或受控减速;
  • 后续 TPtpPause()tpResume()

原因:

LinuxCNC AXIS 的暂停调用链明确同时发送 EMC_TASK_PLAN_PAUSEEMCMOT_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.cpplinuxcnc_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-001W8-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 状态下执行。