docs: add axis run process working set
This commit is contained in:
131
work/working9-执行过程按钮/01-项目功能内容.md
Normal file
131
work/working9-执行过程按钮/01-项目功能内容.md
Normal file
@@ -0,0 +1,131 @@
|
||||
# 01-项目功能内容
|
||||
|
||||
## 项目目标
|
||||
|
||||
完善 `/home/mes123456/cnc_wams/wasm-port` 中 LinuxCNC WASM task/motion 执行链,使 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan` 的 AXIS 风格“执行 Run”按钮按 LinuxCNC 语义工作。
|
||||
|
||||
最终用户可见目标:
|
||||
|
||||
1. 未解除急停、未上电、未 Home 或未打开程序时,Run 按钮不能绕过 LinuxCNC 门禁。
|
||||
2. 满足条件后点击 Run,系统切到 `MODE_AUTO`,发送 `EMC_TASK_PLAN_RUN`,task 进入 `INTERP_READING` 或 `INTERP_WAITING`。
|
||||
3. 执行中当前行、队列深度、motion id、DRO、TCP、RTCP 位置由 task/motion status 驱动。
|
||||
4. 执行中 Pause、Resume、Step 继续走 task/motion 命令链,不直接操作前端播放状态。
|
||||
5. 执行完成、错误、急停、下电、abort 后,UI 与 task/motion status 一致,不能残留“前端 running”假状态。
|
||||
|
||||
## LinuxCNC 对标依据
|
||||
|
||||
来源文档:
|
||||
|
||||
`/home/mes123456/cnc_wams/项目分析/AXIS主控制按钮调用链与WASM完善指南.md`
|
||||
|
||||
核心调用链:
|
||||
|
||||
```text
|
||||
AXIS task_run()
|
||||
-> ensure_mode(MODE_AUTO)
|
||||
-> linuxcnc.command().auto(AUTO_RUN, line)
|
||||
-> EMC_TASK_PLAN_RUN
|
||||
-> emcTaskPlan()
|
||||
-> emcTaskIssueCommand()
|
||||
-> interpreter readahead
|
||||
-> canonical motion commands
|
||||
-> taskintf.cc
|
||||
-> EMCMOT_SET_LINE / EMCMOT_SET_CIRCLE / ...
|
||||
-> motion command/control cycle
|
||||
-> emcStatus
|
||||
-> linuxcnc.stat().poll()
|
||||
```
|
||||
|
||||
Run 不是前端播放按钮。LinuxCNC 中 Run 的真实结果是 task 解释器状态、motion 队列、status echo 和 GUI 可见状态共同变化。
|
||||
|
||||
## 功能范围
|
||||
|
||||
### 必须覆盖
|
||||
|
||||
1. 急停与解除急停:
|
||||
- `STATE_ESTOP` 与 `STATE_ESTOP_RESET` 的切换。
|
||||
- ESTOP 分支 abort、motion disable、IO estop on、volatile home 清理。
|
||||
2. 上电与下电:
|
||||
- 只有 `STATE_ESTOP_RESET` 才能进入 `STATE_ON`。
|
||||
- `STATE_ON` 由 motion enabled 状态推导,不由前端直接写死。
|
||||
3. Home:
|
||||
- Run 前必须满足 all homed 或 `no_force_homing`。
|
||||
- Home 应有 `homing -> homed` 过程态。
|
||||
4. Run:
|
||||
- `MODE_AUTO`。
|
||||
- `EMC_TASK_PLAN_RUN`。
|
||||
- `interpState=READING`、`taskPaused=false`、`singleStepping=false`。
|
||||
- 程序文件已 open,或 task 能按 `emcStatus->task.file` 打开。
|
||||
5. Pause/Resume/Step:
|
||||
- 作为 Run 后执行过程控制,不作为独立前端播放逻辑。
|
||||
- Pause 后 `taskPaused=true` 且 `motion.paused=true`。
|
||||
- Step 只推进一个 motion id 或一个可观测执行边界,并回到 paused。
|
||||
6. Status 投影:
|
||||
- Web store 中 `taskState/mode/interpState/runState/currentLine/motionPaused/singleStepping` 来自 task/HAL status。
|
||||
|
||||
### 暂不覆盖
|
||||
|
||||
1. 完整 LinuxCNC NML 网络传输。WASM 可用内存队列替代 NML transport,但命令类型和状态语义必须保留。
|
||||
2. 完整实时 HAL。当前阶段只要求 task/motion/Home/Run/Pause/Step 相关 HAL pin 可观测。
|
||||
3. 所有 G-code 语义。G-code 到 canonical motion 应优先来自 LinuxCNC interpreter,不在 Web 层扩写解释器。
|
||||
|
||||
## 当前代码基线
|
||||
|
||||
### wasm-port 已有基础
|
||||
|
||||
关键文件:
|
||||
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c`
|
||||
- `wasm-port/runtime/sdk/src/linuxcnc-task-hal.js`
|
||||
- `wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs`
|
||||
|
||||
已具备的基础:
|
||||
|
||||
- task/HAL WASM 入口已经存在。
|
||||
- Pause/Resume/Step 已有 working8 基础验证。
|
||||
- status JSON 已能输出部分 task/motion 字段。
|
||||
- Web 项目已经能加载 task-hal WASM 并把部分 status 映射到 store。
|
||||
|
||||
### 主要差距
|
||||
|
||||
1. task/HAL runtime 仍有 `phase4_minimal` 过渡实现痕迹,部分命令解析和 G-code motion 派生仍是手写逻辑。
|
||||
2. Run 的门禁需要完全对齐 `emcTaskPlan()`:不能只看 Web 自定义 `runState`。
|
||||
3. 程序 open、canonical motion plan、motion queue、current line 的来源需要收敛到 LinuxCNC interpreter/task/motion 状态。
|
||||
4. Home 状态常见简化是立即 `allHomed=true`,缺少 `homing/homeState` 过程态。
|
||||
5. Web store 仍可能存在点击 Run 后直接写 `running` 的分支,需要改为等待 WASM status 确认。
|
||||
6. 验收不能只看按钮 active,需要读取 task/HAL status、trace、截图和 Node/browser 断言。
|
||||
|
||||
## 完成定义
|
||||
|
||||
本项目完成必须同时满足:
|
||||
|
||||
1. Run 前置门禁:
|
||||
- ESTOP 下 Run 被拒绝。
|
||||
- ESTOP_RESET 未上电时 Run 被拒绝。
|
||||
- ON 但未 Home 且 `no_force_homing=false` 时 Run 被拒绝。
|
||||
- 未 open 程序或没有 canonical plan 时 Run 被拒绝并给出明确错误。
|
||||
2. Run 命令链:
|
||||
- UI 点击 Run 后发送 `MODE_AUTO` 和 `EMC_TASK_PLAN_RUN`。
|
||||
- WASM status 显示 `task.mode=AUTO`。
|
||||
- WASM status 显示 `task.interpState=READING/WAITING`。
|
||||
- `task.taskPaused=false`、`motion.traj.singleStepping=false`。
|
||||
3. 执行状态:
|
||||
- motion queue 或 canonical execution id 可观测。
|
||||
- 当前行、motion id、DRO/TCP 随 status 推进。
|
||||
- 执行完成后进入 `INTERP_IDLE` 与 `DONE` 或等价完成状态。
|
||||
4. 执行中控制:
|
||||
- Pause 后 task 和 motion 双层 paused。
|
||||
- Resume 后恢复暂停前状态。
|
||||
- Step 后只推进一个边界并回到 paused。
|
||||
5. Web 集成:
|
||||
- Web `runState` 是 task/HAL status 投影。
|
||||
- UI 按钮 enable/active 状态与 LinuxCNC 门禁一致。
|
||||
- 浏览器 trace 能证明 Run 后位置推进、Pause 后冻结、Resume 后继续。
|
||||
|
||||
## 非目标与风险提醒
|
||||
|
||||
1. 不把 Web frame 播放器当作 CNC task。
|
||||
2. 不在 JS 中新增 G-code 正则解释器作为长期方案。
|
||||
3. 不因为 UI 看起来 running 就关闭任务,必须有 WASM status 证据。
|
||||
4. 不把单步实现为数组下标加一,Step 必须进入 task/motion 单步状态机。
|
||||
227
work/working9-执行过程按钮/02-项目程序开发详细步骤.md
Normal file
227
work/working9-执行过程按钮/02-项目程序开发详细步骤.md
Normal file
@@ -0,0 +1,227 @@
|
||||
# 02-项目程序开发详细步骤
|
||||
|
||||
## 开发原则
|
||||
|
||||
1. 以 LinuxCNC 源码语义为准:`axis -> emcmodule.cc -> emctaskmain.cc -> taskintf.cc -> motion`。
|
||||
2. Run 按钮只发送命令并渲染状态,不直接把 Web 状态改成 running。
|
||||
3. WASM wrapper 可以适配 ABI,但不能发明第二套 CNC task 状态机。
|
||||
4. 每一步都要有 Node WASM 测试、Web Node 测试或浏览器 trace 证据。
|
||||
5. 每轮结束必须更新推进台账、任务矩阵和验收证据。
|
||||
|
||||
## 步骤 1:建立 Run 状态门禁表
|
||||
|
||||
目标文件:
|
||||
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`
|
||||
- `wasm-port/tests/wasm/node/verify_task_state_matrix.mjs`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/linuxcnc-task-policy.js`
|
||||
|
||||
开发动作:
|
||||
|
||||
1. 固化 LinuxCNC 风格枚举:
|
||||
- task state:`ESTOP`、`ESTOP_RESET`、`ON`
|
||||
- task mode:`MANUAL`、`AUTO`、`MDI`
|
||||
- interp state:`IDLE`、`READING`、`PAUSED`、`WAITING`
|
||||
2. 增加 `task_accepts_command(state, mode, interp, command)` 或等价函数。
|
||||
3. 对 `EMC_TASK_PLAN_RUN` 实现硬门禁:
|
||||
- 必须 `state=ON`
|
||||
- 必须 `mode=AUTO`
|
||||
- 必须 `interpState=IDLE`
|
||||
- 必须 homed 或 `no_force_homing`
|
||||
- 必须有已打开程序或可用 canonical plan
|
||||
4. Web policy 使用同一组条件做按钮 enable/disable,但最终以 WASM 返回为准。
|
||||
|
||||
验收:
|
||||
|
||||
- ESTOP 下 Run 返回拒绝。
|
||||
- ESTOP_RESET 下 Run 返回拒绝。
|
||||
- ON/MANUAL 下 Run 需要先切 AUTO。
|
||||
- ON/AUTO/IDLE 且未 homed 时 Run 返回未回零错误。
|
||||
- ON/AUTO/IDLE 且 homed、有程序时 Run 被接受。
|
||||
|
||||
## 步骤 2:补齐程序 open 与 canonical plan 边界
|
||||
|
||||
目标文件:
|
||||
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`
|
||||
- `wasm-port/runtime/sdk/src/linuxcnc-task-hal.js`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-task-hal-runtime.js`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js`
|
||||
|
||||
开发动作:
|
||||
|
||||
1. 明确 task/HAL session 的程序来源:
|
||||
- 当前 G-code 文件路径或虚拟文件名。
|
||||
- LinuxCNC interpreter canonical events。
|
||||
- motion plan id/version。
|
||||
2. 移除或隔离从 G-code 文本正则派生 motion 的 fallback。
|
||||
3. 无 canonical plan 时,Run 返回明确错误,例如 `INTERPRETER_PLAN_REQUIRED`。
|
||||
4. status JSON 输出:
|
||||
- `task.file`
|
||||
- `task.programOpen`
|
||||
- `task.programStartLine`
|
||||
- `task.planId`
|
||||
- `task.errorText`
|
||||
|
||||
验收:
|
||||
|
||||
- 未 open 程序时 Run 不进入 running。
|
||||
- 有 canonical plan 时 Run 记录 `programStartLine`。
|
||||
- Web 能显示或记录拒绝原因,store 不伪造 running。
|
||||
|
||||
## 步骤 3:实现 Run 命令后的 task 状态变化
|
||||
|
||||
目标文件:
|
||||
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c`
|
||||
- `wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs`
|
||||
|
||||
开发动作:
|
||||
|
||||
1. `EMC_TASK_PLAN_RUN` 分支对齐 LinuxCNC:
|
||||
- 清 `taskPaused`
|
||||
- 清 `singleStepping`
|
||||
- 清 step 相关等待状态
|
||||
- 设置 `programStartLine`
|
||||
- 设置 `interpState=READING`
|
||||
- 设置 `execState=EXEC` 或等价执行态
|
||||
2. 把 canonical motion events 下发到 motion runtime 队列。
|
||||
3. motion runtime 输出:
|
||||
- `queueDepth`
|
||||
- `activeDepth`
|
||||
- `motion.id`
|
||||
- `motion.programLine`
|
||||
- `motion.currentVel`
|
||||
4. 执行完成后 task 状态回到:
|
||||
- `interpState=IDLE`
|
||||
- `execState=DONE`
|
||||
- `taskPaused=false`
|
||||
|
||||
验收:
|
||||
|
||||
- Run 后读 status 可见 `READING` 或执行中的 `WAITING`。
|
||||
- motion queue 开始消费。
|
||||
- current line 或 motion id 单调推进。
|
||||
- 完成后进入 done/idle。
|
||||
|
||||
## 步骤 4:Web store 改为 task/HAL status 投影
|
||||
|
||||
目标文件:
|
||||
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-task-hal-runtime.js`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_run_feedback_loop.mjs`
|
||||
|
||||
开发动作:
|
||||
|
||||
1. 点击 Run 后只做:
|
||||
- policy 检查
|
||||
- `taskHalRuntime.sendCommand(MODE_AUTO)`
|
||||
- `taskHalRuntime.sendCommand(EMC_TASK_PLAN_RUN)`
|
||||
- `runCycles/readStatus`
|
||||
2. `runState` 映射规则:
|
||||
- `interpState=READING/WAITING` 且未 paused -> `running`
|
||||
- `interpState=PAUSED` 或 `motion.paused=true` -> `paused`
|
||||
- `interpState=IDLE` 且 exec done -> `idle/done`
|
||||
- 有 error -> `error`
|
||||
3. 删除或隔离点击 Run 后直接写 `running` 的分支。
|
||||
4. 当前行、DRO、TCP、RTCP 显示优先使用 task/HAL status 和 kinematics runtime 的结果。
|
||||
|
||||
验收:
|
||||
|
||||
- WASM 拒绝 Run 时 Web 不进入 running。
|
||||
- WASM 接受 Run 后 Web 才进入 running。
|
||||
- status loop 中断或错误时 UI 进入明确错误态,不保持假 running。
|
||||
|
||||
## 步骤 5:Home 过程态补齐为 Run 前置条件
|
||||
|
||||
目标文件:
|
||||
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_run_feedback_loop.mjs`
|
||||
|
||||
开发动作:
|
||||
|
||||
1. joint status 增加:
|
||||
- `homing`
|
||||
- `homed`
|
||||
- `homeState`
|
||||
2. Home All 后不要立即只写 `allHomed=true`,应经历至少一个可观测过程态。
|
||||
3. Run 前使用 `allHomed || noForceHoming`。
|
||||
4. OFF/ESTOP 时按当前模型清理 volatile home;如果暂不能区分 volatile,必须在 status 和决策记录中标注简化。
|
||||
|
||||
验收:
|
||||
|
||||
- 未 homed Run 被拒绝。
|
||||
- Home 过程中 Run 被拒绝。
|
||||
- Home 完成后 Run 可进入执行。
|
||||
|
||||
## 步骤 6:执行过程 Pause/Resume/Step 回归
|
||||
|
||||
目标文件:
|
||||
|
||||
- `wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_run_feedback_loop.mjs`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/tools/trace-pause-position-json.mjs`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/tools/verify-estop-power-home-run-pause-50ms.mjs`
|
||||
|
||||
开发动作:
|
||||
|
||||
1. 在 Run 成功后执行 Pause,断言:
|
||||
- `task.interpState=PAUSED`
|
||||
- `task.taskPaused=true`
|
||||
- `motion.paused=true`
|
||||
2. Resume 后断言:
|
||||
- 恢复 `interpResumeState`
|
||||
- `taskPaused=false`
|
||||
- `motion.paused=false`
|
||||
3. Step 后断言:
|
||||
- `singleStepping=true` 或 step 过程字段可观测
|
||||
- 只推进一个 motion id/程序行
|
||||
- 回到 paused
|
||||
|
||||
验收:
|
||||
|
||||
- working8 已有暂停证据继续通过。
|
||||
- working9 新增 Run 前置、Run 后执行推进、Run 中暂停/恢复/单步证据。
|
||||
|
||||
## 步骤 7:构建与回归命令
|
||||
|
||||
WASM 推荐命令:
|
||||
|
||||
```bash
|
||||
cd /home/mes123456/cnc_wams/wasm-port
|
||||
./tools/build_task_hal_wasm.sh
|
||||
node tests/wasm/node/verify_task_hal_wasm.mjs
|
||||
node tests/wasm/node/verify_task_state_matrix.mjs
|
||||
```
|
||||
|
||||
Web 推荐命令:
|
||||
|
||||
```bash
|
||||
cd /home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan
|
||||
npm --prefix app run build
|
||||
node tests/node/verify_run_feedback_loop.mjs
|
||||
APP_URL_PATH=/web-rtcp-5axis-xyzbc-trt-sim-plan/app/dist/index.html node tools/trace-pause-position-json.mjs
|
||||
RUN_STABLE_BEFORE_FIRST_PAUSE_MS=3000 node tools/verify-estop-power-home-run-pause-50ms.mjs
|
||||
```
|
||||
|
||||
预期证据关键词:
|
||||
|
||||
- `linuxcnc_task_runtime_smoke=ok`
|
||||
- `task_state_matrix=ok`
|
||||
- `run_feedback_status_loop_smoke=ok`
|
||||
- `pause_position_status=passed-position-frozen`
|
||||
- `verification_status=passed`
|
||||
|
||||
## 步骤 8:记录与关闭
|
||||
|
||||
每完成一个编号任务:
|
||||
|
||||
1. 更新 `03-推进台账.md`。
|
||||
2. 更新 `04-任务矩阵.md` 状态。
|
||||
3. 把命令、输出摘要、trace 路径、截图目录写入 `05-验收证据.md`。
|
||||
4. 如果改变技术方向,追加 `06-决策记录.md`。
|
||||
56
work/working9-执行过程按钮/03-推进台账.md
Normal file
56
work/working9-执行过程按钮/03-推进台账.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# 03-推进台账
|
||||
|
||||
## 记录规则
|
||||
|
||||
每轮推进结束后追加一条记录,格式固定如下:
|
||||
|
||||
```text
|
||||
## YYYY-MM-DD HH:MM EDT - 第 N 轮
|
||||
|
||||
### 本轮目标
|
||||
|
||||
### 本轮做了什么
|
||||
|
||||
### 改了哪些文件
|
||||
|
||||
### 验证了什么
|
||||
|
||||
### 结果与证据
|
||||
|
||||
### 下一步
|
||||
```
|
||||
|
||||
## 2026-07-07 16:42 EDT - 第 0 轮:文档初始化
|
||||
|
||||
### 本轮目标
|
||||
|
||||
按 `/home/mes123456/cnc_wams/项目分析/AXIS主控制按钮调用链与WASM完善指南.md`,在 `/home/mes123456/cnc_wams/work/working9-执行过程按钮` 建立后续推进所需文档体系。
|
||||
|
||||
### 本轮做了什么
|
||||
|
||||
1. 读取 AXIS 主控制按钮调用链与 WASM 完善指南,确认 working9 应以 Run 执行按钮为主线,同时覆盖急停、上电、Home、Pause、Resume、Step 的前置和运行期状态链。
|
||||
2. 参考 `work/working8-暂停按钮` 的文档组织方式,建立 working9 文档索引、功能内容、开发步骤、推进台账、任务矩阵、验收证据、决策记录。
|
||||
3. 将任务编号统一为 `W9-xxx`,便于后续按矩阵继续推进。
|
||||
|
||||
### 改了哪些文件
|
||||
|
||||
- `work/working9-执行过程按钮/README.md`
|
||||
- `work/working9-执行过程按钮/01-项目功能内容.md`
|
||||
- `work/working9-执行过程按钮/02-项目程序开发详细步骤.md`
|
||||
- `work/working9-执行过程按钮/03-推进台账.md`
|
||||
- `work/working9-执行过程按钮/04-任务矩阵.md`
|
||||
- `work/working9-执行过程按钮/05-验收证据.md`
|
||||
- `work/working9-执行过程按钮/06-决策记录.md`
|
||||
|
||||
### 验证了什么
|
||||
|
||||
本轮只创建推进文档,未修改 `wasm-port` 或 Web 项目代码。验证重点是文件是否齐全、索引是否能覆盖后续继续推进。
|
||||
|
||||
### 结果与证据
|
||||
|
||||
- working9 文档体系已创建。
|
||||
- 任务矩阵已列出 Run 门禁、程序 open、task 状态、Web status 投影、Home 前置、Pause/Resume/Step 回归、浏览器验收等后续任务。
|
||||
|
||||
### 下一步
|
||||
|
||||
从 `04-任务矩阵.md` 的 `W9-001` 开始,先补 Run 状态门禁矩阵和 WASM Node 验证。
|
||||
34
work/working9-执行过程按钮/04-任务矩阵.md
Normal file
34
work/working9-执行过程按钮/04-任务矩阵.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# 04-任务矩阵
|
||||
|
||||
## 状态定义
|
||||
|
||||
- `待办`:尚未修改代码。
|
||||
- `进行中`:已有部分修改或验证,但未达到验收标准。
|
||||
- `已完成`:代码、测试、证据、台账均完成。
|
||||
- `阻塞`:需要外部输入或依赖。
|
||||
|
||||
## 任务列表
|
||||
|
||||
| 任务编号 | 状态 | 任务 | 目标文件 | 验收标准 |
|
||||
|---|---|---|---|---|
|
||||
| W9-000 | 已完成 | 初始化 working9 推进文档 | `work/working9-执行过程按钮/*` | README、功能内容、开发步骤、推进台账、任务矩阵、验收证据、决策记录均已创建。 |
|
||||
| W9-001 | 待办 | 建立 Run 状态门禁矩阵 | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`、`wasm-port/tests/wasm/node/verify_task_state_matrix.mjs` | ESTOP、ESTOP_RESET、ON/MANUAL、ON/AUTO/IDLE、未 homed、有程序等状态组合均有明确接受/拒绝断言。 |
|
||||
| W9-002 | 待办 | Web task policy 对齐 Run 门禁 | `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/linuxcnc-task-policy.js` | Run enable/disable 与 LinuxCNC 条件一致;最终仍以 WASM 拒绝/接受为准。 |
|
||||
| W9-003 | 待办 | 明确 program open 与 canonical plan 边界 | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`、`wasm-port/runtime/sdk/src/linuxcnc-task-hal.js` | 未 open 程序或无 canonical plan 时 Run 返回明确错误,不能 fallback 为 JS/G-code 正则执行。 |
|
||||
| W9-004 | 待办 | 实现 `EMC_TASK_PLAN_RUN` 状态转换 | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp` | Run 后清 pause/step,设置 `interpState=READING`、`taskPaused=false`、`singleStepping=false`、`programStartLine`。 |
|
||||
| W9-005 | 待办 | motion runtime 暴露执行推进字段 | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c` | status 输出 `queueDepth`、`activeDepth`、`motion.id`、`programLine`、`currentVel`,执行中可观测推进。 |
|
||||
| W9-006 | 待办 | Web store 改为 task/HAL status 投影 | `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js` | Run 被 WASM 拒绝时 Web 不进入 running;WASM status 进入 reading/waiting 后 Web 才显示 running。 |
|
||||
| W9-007 | 待办 | Home 过程态作为 Run 前置条件 | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`、`web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js` | 未 homed 或 homing 中 Run 被拒绝;Home 完成后 Run 可执行。 |
|
||||
| W9-008 | 待办 | 执行中 Pause/Resume/Step 状态回归 | `wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs`、`web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_run_feedback_loop.mjs` | Run 后 Pause/Resume/Step 均有 task/motion status 断言,不能只看 UI 状态。 |
|
||||
| W9-009 | 待办 | 浏览器 Run 过程 trace 验收 | `web-rtcp-5axis-xyzbc-trt-sim-plan/tools/trace-pause-position-json.mjs`、`tools/verify-estop-power-home-run-pause-50ms.mjs` | trace 证明 Run 后位置推进,Pause 后冻结,Resume 后继续;截图 manifest 有路径记录。 |
|
||||
| W9-010 | 待办 | 构建与 dist 同步 | `web-rtcp-5axis-xyzbc-trt-sim-plan/app/dist`、`wasm-port/build/wasm/task-hal` | WASM 与 Web dist 使用最新实现;hash 或构建日志记录到验收证据。 |
|
||||
| W9-011 | 待办 | 更新文档与证据闭环 | `work/working9-执行过程按钮/03-推进台账.md`、`05-验收证据.md`、`06-决策记录.md` | 每个完成任务都有命令、输出摘要、路径证据和必要决策记录。 |
|
||||
|
||||
## 防重复规则
|
||||
|
||||
1. 前端 `runState=running` 通过不等于 `W9-004` 完成。
|
||||
2. 按钮可点击不等于 Run 门禁完成,必须有 WASM 接受/拒绝矩阵。
|
||||
3. Run 后当前行变化不等于 motion runtime 完成,必须有 queue/id/programLine/status 字段证据。
|
||||
4. 未记录 canonical plan 来源,不得关闭 `W9-003`。
|
||||
5. 未记录 trace 或截图路径,不得关闭浏览器验收任务。
|
||||
6. Pause/Resume/Step 如果只改 UI 状态,不得计入执行过程控制完成。
|
||||
68
work/working9-执行过程按钮/05-验收证据.md
Normal file
68
work/working9-执行过程按钮/05-验收证据.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# 05-验收证据
|
||||
|
||||
## 记录规则
|
||||
|
||||
每次验证后追加证据。建议格式:
|
||||
|
||||
```text
|
||||
## YYYY-MM-DD HH:MM EDT - 任务 W9-xxx
|
||||
|
||||
### 命令
|
||||
|
||||
### 输出摘要
|
||||
|
||||
### 页面/截图/trace/report
|
||||
|
||||
### 结论
|
||||
```
|
||||
|
||||
证据可以包括:
|
||||
|
||||
- 命令和关键输出。
|
||||
- 页面 URL。
|
||||
- Playwright trace 路径。
|
||||
- 截图目录。
|
||||
- `manifest.json`。
|
||||
- `job_id`、`report_id`。
|
||||
- PDF 或报告文件。
|
||||
- WASM hash、dist hash。
|
||||
|
||||
## 2026-07-07 16:42 EDT - 任务 W9-000
|
||||
|
||||
### 命令
|
||||
|
||||
```bash
|
||||
sed -n '1,260p' '项目分析/AXIS主控制按钮调用链与WASM完善指南.md'
|
||||
sed -n '261,620p' '项目分析/AXIS主控制按钮调用链与WASM完善指南.md'
|
||||
sed -n '621,980p' '项目分析/AXIS主控制按钮调用链与WASM完善指南.md'
|
||||
find 'work/working9-执行过程按钮' -maxdepth 1 -type f -print | sort
|
||||
```
|
||||
|
||||
### 输出摘要
|
||||
|
||||
- 已读取 AXIS 主控制按钮调用链与 WASM 完善指南。
|
||||
- 已确认工作目录为 `/home/mes123456/cnc_wams/work/working9-执行过程按钮`。
|
||||
- 已创建 working9 文档体系。
|
||||
|
||||
### 页面/截图/trace/report
|
||||
|
||||
本轮为文档初始化,无页面、截图、trace、job_id、report_id 或 PDF。
|
||||
|
||||
### 结论
|
||||
|
||||
`W9-000` 已完成。后续从 `W9-001` 开始进入代码和验证阶段。
|
||||
|
||||
## 待补证据清单
|
||||
|
||||
| 任务编号 | 必需证据 |
|
||||
|---|---|
|
||||
| W9-001 | `verify_task_state_matrix.mjs` 命令和输出,至少覆盖 Run 接受/拒绝矩阵。 |
|
||||
| W9-002 | Web policy Node 测试输出,证明按钮门禁与 LinuxCNC 条件一致。 |
|
||||
| W9-003 | program open/canonical plan 测试输出,证明无 plan 时拒绝 Run。 |
|
||||
| W9-004 | WASM status 输出片段,证明 Run 后 `interpState=READING`。 |
|
||||
| W9-005 | motion status 输出片段,证明 queue/id/programLine 推进。 |
|
||||
| W9-006 | store 测试输出,证明 Web running 来自 WASM status。 |
|
||||
| W9-007 | Home 过程态测试输出,证明 homing 中 Run 被拒绝。 |
|
||||
| W9-008 | Pause/Resume/Step 回归输出。 |
|
||||
| W9-009 | Playwright trace、截图目录、manifest 路径。 |
|
||||
| W9-010 | build 命令输出、WASM/dist hash 或文件时间戳。 |
|
||||
43
work/working9-执行过程按钮/06-决策记录.md
Normal file
43
work/working9-执行过程按钮/06-决策记录.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# 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 的测试证据。
|
||||
47
work/working9-执行过程按钮/README.md
Normal file
47
work/working9-执行过程按钮/README.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# working9 README 索引
|
||||
|
||||
## 主题
|
||||
|
||||
基于 `/home/mes123456/cnc_wams/项目分析/AXIS主控制按钮调用链与WASM完善指南.md`,推进 AXIS 风格“执行 Run”按钮及其前置/运行期控制链在 `wasm-port` 和 `web-rtcp-5axis-xyzbc-trt-sim-plan` 中的完善。
|
||||
|
||||
本工作目录以“执行过程按钮”为主线,但 Run 不是孤立按钮。LinuxCNC 中 Run 是否可用、是否能继续、是否能暂停/单步,依赖以下状态链:
|
||||
|
||||
```text
|
||||
ESTOP/ESTOP_RESET
|
||||
-> Power ON
|
||||
-> Manual Home
|
||||
-> AUTO Run
|
||||
-> Reading/Waiting
|
||||
-> Pause/Resume/Step
|
||||
-> Done/Error/Abort
|
||||
```
|
||||
|
||||
## 文档索引
|
||||
|
||||
| 文件 | 用途 |
|
||||
|---|---|
|
||||
| `01-项目功能内容.md` | 定义执行按钮功能范围、LinuxCNC 对标语义、当前差距和完成定义。 |
|
||||
| `02-项目程序开发详细步骤.md` | 按 `wasm-port`、Web store、UI、测试证据列出可执行开发步骤。 |
|
||||
| `03-推进台账.md` | 记录每轮做了什么、改了哪些文件、验证了什么、下一步是什么。 |
|
||||
| `04-任务矩阵.md` | 管理全部任务编号、状态、依赖和验收标准,防止重复推进。 |
|
||||
| `05-验收证据.md` | 汇总命令、页面、job_id、report_id、PDF、截图、trace 等证据。 |
|
||||
| `06-决策记录.md` | 固化关键技术决策,避免后续重复争论同一问题。 |
|
||||
|
||||
## 当前推进入口
|
||||
|
||||
1. 先读 `01-项目功能内容.md`,确认 Run 的完成定义不是“前端开始播放”,而是 task/motion 状态进入 LinuxCNC 风格执行链。
|
||||
2. 按 `04-任务矩阵.md` 从 `W9-001` 开始推进。
|
||||
3. 每完成一个任务,把命令、输出摘要、trace、截图目录追加到 `05-验收证据.md`。
|
||||
4. 每轮结束更新 `03-推进台账.md`。
|
||||
5. 如果改变状态源、门禁策略、fallback 方案,先追加 `06-决策记录.md`。
|
||||
|
||||
## 当前结论
|
||||
|
||||
`AXIS主控制按钮调用链与WASM完善指南.md` 的核心结论是:AXIS 按钮不是直接改 UI 状态,而是通过 `linuxcnc.command()` 发送 `EMC_TASK_*` 或 `EMC_JOINT_*` 命令,经 task 层门禁、motion 层执行,再由 `emcStatus` 反向驱动 UI。
|
||||
|
||||
working9 后续推进必须围绕这个结论:
|
||||
|
||||
- Run 必须发送 `EMC_TASK_PLAN_RUN`,并等待 task status 进入 `INTERP_READING/WAITING`。
|
||||
- Run 前必须满足 `STATE_ON + MODE_AUTO + homed/no_force_homing + program opened`。
|
||||
- Web 的 `runState` 只能是 WASM task/motion status 的投影,不能作为真实执行状态源。
|
||||
- Pause、Resume、Step 必须作为执行过程的后续命令,不能退化为前端播放暂停或 frameIndex 跳转。
|
||||
Reference in New Issue
Block a user