完善 working5 gmoccapy HAL 输入对标

This commit is contained in:
2026-06-26 22:07:41 -04:00
parent 0d79b3545b
commit 917cec15ad
20 changed files with 2853 additions and 27 deletions

View File

@@ -57,3 +57,151 @@
下一步是什么:
- 下一轮可继续按任务矩阵深入核对 Tool/M6/M61 手动换刀对话框、限位 override、optional stop/block delete HAL pin 交叉行为等更细粒度 gmoccapy 行为。
## 2026-06-26 R3细化 gmoccapy XYZAB 换刀 HAL 语义
做了什么:
- 对照 `gmoccapy_postgui.hal`,确认该 XYZAB 仿真配置在 GUI ready 后执行 `unlinkp iocontrol.0.tool-change``unlinkp iocontrol.0.tool-changed``unlinkp iocontrol.0.tool-prep-number`,并将 `gmoccapy.toolchange-*` 手动换刀 GUI nets 保持注释状态。
- 在 Web profile 和 HAL 诊断模型中显式记录换刀策略为 `iocontrol-loopback`,手动 gmoccapy 换刀 GUI pins 未连接,活动回环为 `iocontrol.0.tool-change -> iocontrol.0.tool-changed`
- 在 gmoccapy UI 诊断页新增 `Tool change` 行,显示换刀策略、手动 GUI pin 连接状态、POSTGUI `unlinkp` 数量和注释掉的手动换刀 nets 数量。
- 补充 Node 与浏览器断言,防止后续误把此配置表述为需要 gmoccapy 手动换刀确认对话框。
改了哪些文件:
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/profiles/gmoccapy-xyzab.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-hal-model.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_profile_boundary.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html`
- `/home/meswork/cnc_wams/work/working5/03-推进台账.md`
- `/home/meswork/cnc_wams/work/working5/04-任务矩阵.md`
- `/home/meswork/cnc_wams/work/working5/05-验收证据.md`
- `/home/meswork/cnc_wams/work/working5/06-决策记录.md`
验证了什么:
- `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_profile_boundary.mjs` 通过。
- `npm run smoke:node` 通过。
- `npm run build && npm run smoke` 通过。
下一步是什么:
- 可继续核对限位 override、optional stop/block delete、外部 HAL hard-button pin 与 UI action 的交叉行为。
## 2026-06-26 R4细化外部 HAL hard-button pin 与 Web UI action 映射
做了什么:
- 对照 `gmoccapy.py``_make_hal_pins()``_button_pin_changed()``_get_child_button()``gmoccapy.glade``vbtb_main` 顺序,确认外部硬按钮 pin 只响应 rising edge并按当前可见且敏感的 GTK 按钮位置触发;目标隐藏或不敏感时忽略。
- 修正 `gmoccapy-xyzab` panel schema 中右侧主按钮 HAL pin 顺序:`tbtn_estop`/`tbtn_on`/`rbt_manual`/`rbt_mdi`/`rbt_auto` 对应 `gmoccapy.v-button.button-0..4`,不再把 Estop/Power 误列为 `h-button`
- 在 HAL model 和 communication model 中增加 hard-button 结构化映射,记录 7 个右侧 `v-button` pin、底部主页面 `h-button` 引用、rising-edge 语义、insensitive ignored 语义和 Web selector/action 对应关系。
- 在 store 中新增 `GMOCAPY_HARDWARE_BUTTON` action用同一套 Web action/gate 模拟外部 HAL hard-button pinfalling edge、未映射 pin 和诊断-only pin 均给出明确 operator message。
- 在 UI 按钮 DOM 上新增 `data-gmoccapy-hal-pin``data-gmoccapy-native-panel``data-gmoccapy-native-button-index`,并在 gmoccapy HAL 诊断中显示 hard-button 摘要。
- 补充 Node 和浏览器断言,覆盖 hard-button 模型、通信路径、profile pin 顺序、store gate 行为和 DOM 映射。
改了哪些文件:
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/profiles/gmoccapy-xyzab.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-communication-model.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-hal-model.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/state/store.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_communication_model.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_gates.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html`
- `/home/meswork/cnc_wams/work/working5/03-推进台账.md`
- `/home/meswork/cnc_wams/work/working5/04-任务矩阵.md`
- `/home/meswork/cnc_wams/work/working5/05-验收证据.md`
- `/home/meswork/cnc_wams/work/working5/06-决策记录.md`
验证了什么:
- `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs` 通过。
- `npm run smoke:node` 通过。
- `npm run build && npm run smoke` 通过。
下一步是什么:
- 可继续核对 `gmoccapy.ignore-limits``gmoccapy.optional-stop``gmoccapy.blockdelete`、override analog/count/reset pins 与 Web 状态的交叉行为。
## 2026-06-27 R5细化 gmoccapy HAL 输入 pin 与倍率 pin 语义
做了什么:
- 对照 `gmoccapy.py``_ignore_limits()``_optional_blocks()``_blockdelete()``_on_counts_changed()``_on_analog_value_changed()``_reset_override()``gmoccapy_XYZAB.pref`,确认本轮应保留 `optional-stop`/`blockdelete` 的交叉语义,以及 counts/direct-value/reset 的 enable 和 rising-edge 规则。
- 在 Web store 中新增 `GMOCAPY_HAL_PIN` action统一模拟 `gmoccapy.ignore-limits``gmoccapy.optional-stop``gmoccapy.blockdelete`、feed/rapid/spindle/jog override counts、analog direct-value 和 reset pins。
-`gmoccapyGui` 状态中记录 ignore limits、block delete、optional stop、override enable/counts、jog velocity 和最后一次 HAL pin 效果。
- 扩展 profile、HAL model、communication model 和 UI 诊断,明确 `optional-stop -> block delete``blockdelete -> optional stop`、counts 需要 count-enable、direct-value 需要 analog-enable、reset 只响应 rising edge。
- 在 override 面板增加 ignore limits、block delete、optional stop 和 100% override reset 控件,并补充浏览器 DOM/状态断言。
改了哪些文件:
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/profiles/gmoccapy-xyzab.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-communication-model.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-hal-model.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/state/store.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/styles/gmoccapy.css`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_communication_model.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_gates.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html`
- `/home/meswork/cnc_wams/work/working5/03-推进台账.md`
- `/home/meswork/cnc_wams/work/working5/04-任务矩阵.md`
- `/home/meswork/cnc_wams/work/working5/05-验收证据.md`
- `/home/meswork/cnc_wams/work/working5/06-决策记录.md`
验证了什么:
- `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs && bash ../tests/browser/verify_gmoccapy_shell_browser.sh` 通过。
- `npm run smoke:node` 通过。
- `npm run build && npm run smoke` 通过。
下一步是什么:
- 可继续核对 `gmoccapy.jog.axis.*``gmoccapy.jog.jog-inc-*``gmoccapy.delete-message``gmoccapy.warning-confirm` 等剩余 HAL pin 与 Web 状态/消息系统的映射。
## 2026-06-27 R6细化 gmoccapy jog 与消息 HAL pin 语义
做了什么:
- 对照 `gmoccapy.py``_on_pin_jog_changed()``_on_pin_incr_changed()``_on_pin_turtle_jog()``_del_message_changed()``dialogs.warning_dialog()`,确认 jog axis pin 是按下/释放电平语义jog increment pin 只响应 true/rising edge`jog-inc-0` 为连续点动,`delete-message` 只在 true 时删除消息,`warning-confirm` 是活动 warning dialog 的轮询确认 pin。
-`gmoccapy-xyzab` profile 中补齐 XYZAB 的 10 个 axis jog pins、`jog-inc-0..5``jog.jog-increment``jog.turtle-jog``delete-message``warning-confirm`
- 扩展 HAL model 和 communication model记录 jog axis、jog increment、turtle jog、message pins 的源码回调、summary 数量和 Web 映射。
- 扩展 `GMOCAPY_HAL_PIN`:模拟 jog axis press/release、jog increment rising-edge 选择、turtle jog level、delete-message falling-edge 忽略和 warning-confirm level 状态。
- 在 gmoccapy UI 诊断中新增 `HAL jog``HAL messages` 行,并补充 Node/浏览器断言。
改了哪些文件:
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/profiles/gmoccapy-xyzab.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-communication-model.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-hal-model.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/state/store.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_communication_model.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_gates.mjs`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs`
- `/home/meswork/cnc_wams/work/working5/03-推进台账.md`
- `/home/meswork/cnc_wams/work/working5/04-任务矩阵.md`
- `/home/meswork/cnc_wams/work/working5/05-验收证据.md`
- `/home/meswork/cnc_wams/work/working5/06-决策记录.md`
验证了什么:
- `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs` 通过。
- `node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs` 通过。
- `bash ../tests/browser/verify_gmoccapy_shell_browser.sh` 通过。
- `npm run smoke:node` 通过。
- `npm run build && npm run smoke` 通过。
下一步是什么:
- 可继续核对 `gmoccapy.unlock-settings`、tool measurement/blockheight/probeheight、INI user messages 等更低频 HAL pins本轮 W5-190 已完成。

