docs: 新增 CHANGELOG, 记录 2026-09-05 三项变更

app 窗口租约(关窗自动停从站)、首页 GD32 CPU 负载率指标、PDO 周期
缓存迁移与测试对齐; 面向使用者的视角, 实现细节指向 README 与提交。
This commit is contained in:
cbb
2026-09-05 19:58:50 +08:00
parent 12879aa81a
commit 43d42ad891
+49
View File
@@ -0,0 +1,49 @@
# 更新日志 (CHANGELOG)
按日期倒序记录面向使用者的变更;实现细节见 README 对应章节与提交说明。
## 2026-09-05
### 新增:app 窗口租约 —— 关掉 app 必停从站
- 每个 app 页面与本地页面服务器保持一条 WebSocket(`js/common/app-lease.js` →
`GET /ws/app-lease`);**最后一条**租约断开(所有 app 窗口关闭)后,服务端
等 3s 宽限自动调后端 `/api/op/stop`:停 PDO 循环、从站退回 INIT。
覆盖两种 native `--parent-pid` 看门狗够不着的离开方式:浏览器模式关窗后
服务还活着、窗口模式复用现成 ecat_native 实例。
- 断开感知靠 TCP FIN / Close 帧回显而非心跳计时器,后台标签页定时器节流
不会误停;3s 宽限吸收 F5 刷新的断连→重连;外壳内切标签不停(外壳自己
持有租约);只停"本服务经代理确认跑过"的循环,ecat 控制台(:8090)
手工起的循环不受影响;服务进程退出路径(`/api/shutdown`、Ctrl+C)同步补停。
- 接入点:`tabs.html`(外壳)与 `pages/motor.html`(单独打开电机页)。
- 新增自测:`python scripts/test_app_lease.py`(服务端逻辑,裸 TCP 全路径)
+ `node scripts/test_app_lease_e2e.mjs`(真 Edge headless + 假后端 8091,
不碰真总线)。
- 代价说明:每次重开 app 都要重走 PREOP→SAFEOP→OP,有概率撞 SSC 邮箱楔死
——这是"关闭必须停"这个要求本身的代价。设计细节见 README"关掉 app 必停
从站"一节。
### 新增:首页运行指标卡显示 GD32 CPU 负载率
- 新指标 `GD32 负载`(`#mGd32Load`):DCU_APP 固件 ≥ 1.5.61 把"中断 +
非延迟处理段"占用率写进 EtherCAT 输入 PDO 段 5(1s 滚动窗口,0.1%
分辨率),前端经 `/ecat/api/app/load` 轮询显示(`js/ota/ecat_load.js`)。
- 与 `/system/status` 轮询完全独立:ESP32 离线互不影响;失败静默退避
(1s→5s→30s),不触发页面服务器的自动拉起刷屏;≥85% 琥珀色提示。
- 无效语义(显示 `--`):ECAT 总线未打开 / 循环未跑 / 固件 < 1.5.61 /
负载值超 3s 未滚动(PDO 循环已停)。
### 变更:PDO 周期缓存一次性迁移,恢复默认改为"跟随后端"
- 存量 localStorage `dcu_ecat_period_ms=4`(Python 时代默认,检查脚本
收尾也会写入)会在下次启动时自动清除一次(迁移标记
`dcu_ecat_period_mig`),避免把 native 已调小的总线默认周期压回 4ms;
迁移后用户显式设 4 会被原样保留。
- `setPdoPeriod` 的"恢复默认"从 `setPdoPeriod(4)` 改为删除该键、跟随后端
默认(固件修好前别低于 1ms)。
### 修复:电机传输测试对齐生产代码的 `pcore_mask`
- 自旋节拍钉核显示此前已由"钉 E 核"改为"钉 P 核"并改用快照字段
`pcore_mask`,`scripts/test_motor_transport.mjs` 仍是旧字段与旧措辞,
本次对齐(含跨 32 位掩码、不连续核号区间等用例)。