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
+23
View File
@@ -4,6 +4,28 @@
---
## 2026-09-11 — 修正 V4.36.42 引入的离开变慢(G3 最小保持计时器递减位置错误)(固件 V4.36.43)
用户反馈(烧 V4.36.42 后):**现在反应好慢,离开 3、4 秒了才释放**。
**日志定位**46µH/113kHz):离开**全部**是 `Car_OFF(band_timeout)`(环带兜底),延迟 3.5~4.7s`RLN` 正常(有车态 = `Origin41` ⇒ G1 生效、100ms 自激已消失 ✓),但正常释放路径从未命中。
**根因(实现错误)**G3 的倒计时 `g_rel_hold_tick--` 被放进了 **`if (!loop1_VD_FLAG)`(无车)分支**内 ⇒ **有车期间永不递减** ⇒ 首次 `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` 仍为 30300ms)。
**单测**:8/8 全绿(场景 7 语义不变)。⚠ **教训**:镜像单测只验证**算法语义**,验证不了**固件内的执行路径/放置位置** —— 本类问题只能靠日志里的 `Car_OFF` **原因字段**`band_timeout` / `FLAT` / 普通)揪出。
**现场验证(待填)**
- [ ] 离开延迟恢复到 ~300ms 以内(不再常态出现 `Car_OFF(band_timeout)`
- [ ] 缓慢接近/停在边界仍不跳(G1 目标不受影响)
- [ ] 日志片段粘贴区:
```
(待填:Car_OFF, … 行,确认不再是 band_timeout
```
语法:待 MRS 编译确认(本机无 AT32 工具链);单测 8/8 全绿;REV 4.36.43spec V2.62 / devlog V2.80。
## 2026-09-11 — 低Q 临界悬停自激根治:进/出判定参考统一 + 释放带夹紧 + 最小保持(固件 V4.36.42
用户反馈:拿金属板**缓慢接近**的时候,判据**乱跳**;随后用 **35µH**128kHz)、**46µH**112kHz)线圈复测,同样现象。
@@ -2235,6 +2257,7 @@ if (dev >= dlt_ORG × 4) {
| 版本 | 时间 | 说明 |
|------|------|------|
| V2.80 | 2026-09-11 | V4.36.43 修正 V4.36.42 的 G3 放置错误: g_rel_hold_tick-- 原在"无车"分支内 ⇒ 有车期间不递减 ⇒ 正常释放被永久挡住只能 band_timeout(离开延迟 3.5~4.7s); 移到"有车"分支顶部 |
| V2.79 | 2026-09-11 | V4.36.42 低Q 临界悬停自激根治: vac_ref() 门控改用状态无关进表 dlt(G1) + 低Q 释放带夹紧守卫(G2, 不动 180) + 有车 300ms 最小保持(G3); 22µH/35µH 现场自激(100ms 周期)修后 300/300→1/0; 新增"非低Q不跳"判别用例 |
| V2.78 | 2026-09-11 | V4.36.41 环境重校准后触发高度变低根治: 新增 origin_set_atomic() 同步真空 EMA(3 处写入点; 维持 OriginEMA ≤1×dlt 不变式) + EMA 余数累加消 ±127 counts 整数死区; 新增镜像单测 test_vac_ref_reanchor 5 场景全绿 |
| V2.77 | 2026-09-08 | 注释同步: TaskLoop.c/h + tests 全部 疾闪 → 一长两短 (V4.36.38 现役描述, 历史版本行保留变更记录) |
+12
View File
@@ -192,6 +192,18 @@ EMA 更新窗 = 无车 + `dev ∈ ±4×dlt``1302-1326`)。把板拿到感
**G3 权衡(现场可选调)**:300ms 最小保持会让**真实车辆离开时的释放**最多晚 300ms(对存在型/流量计数无影响;若做速度估计或需要更快的释放沿,可把 `REL_MIN_HOLD_TICKS` 降到 10=100ms)。
## 13. 返工记录:V4.36.42 的 G3 放置错误(V4.36.43 修正)
现象:烧 V4.36.42 后**离开 3、4 秒才释放**;日志 4 次 `Car_OFF` **全是 `band_timeout`**(环带兜底),延迟 3.5~4.7s`RLN` 正常(有车态 = `Origin41`)⇒ G1 目标达成(100ms 自激消失),但正常释放从未命中。
根因:`g_rel_hold_tick--` 被放进 **`if (!loop1_VD_FLAG)`(无车)分支**(原 `:1308`)⇒ 有车期间永不递减 ⇒ 首次 `Car_In` 后常驻 30 ⇒ `g_rel_hold_tick == 0` 永假 ⇒ 正常释放被永久挡住。
修正:移到 **`} else {`(有车)分支顶部**`:1531` 后、`#if USE_FLATNESS_EXIT` 之前,每 tick 必过且在释放判定之前)。
**教训(已同步进单测注释与 skill)**
1. 镜像单测只验证**算法语义**,**验证不了固件内执行路径/位置**(计数器在哪个分支递减、是否每 tick 必过)⇒ 这类错误必须靠**日志的原因字段**(`Car_OFF(band_timeout)` / `Car_OFF_FLAT` / 普通)暴露。
2. 凡是"进入后 N 秒/N tick 生效"的守卫,实现后**先查递减调用点是否在每 tick 必经路径上**,再上板。
## 附:相关历史(devlog
| 版本 | 内容 |
+2 -1
View File
@@ -1,6 +1,6 @@
# DLD154V4B 产品手册
> 单路线圈车辆检测器 | 型号: DLD154V4B | 版本: V2.18
> 单路线圈车辆检测器 | 型号: DLD154V4B | 版本: V2.19
> 适用于停车场、收费站、交通卡口等场景的车辆到达/离开检测
---
@@ -281,6 +281,7 @@ SW_5 = ON 时:车辆(金属)持续压线超过 **4 分钟**LC_HOLD_TIME
| V2.14 | 2026-09-08 | 电感分级降级(固件 V4.36.37 方案A):f>156k 拆分——156~171k 可用级(恒判车)、f>171k 短路级快闪200ms(宏=1 等同断开);真短路阈 20µH |
| V2.15 | 2026-09-08 | 可用级黄灯改**一长两短**(固件 V4.36.38):900/300/100/300/100/700ms 循环,与一长一短(出窗)/快闪(断开)区分 |
| V2.16 | 2026-09-08 | 短路级宏默认=1(固件 V4.36.39,用户拍板):L<20µH 出厂即等同断开;=0 可关恢复仅指示 |
| V2.19 | 2026-09-11 | **修正 V4.36.42 的离开延迟**(固件 V4.36.43):上一版在"进入后最小保持"期内因计时位置错误挡住了正常离开判定,导致离开需等环带兜底(实测 3.5~4.7s);本版恢复正常(最小保持仍 300ms) |
| V2.18 | 2026-09-11 | **边界悬停不再反复跳变**(固件 V4.36.42):金属板缓慢接近、或车辆停在环线边缘时,此前会出现"有车/无车"以约 100ms 周期连续反复(流量计数会重复计数);本版进入/离开判定改用同一参考,并增加进入后 300ms 最小保持(离开判别最多晚 300ms) |
| V2.17 | 2026-09-11 | **环境重校准后灵敏度恢复**(固件 V4.36.41):黄灯常亮故障补偿结束后,进入判定参考与基准同步;此前会残留"旧真空参考" ⇒ 金属板进入触发高度偏低、需断电重启才恢复 |
+2 -1
View File
@@ -1,6 +1,6 @@
# DLD154V4B 技术规格书
> 单路线圈车辆检测器 | 固件版本: V4.36.42 | 文档版本: V2.61
> 单路线圈车辆检测器 | 固件版本: V4.36.43 | 文档版本: V2.62
> 本文档面向工程开发、系统集成及故障深度分析
---
@@ -863,5 +863,6 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的
| V2.57 | 2026-09-08 | V4.36.39: COIL_UNDER_MIN_AS_OPEN 默认值 0→1 (用户拍板) —— L<20µH 短路级出厂即等同断开(判车停+继电器释放+绿灯灭) |
| V2.58 | 2026-09-08 | V4.36.40 热切换修复: recover 恢复判定改 TMR3 实时 Xn(240000/Xn) —— 原 calc_freq_khz(冻结Origin,LPCNT) 永不回窗致换线圈死锁; 恢复后自然走重连+判稳重建 Origin |
| V2.59 | 2026-09-08 | 注释同步: 代码/测试全部 疾闪 → 一长两短 (V2.55~58 历史版本行保留当时变更记录) |
| V2.62 | 2026-09-11 | **V4.36.43 修正 V4.36.42 引入的离开变慢**G3 最小保持计时器 `g_rel_hold_tick--` 误置于无车分支 ⇒ 有车期间不递减 ⇒ 释放判定恒被挡住,只能靠 band_timeout 兜底(现场实测离开延迟 3.5~4.7s)⇒ 移到有车分支顶部每 tick 递减 |
| V2.61 | 2026-09-11 | **V4.36.42 低Q 临界悬停自激根治**`vac_ref()` 门控原先用会随状态切换的 `loop1_dlt_ORG`(无车=进表 49 / 有车=释表 23)⇒ 进门瞬间参考由 Origin 阶跃到 EMA,与低Q ×1.8 释放带叠加成**反向滞回** ⇒ 深度 1.0~1.8×dlt 的静止凹脉冲自激(100ms 周期)。新增 `vac_gate_dlt()`(G1) 统一参考 + 低Q 释放带夹紧(G2) + 有车 300ms 最小保持(G3)22µH/35µH 现场实测 300/300 → 1/0 |
| V2.60 | 2026-09-11 | **V4.36.41 环境重校准后触发高度变低根治**:进入判定用 `vac_ref()=min(Origin,真空EMA)`,环境重校准路径未同步该参考 ⇒ 新增 `origin_set_atomic()`(3 处 Origin 写入点;维持 OriginEMA ≤1×dlt 不变式)+ EMA 余数累加消 ±127 counts 整数死区;新增镜像单测 test_vac_ref_reanchor5 场景) |
+4
View File
@@ -158,6 +158,10 @@ static void test_chatter(void)
}
/* ================= 场景 7: 低Q 临界悬停自激(现场日志 154log260911a 复现)=================
* : ****, **/**
* V4.36.42 G3 : g_rel_hold_tick-- "无车" ,
* band_timeout( 3.5~4.7s) Car_OFF
* "进入后 N tick 生效", tick
* : Origin=129254 dlt=49 dlt=23 TEMA129220 CAPVD129204( 50)
* (V4.36.41): dlt_ORG 23 vac_ref() 49 23 (34)
* Origin EMA 线 EMA-41=129179 线 Origin-49=129205
+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