View File

@@ -13,4 +13,8 @@
| W5-130 | 校验 G-code interpreter/runtime | 完成 | 自动运行、MDI、暂停/继续/停止、M6/M61 引用边界测试随完整 Node 冒烟通过 |
| W5-140 | 校验五轴运动和单位换算 | 完成 | kinematics、real LinuxCNC 5-axis cases、linear unit conversion 测试随完整 Node 冒烟通过 |
| W5-150 | 校验 gmoccapy UI 通信和按钮门控 | 完成 | 浏览器 smoke 验证 mode gate、NML/HAL 诊断、POSTGUI 顺序、按钮状态 |
| W5-160 | 细化 M6/M61 换刀 HAL 语义 | 完成 | profile、HAL model 和 UI 诊断明确 `gmoccapy_postgui.hal` 断开手动换刀 GUI pins并使用 `iocontrol.0.tool-change -> iocontrol.0.tool-changed` 回环;相关 Node、构建、浏览器 smoke 通过 |
| W5-170 | 细化外部 HAL hard-button pin 与 UI action 映射 | 完成 | profile/panel schema、HAL model、communication model、store 和浏览器 DOM 均明确 `gmoccapy.v-button.button-0..6``gmoccapy.h-button.button-0` 等硬件按钮 pin 的 rising-edge、可见敏感按钮映射和 Web gate 行为;相关 Node、构建、浏览器 smoke 通过 |
| W5-180 | 细化 ignore-limits、optional-stop、blockdelete 与 override HAL input pin 语义 | 完成 | profile、HAL model、communication model、store 和浏览器 UI 均明确 `gmoccapy.ignore-limits``gmoccapy.optional-stop``gmoccapy.blockdelete`、override counts/direct-value/reset pins 的 Web 映射Node、构建、浏览器 smoke 通过 |
| W5-190 | 细化 jog、jog-increment、delete-message、warning-confirm HAL input pin 语义 | 完成 | profile、HAL model、communication model、store 和浏览器 UI 均明确 `gmoccapy.jog.axis.*``gmoccapy.jog.jog-inc-*``gmoccapy.jog.turtle-jog``gmoccapy.delete-message``gmoccapy.warning-confirm` 的 Web 映射Node、构建、浏览器 smoke 通过 |
| W5-900 | 更新验收证据和决策记录 | 完成 | 命令、结果、修改原因和后续项已记录 |

