fix(V4B): V4.36.43 — 修正 V4.36.42 引入的离开变慢 (G3 计时器递减位置错误)

用户反馈: 烧 V4.36.42 后离开 3、4 秒才释放。

定位(46µH/113kHz 日志): 4 次离开全是 Car_OFF(band_timeout), 延迟 3.5~4.7s; RLN 正常
(有车态 = Origin−41, 说明 G1 生效、100ms 自激已消失) ⇒ 问题出在"正常释放路径被挡住"。

根因: G3 的 g_rel_hold_tick-- 误放 if(!loop1_VD_FLAG) 无车分支(原 :1308) ⇒ 有车期间永不递减
⇒ 首次 Car_In 后常驻 30 ⇒ g_rel_hold_tick==0 永假 ⇒ 正常释放被永久挡住, 只能等 2.5s 环带兜底
+ 平滑值抬升 ⇒ 3.5~4.7s。

修复: 倒计时移到 } else { 有车分支顶部 (TaskLoop.c:1531 后、#if USE_FLATNESS_EXIT 之前,
每 tick 必过且在释放判定之前); 误放旧行改注释留痕。REL_MIN_HOLD_TICKS 仍 30(300ms)。

单测: 8/8 全绿(场景 7 语义不变); 新增"镜像能力边界"警告 —— 镜像只验证算法语义, 验证不了固件内
执行路径/放置位置, 此类问题必须靠日志 Car_OFF 原因字段(band_timeout/FLAT/普通)暴露。
文档: devlog V2.80(+条目) / spec 头 V2.62 / manual 表 V2.19 / cmcng.h 4.36.42→4.36.43 REV 43
/ 分析稿 §13 返工记录。
待现场: 离开延迟回到 ~300ms 内; 缓慢接近/停边界仍不跳。
This commit is contained in:
wangfq
2026-09-11 17:06:05 +08:00
parent 0f8a0d6fbd
commit 6c82bf61b8
7 changed files with 50 additions and 5 deletions
+2 -2
View File
@@ -14,11 +14,11 @@
#define __CMCNG_H__
#define PRODUCT_MODEL "DLD154"
#define FIRMWARE_VER "4.36.42" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
#define FIRMWARE_VER "4.36.43" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
#define HARDWARE_VER "3.00"
#define FIRMWARE_VER_MAIN 4
#define FIRMWARE_VER_SUB 36
#define FIRMWARE_VER_REV 42
#define FIRMWARE_VER_REV 43
#define HARDWARE_VER_MAIN 3
#define HARDWARE_VER_SUB 0
@@ -1305,7 +1305,7 @@ void vd1_task(void)
g_origin_freeze_tick--;
else if (g_origin_lowlearn_tick > 0) /* V4.36.32: 冻结结束 → 降权期开始递减 */
g_origin_lowlearn_tick--;
if (g_rel_hold_tick > 0) g_rel_hold_tick--; /* V4.36.42(G3): 有车最小保持倒计时 */
/* V4.36.43: G3 倒计时已移至"有车"分支 (原误放此处=无车分支 ⇒ 有车期间永不递减) */
/*--- 基线跟踪(仿 TLD-110:有车时冻结)
* V4.20 修复: 双向对称保护 — 负偏差(负variation)也冻结基线
@@ -1529,6 +1529,10 @@ void vd1_task(void)
if (loop1_entry_cnt > 0) loop1_entry_cnt = 0; // 离开阈值区域则重置确认计数
}
} else {
/* V4.36.43(G3 修正): 最小保持必须每 tick 递减 —— V4.36.42 把它误放在"无车"分支内(原 :1308),
* 有车期间永不递减 ⇒ 首次进入后 g_rel_hold_tick 常驻 ⇒ 正常释放被永久挡住, 只能靠 band_timeout
* 兜底 (现场日志 2026-09-11 17:02: 4 次 Car_OFF 全是 band_timeout, 离开延迟 3.5~4.7s) */
if (g_rel_hold_tick > 0) g_rel_hold_tick--;
#if USE_FLATNESS_EXIT
/*================================================================
* 有车状态 — 平坦性判定离开(专利 CN200910309382