feat(V4B): V4.24 — 环境重校准:永久环境变化自动恢复基线(金属板A拿走场景)

现场(2026-09-02实测): 线圈旁金属板A上电把Origin学低(128096),A拿走CAPVD弹回
真空场(128856) dev=+761(0.59%),被36321a1双向保护"dev>0永不更新"永久冻结
→ B触发需809cnt(正常54cnt) 灵敏度假性降低且不恢复(V4.20分钟级可自愈)

修复: dev>+4dlt高位两段式受控重校准
  ① 60s(ENV_RESYNC_WAIT)高位连续未回摆 → 判定永久环境变化(瞬态铁块类不污染)
  ② 学习基线B: 连续空闲窗200tick均值 + settle判稳(连续2窗漂移≤0.1%)
  ③ 空闲原子替换Origin, 清freeze/ORG/entry残留, slow snap, 黄灯恢复
- 学习期打断(回窗/dev<0/断线重连)→重算; 30s预算超时放弃保留旧Origin
- 黄灯模式4: 环境学习中常亮(优先级: 断开快闪>学习常亮>N短闪>灭)
- tests/test_env_resync.c 5场景ALL PASS(恢复66s/瞬态不学/打断重算/放弃/不震荡)
- docs: devlog V2.22 + spec V2.3 + 产品手册 V2.7 同步
This commit is contained in:
wangfq
2026-09-02 18:10:28 +08:00
parent cd0fd90770
commit 672f143e99
6 changed files with 477 additions and 8 deletions
+52 -1
View File
@@ -4,6 +4,57 @@
---
## 2026-09-02 — 环境重校准:现场永久环境变化自动恢复基线(固件 V4.24)
> **固件版本:V4.24**cmcng.hFIRMWARE_VER="4.24" + MAIN=4/SUB=24)。devlog 修订 V2.22。
### 现场现象(V4.22 实测复现,DBG/EVT 串口日志)
线圈旁金属板 A 上电 → 稳定后 Origin 学低;A 拿走 → CAPVD 弹回真空场,
相对 Origin 恒高 dev=+761 cnt0.59% Origin,实测 CAPVD 128096→128856),
被 V4.20 双向保护(36321a1"dev>0 永不更新"永久冻结 → Origin 卡 128095 →
再拿金属板 B 测试需下跌 ~809 cnt(正常 54 cnt)才触发 → 触发高度明显降低、不恢复。
- V4.20(双向保护前,278d470):dev>0 走正常窗口平均 → 数分钟缓慢恢复(现场"等一段时间能恢复")
- V4.22(含双向保护):dev>0 只冻结、永不更新 → 永久不恢复
### 根因
36321a1 为防"铁块靠近污染 Origin → 离开假进入锁死",把 dev>+4×dlt 高位的
"无车环境异常"一律永久冻结。但"铁块靠近(瞬态,秒级回摆)"与"永久环境变化
(基准被学低,如 A 拿走)"数值不可分,仅**时间维度**可分——永久冻结把后者也卡死。
### 修复(V4.24 两段式受控重校准)
| 阶段 | 条件 | 动作 |
|------|------|------|
| ① 冻结等待 | dev>+4×dlt 高位连续 60 sENV_RESYNC_WAIT=6000 tick)未回摆 | 保持双向保护冻结语义(<60 s 瞬态不污染) |
| ② 学习基线 B | 连续空闲窗(ENV_LEARN_WINDOW=200 tick)均值 + settle 判稳(连续 2 窗漂移 ≤0.1%) | **黄灯常亮**指示学习过程 |
| ③ 原子替换 | B 可信且空闲 | Origin=B;清 freeze/ORG/entry 残留;slow snap(同 V4.04);黄灯恢复 |
- 学习期任何打断(CAPVD 回窗、dev<0 目标靠近、线圈断开重连)→ 重算重来
- 学习预算 ENV_LEARN_MAX_TICKS=300030 s)超时放弃,保留旧 Origin——宁可灵敏度低不冒险污染
- 替换瞬间 B≈当前空闲 CAPVD → dev≈0 无跳变,不会误触发继电器
- 黄灯优先级:断开快闪 > 学习常亮 > N 短闪(断开史)> 灭
### 验证
- `tests/test_env_resync.c`(新增):5 场景 ALL PASS
1. 永久变化(常量高位)→ 6600 tick~66 s)自动替换 Origin 128095→128856
2. 瞬态高位 60 s 内回摆 → 不学习不替换
3. 学习期打断 → abort 重算 → 最终恢复
4. 学习期窗口不稳 → 30 s 预算放弃,Origin 不被污染
5. 替换后 dev≈0 → 无重复学习不震荡
- gcc `-fsyntax-only` TaskLoop.c 0 error
### 权衡(待现场验证)
- 铁块静止 60 s+ 也会被学入 → 靠等待时长 + 黄灯常亮提示(操作员看到黄灯别移走目标)
- 恢复总时长 ≈66 s(V4.20 分钟级),A 拿走场景现场复测确认手感
- ENV_RESYNC_WAIT / ENV_LEARN_MAX_TICKS 为编译期宏,现场可调
---
## 2026-09-02 — 红灯呼吸对齐 vd960Loop + 上电自检基准判稳(固件 V4.23)
> **固件版本:V4.23**cmcng.hFIRMWARE_VER="4.23" + MAIN=4/SUB=23)。devlog 修订 V2.21。
@@ -983,7 +1034,7 @@ if (dev >= dlt_ORG × 4) {
| 版本 | 时间 | 说明 |
|------|------|------|
| V2.21 | 2026-09-02 | V4.23 红灯呼吸对齐 vd960Loop(周期≈2.6s);上电自检基准判稳:窗口 Origin 漂移 ≤0.1%×连续 2 窗 + 5s 兜底 |
| V2.22 | 2026-09-02 | V4.24 环境重校准:dev>+4dlt 高位连续 60s 触发受控学习(黄灯常亮),连续空闲窗均值+判稳后原子替换 Origin,恢复金属板A拿走类永久环境变化;打断重算 + 30s 预算兜底 |
| V2.20 | 2026-09-02 | V4.22 DEBUG 改编译器 -DDEBUG 控制(cmcng.h DEBUG_ENABLE 删除) |
| V2.19 | 2026-09-02 | V4.20 负variation铁块锁死修复:基线跟踪双向对称保护(±4×dlt 对称窗口) |
| V2.18 | 2026-09-02 | V4.20 Debug 串口打印重组:频率/采样/基准全量输出(DBG/EVT 前缀) |