Files
DCU_DesktopController/CHANGELOG.md
T
cbb 43d42ad891 docs: 新增 CHANGELOG, 记录 2026-09-05 三项变更
app 窗口租约(关窗自动停从站)、首页 GD32 CPU 负载率指标、PDO 周期
缓存迁移与测试对齐; 面向使用者的视角, 实现细节指向 README 与提交。
2026-09-05 19:58:50 +08:00

3.0 KiB
Raw Blame History

更新日志 (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 位掩码、不连续核号区间等用例)。