View File

@@ -9,6 +9,14 @@
| EV-W5-030 | W5-030 | 命令 | `cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app && npm run build` | 通过,输出 `gmoccapy_static_build=ok` |
| EV-W5-040 | W5-040/W5-150 | 命令 | `cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app && npm run smoke` | 通过,输出 `gmoccapy_shell_smoke=ok``gmoccapy_dist_smoke=ok` |
| EV-W5-110 | W5-110/W5-150 | 命令 | `node ../tests/node/verify_gmoccapy_xyzab_gates.mjs && node ../tests/node/verify_run_preconditions.mjs && bash ../tests/browser/verify_gmoccapy_shell_browser.sh` | 通过,验证下电禁用 Manual/Jog/MDI/Auto上电未回零只允许 Manual/Jog回零后允许 Auto/MDI |
| EV-W5-160 | W5-120/W5-160 | 命令 | `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_profile_boundary.mjs` | 通过,验证 `gmoccapy_postgui.hal` 换刀策略为 `iocontrol-loopback`、手动 gmoccapy 换刀 GUI pins 未连接、3 个 POSTGUI `unlinkp` 被记录 |
| EV-W5-161 | W5-020/W5-030/W5-040/W5-160 | 命令 | `npm run smoke:node``npm run build && npm run smoke` | 通过,完整 Node、静态构建、浏览器 gmoccapy shell/dist smoke 均覆盖新增换刀诊断 |
| EV-W5-170 | W5-150/W5-170 | 命令 | `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs` | 通过,验证 hard-button 模型、通信路径、profile pin 顺序和 `GMOCAPY_HARDWARE_BUTTON` gate 行为 |
| EV-W5-171 | W5-020/W5-030/W5-040/W5-170 | 命令 | `npm run smoke:node``npm run build && npm run smoke` | 通过,完整 Node、静态构建、浏览器 gmoccapy shell/dist smoke 均覆盖 hard-button DOM 映射和诊断 |
| EV-W5-180 | W5-150/W5-180 | 命令 | `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs && bash ../tests/browser/verify_gmoccapy_shell_browser.sh` | 通过,验证 `GMOCAPY_HAL_PIN` 对 ignore-limits、optional-stop、blockdelete、override counts/direct-value/reset pins 的映射和 UI 诊断 |
| EV-W5-181 | W5-020/W5-030/W5-040/W5-180 | 命令 | `npm run smoke:node``npm run build && npm run smoke` | 通过,完整 Node、静态构建、浏览器 gmoccapy shell/dist smoke 均覆盖新增 HAL input/override 诊断和 Web 控件 |
| EV-W5-190 | W5-150/W5-190 | 命令 | `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs``node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs``bash ../tests/browser/verify_gmoccapy_shell_browser.sh` | 通过,验证 `GMOCAPY_HAL_PIN` 对 jog axis press/release、jog increment rising-edge、turtle jog、delete-message、warning-confirm pins 的映射和 UI 诊断 |
| EV-W5-191 | W5-020/W5-030/W5-040/W5-190 | 命令 | `npm run smoke:node``npm run build && npm run smoke` | 通过,完整 Node、静态构建、浏览器 gmoccapy shell/dist smoke 均覆盖新增 jog/message HAL pin 诊断和 Web 行为 |
## 命令记录
@@ -64,6 +72,231 @@ node ../tests/node/verify_gmoccapy_xyzab_gates.mjs && node ../tests/node/verify_
- `run_preconditions_machine_file_smoke=ok`
- `gmoccapy_shell_smoke=ok`
### 2026-06-26 R3
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_profile_boundary.mjs
```
结果:通过,输出:
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `profile_boundary_smoke=ok`
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke:node
```
结果:通过。
关键输出摘要:
- `linuxcnc_task_hal_runtime_smoke=ok`
- `profile_boundary_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `linear_unit_conversion_smoke=ok`
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run build && npm run smoke
```
结果:通过,输出:
- `gmoccapy_static_build=ok`
- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`
本轮新增浏览器断言:
- `data-gmoccapy-hal="tool-change"` 必须包含 `iocontrol-loopback`
- 同一诊断行必须包含 `manual GUI pins disconnected`
- 同一诊断行必须包含 `3 postgui unlinkp`
### 2026-06-26 R4
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs
```
结果:通过,输出:
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke:node
```
结果:通过。
关键输出摘要:
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `linear_unit_conversion_smoke=ok`
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run build && npm run smoke
```
结果:通过,输出:
- `gmoccapy_static_build=ok`
- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`
本轮新增 Node 断言:
- `gmoccapy.v-button.button-0..6` 对应 `tbtn_estop``tbtn_on``rbt_manual``rbt_mdi``rbt_auto``tbtn_user_tabs``tbtn_setup`
- `gmoccapy.h-button.button-0` 对应底部主页面 `btn_homing`Web dispatch 为 `HOME`
- `GMOCAPY_HARDWARE_BUTTON` 忽略 falling edgerising edge 复用现有 Web gate未映射或诊断-only pin 给出明确 operator message。
本轮新增浏览器断言:
- 侧边 `estop``power``mode-manual``mode-mdi``mode-auto``mode-jog` 按钮必须带有对应 `data-gmoccapy-hal-pin="gmoccapy.v-button.button-N"`
- 底部 `HOME` 按钮必须带有 `data-gmoccapy-hal-pin="gmoccapy.h-button.button-0"`
- `data-gmoccapy-hal="hard-buttons"` 必须包含 `7 right v-button pins``4 bottom h-button main refs``7 mapped Web buttons``rising-edge-only``insensitive ignored`
### 2026-06-27 R5
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs && bash ../tests/browser/verify_gmoccapy_shell_browser.sh
```
结果:通过,输出:
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `gmoccapy_shell_smoke=ok`
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke:node
```
结果:通过。
关键输出摘要:
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `linear_unit_conversion_smoke=ok`
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run build && npm run smoke
```
结果:通过,输出:
- `gmoccapy_static_build=ok`
- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`
本轮新增 Node 断言:
- `gmoccapy.ignore-limits` 设置 `gmoccapyGui.ignoreLimits`active 时记录 `command.override_limits()` 请求语义。
- `gmoccapy.optional-stop` 按源码 `_optional_blocks()` 交叉驱动 `optionalBlocks`/block delete`gmoccapy.blockdelete``_blockdelete()` 交叉驱动 `optionalStop`
- override counts 在 count-enable 为 false 时只同步 countscount-enable 为 true 时按 `gmoccapy_XYZAB.pref` 中 scale 调整 feed/rapid/spindle/jog velocity。
- direct-value 在 analog-enable 为 false 时忽略analog-enable 为 true 时按 0..1 比例映射滑块范围。
- reset pins 忽略 falling edgerising edge 将 feed/rapid/spindle override 复位到 100。
本轮新增浏览器断言:
- `data-gmoccapy-hal="operator-inputs"` 必须包含 `3 operator pins``optional-stop -> block delete``blockdelete -> optional stop`
- `data-gmoccapy-hal="override-inputs"` 必须包含 `4 override targets``counts require enable``direct-value requires analog-enable``reset rising-edge-only`
- Web override 面板的 feed/spindle 100% reset、ignore limits、block delete、optional stop 控件必须更新 store 状态和最后一次 HAL input DOM。
- 通过 `window.webRtcp5AxisSimulation.dispatch({ type: "GMOCAPY_HAL_PIN", ... })` 验证浏览器内 optional/blockdelete 交叉 pin 行为。
### 2026-06-27 R6
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs
```
结果:通过,输出:
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs
```
结果:通过,输出:
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
bash ../tests/browser/verify_gmoccapy_shell_browser.sh
```
结果:通过,输出:
- `gmoccapy_shell_smoke=ok`
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke:node
```
结果:通过。
关键输出摘要:
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `linear_unit_conversion_smoke=ok`
```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run build && npm run smoke
```
结果:通过,输出:
- `gmoccapy_static_build=ok`
- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`
本轮新增 Node 断言:
- `gmoccapy.jog.axis.jog-x/y/z/a/b-{plus,minus}` 共 10 个 axis jog pins 按 press/release 电平进入和退出 jog 状态。
- `gmoccapy.jog.jog-inc-0..5` 只响应 true/rising edge`jog-inc-0` 为连续点动,`jog-inc-5``1.2345 in` 映射为 31.3563 mm。
- `gmoccapy.jog.turtle-jog` 为 level-driven 状态。
- `gmoccapy.delete-message` falling edge 忽略true 时删除消息并清除 alert/error 语义。
- `gmoccapy.warning-confirm` 记录 active warning dialog 的 confirm pin level。
本轮新增浏览器断言:
- `data-gmoccapy-hal="jog-inputs"` 必须包含 `10 axis jog pins``6 jog-inc pins``press/release level``jog-inc rising-edge-only``jog-inc-0 continuous`
- `data-gmoccapy-hal="message-inputs"` 必须包含 `3 message pins``delete-message rising-edge-only``warning-confirm level-polled`
- 通过 `window.webRtcp5AxisSimulation.dispatch({ type: "GMOCAPY_HAL_PIN", ... })` 验证浏览器内 jog increment、axis jog press/release、turtle jog、delete-message 和 warning-confirm 状态。
## 页面/截图/report/job 记录
本轮未生成截图、PDF、job_id 或 report_id。浏览器验收由 headless Chromium smoke 脚本完成。

