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