Files
cnc_wams/work/working9-执行过程按钮/06-决策记录.md
2026-07-07 18:45:26 -04:00

71 lines
4.3 KiB
Markdown
Raw Permalink 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-决策记录
## 记录规则
当出现会影响后续实现路线的技术取舍时追加记录。建议格式:
```text
## DR-W9-xxx - 标题
- 日期:
- 状态:
- 背景:
- 决策:
- 理由:
- 后续影响:
```
## DR-W9-001 - working9 以 Run 为主线但覆盖完整控制链
- 日期2026-07-07
- 状态:已采纳
- 背景:用户目录名为 `working9-执行过程按钮`,来源文档覆盖 AXIS 主控制按钮包括急停、上电、Home、执行、暂停、单步。
- 决策working9 文档以“执行 Run 按钮”为主线同时把急停、上电、Home、Pause、Resume、Step 纳入前置条件和执行过程控制。
- 理由LinuxCNC 中 Run 不能脱离 `STATE_ON``MODE_AUTO`、homed、program open、pause/step 状态机单独成立。只写 Run 会导致后续实现继续用 Web `runState` 绕过真实 task/motion 门禁。
- 后续影响:任务矩阵中的 Run 验收必须包含前置链和运行期链;不能只验证点击 Run 后前端开始播放。
## DR-W9-002 - Web `runState` 只能作为投影状态
- 日期2026-07-07
- 状态:已采纳
- 背景AXIS GUI 通过 `linuxcnc.stat().poll()` 读取 `emcStatus`,按钮本身不保存真实 task/motion 状态。
- 决策Web 中 `runState`、按钮 active、当前行等 UI 状态应由 task/HAL WASM status 投影生成。
- 理由:如果点击 Run 后直接写 `runState=running`,会掩盖 ESTOP、未上电、未 homed、无 program plan 等拒绝条件,形成假执行状态。
- 后续影响:后续代码修改需要优先删除或隔离直接写 running/paused/done 的分支,改为等待 WASM status 同步。
## DR-W9-003 - G-code 到 motion 不再扩展 JS 正则 fallback
- 日期2026-07-07
- 状态:已采纳
- 背景:来源指南指出 `wasm-port` 应复用 LinuxCNC source当前从 G-code 文本中用简单规则派生 motion 属于语义漂移风险。
- 决策Run 所需 motion plan 应来自 LinuxCNC interpreter canonical output 或受控 WASM 适配层。没有 plan 时返回明确错误,不把 JS 正则解析作为长期执行路径。
- 理由Run 按钮的验收对象是 LinuxCNC task/interpreter/motion 链,不是 Web 播放 G-code 文本。
- 后续影响:`W9-003` 必须明确 program open 与 canonical plan 边界;关闭任务前要有无 plan 拒绝 Run 的测试证据。
## DR-W9-004 - WASM Run 硬门禁优先于 Web 预判
- 日期2026-07-07
- 状态:已采纳
- 背景Web policy 可以提前禁用按钮,但最终能否 Run 必须由 task/HAL runtime 决定,否则会重新出现 UI running 假状态。
- 决策:`EMC_TASK_PLAN_RUN` 在 WASM 中硬性检查 `ON``AUTO``IDLE`、非 homing、已 Home 或 `noForceHoming`、program open、motion plan loaded。拒绝时通过 `task.errorText` 输出原因。
- 理由:这与 LinuxCNC task 层门禁一致,且能被 Node 矩阵测试直接验证。
- 后续影响Web 可做预判,但不能绕过 WASM 拒绝;测试必须覆盖 `PROGRAM_OPEN_REQUIRED``INTERPRETER_PLAN_REQUIRED`
## DR-W9-005 - Web Run 可执行 ensure AUTO但 running 只能来自 status
- 日期2026-07-07
- 状态:已采纳
- 背景AXIS 的 Run 会先 `ensure_mode(MODE_AUTO)`,但 Web 之前存在点击 Run 立即写 `runState=running` 的风险。
- 决策Web 点击 Run 可以发起 `EMC_TASK_SET_MODE AUTO`,再发 `EMC_TASK_PLAN_RUN`;但 `runState=running` 只能由 task/HAL status 的 `interpState=READING/WAITING` 投影产生。
- 理由:这样兼容 AXIS 的 ensure-mode 操作链,同时保留 WASM task 层作为真实状态源。
- 后续影响Home 过程中允许 Auto 请求排队,但 Run 在 `homing=true` 时仍被拒绝;`run_feedback_status_loop_smoke` 用于防止回退。
## DR-W9-006 - Home 必须有可观测过程态
- 日期2026-07-07
- 状态:已采纳
- 背景:直接把 `allHomed=true` 会让 Run 无法区分未 Home、正在 Home、已 Home。
- 决策WASM Home 命令先输出 `homing=true/homeState=HOMING`task cycle 后输出 `allHomed=true/homeState=HOMED`Web policy 将 `homing` 作为 Run 拒绝条件。
- 理由:满足 working9 对 Home 过程态的要求,也让浏览器和 Node 测试能观察 Run 前置条件。
- 后续影响:后续若接入真实 joint homing需要保留同名 status 字段并由真实 joint status 驱动。