View File

@@ -40,3 +40,99 @@
- `app/src/state/linuxcnc-task-policy.js` 成为模式切换和执行动作的统一互锁入口。
- `app/src/ui/gmoccapy-shell.js` 侧边模式按钮使用同一 gate 输出 disabled、`data-command-ready``aria-disabled`
- Node 和浏览器测试增加下电、未回零、已回零三个阶段的断言。
## DR-W5-003XYZAB 换刀按 POSTGUI iocontrol 回环建模,不实现手动换刀弹窗
日期2026-06-26
决策:
- `gmoccapy-xyzab` profile 和 `gmoccapyHalModel` 将 M6/M61 换刀执行路径标记为 `iocontrol-loopback`
- `manualGmoccapyPinsConnected = false`,用于说明 `gmoccapy.toolchange-change``gmoccapy.toolchange-changed``gmoccapy.toolchange-number` 在该配置中没有作为活动 HAL net 接入。
- UI 只显示换刀 HAL 诊断,不弹出 gmoccapy 手动换刀确认流程。
原因:
- `gmoccapy_postgui.hal` 在 GUI HAL pins 创建后执行 `unlinkp iocontrol.0.tool-change``unlinkp iocontrol.0.tool-changed``unlinkp iocontrol.0.tool-prep-number`
- 同一文件里连接 `gmoccapy.toolchange-*` 的手动换刀 nets 保持注释状态。
- 活动换刀完成路径是 `net tool-change-loop iocontrol.0.tool-change => iocontrol.0.tool-changed`,与 `core_sim_XYZAB.hal` 的仿真换刀回环语义一致。
影响:
- HAL/profile 诊断现在能区分“存在 gmoccapy toolchange pins”与“此配置没有把这些 pins 接入手动换刀流程”。
- `verify_gmoccapy_hal_model.mjs``verify_gmoccapy_xyzab_profile.mjs``verify_profile_boundary.mjs` 和浏览器 smoke 均覆盖该换刀语义。
## DR-W5-004外部 HAL hard-button pin 使用显式映射,不依赖 Web DOM 顺序
日期2026-06-26
决策:
- Web 侧将 `gmoccapy.h-button.*``gmoccapy.v-button.*` 建模为显式 pin 到 Web action/selector 的映射。
- `GMOCAPY_HARDWARE_BUTTON` action 只模拟 rising edgefalling edge 忽略;可执行 pin 复用原有 Web action 和 `linuxcnc-task-policy` gate。
- Web DOM 使用 `data-gmoccapy-hal-pin``data-gmoccapy-native-panel``data-gmoccapy-native-button-index` 标记原生 hard-button 对应关系,而不是依赖当前页面按钮的 DOM 顺序。
- 未实现的 native 页面按钮,如 `tbtn_setup``btn_touch``btn_tool``tbtn_switch_mode`,只保留诊断映射,不伪装成已实现控制。
原因:
- LinuxCNC `gmoccapy.py``_button_pin_changed()` 只响应 pin 为 true 的 rising edge。
- `_get_child_button()` 按当前 notebook 页或 `vbtb_main` 的可见非 label 子控件位置查找按钮,并在目标不敏感时忽略。
- `gmoccapy.glade``vbtb_main` 的原生顺序是 `tbtn_estop``tbtn_on``rbt_manual``rbt_mdi``rbt_auto``tbtn_user_tabs``tbtn_setup`Web shell 右侧还包含 reset/TCP 等非原生布局控件,直接用 DOM 顺序会误表达 native 语义。
影响:
- `gmoccapy-xyzab` panel schema 修正 Estop/Power/Manual/MDI/Auto 的 `v-button` pin 顺序。
- HAL model、communication model、store、UI DOM 和浏览器 smoke 都能追踪 hard-button pin 到 Web action/gate 的行为。
- 未完成的 optional-stop、blockdelete、ignore-limits 等 pin 仍作为后续独立任务处理。
## DR-W5-005HAL input pin 按 gmoccapy 回调语义建模,不按名称直连
日期2026-06-27
决策:
- Web 侧新增 `GMOCAPY_HAL_PIN` action用于模拟外部 HAL 输入 pin 对 gmoccapy GUI 状态和命令的影响。
- `gmoccapy.ignore-limits` 设置 `chk_ignore_limits` 等效状态active 时记录 `command.override_limits()` 请求语义。
- `gmoccapy.optional-stop` 不直连 optional stop而是按源码 `_optional_blocks()` 驱动 `tbtn_optional_blocks`,也就是 block delete。
- `gmoccapy.blockdelete` 不直连 block delete而是按源码 `_blockdelete()` 调用 `command.set_optional_stop()`
- override counts 只有对应 `*.count-enable` 为 true 时才调整滑块;否则只同步 counts 基线。
- override direct-value 只有对应 `*.analog-enable` 为 true 时才接管滑块reset pins 只响应 true/rising edge。
原因:
- `gmoccapy.py``optional-stop` pin 连接 `_optional_blocks()`,该回调设置 `tbtn_optional_blocks`,随后 `on_tbtn_optional_blocks_toggled()` 调用 `command.set_block_delete()`
- `gmoccapy.py``blockdelete` pin 连接 `_blockdelete()`,该回调调用 `command.set_optional_stop()`
- `_on_counts_changed()``_on_analog_value_changed()``_reset_override()` 明确要求 enable/rising-edge 条件;`gmoccapy_XYZAB.pref` 给出本配置默认 scalefeed/rapid/spindle 为 1jog velocity 为 140.4。
- 如果按 pin 名称直接连同名 Web 状态,会掩盖 gmoccapy 原生回调的交叉行为和 enable 条件。
影响:
- `app/src/state/store.js` 新增 `gmoccapyGui` 状态与 `GMOCAPY_HAL_PIN` 分发。
- `gmoccapyHalModel``gmoccapyCommunicationModel` 现在显式记录 operator input pins、override pins、enable 规则和 reset 规则。
- UI override 面板提供 ignore limits、block delete、optional stop 和 100% reset 控件,诊断区显示 operator input 与 override input 语义。
- Node 和浏览器 smoke 均覆盖 HAL input/override 语义,防止后续把交叉 pin 改成同名直连。
## DR-W5-006jog 与消息 HAL pin 按 gmoccapy 回调边界建模
日期2026-06-27
决策:
- `gmoccapy.jog.axis.jog-*-plus/minus` 作为按下/释放电平输入处理pin true 触发 jog pressedpin false 触发 jog released。
- `gmoccapy.jog.jog-inc-N` 只响应 true/rising edge`jog-inc-0` 表示 continuous jog`jog-inc-1..5` 映射 `gmoccapy_XYZAB.ini``[DISPLAY] INCREMENTS`
- `gmoccapy.jog.turtle-jog` 作为 level-driven 状态记录,不伪装成 Web 普通倍率按钮。
- `gmoccapy.delete-message` 只在 true 时执行删除消息语义falling edge 忽略。
- `gmoccapy.warning-confirm` 作为 warning dialog 轮询确认 pin 记录 level不强行制造不存在的 Web modal 流程。
原因:
- `gmoccapy.py``_on_pin_jog_changed()` 明确在 pin true 时调用 `_on_btn_jog_pressed()`,在 pin false 时调用 `_on_btn_jog_released()`;这与 hard-button 的 rising-edge-only 语义不同。
- `_on_pin_incr_changed()``not pin.get()` 直接 return因此 jog increment pin 只响应 true`_make_jog_increments()` 会把 continuous 的 `rbt_0` 放在第一位,`get_increments()` 再把 INI 的 5 个增量值追加到后面。
- `_del_message_changed()` 只在 pin true 时删除 alert 或最后一条 notification`dialogs.warning_dialog()` 每 100ms 轮询 `warning-confirm` pin 来接受活动 warning dialog。
- 如果把这些 pin 当作普通 Web click 或同名状态直连,会混淆 gmoccapy 源码中 “硬按钮”、“jog pin”、“message pin” 三类不同输入边界。
影响:
- `GMOCAPY_HAL_PIN` 现在覆盖 jog axis press/release、jog increment selection、turtle jog、delete-message 和 warning-confirm。
- HAL model 和 communication model 现在能分别呈现 hard-button、operator/override input、jog input、message input 的不同语义。
- UI 诊断增加 `HAL jog``HAL messages`,浏览器 smoke 通过 DOM 和公开 dispatch 验证这些语义。