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 单步状态机。
|
||||
Reference in New Issue
Block a user