fix(V4B): V4.36.34 — EMA 钳位自愈 + SUM/ADR 诊断 (35uH VEM 垃圾)

35uH 日志: VEM 垃圾 536M→846M→2224M 递增 (10:23:03 起)
连锁: vac_ref=垃圾 → RLN=-2070862722 → RSM 永不够 → 卡死
      触发判定 vac_ref-dlt 巨大 → CAPVD=真空值假 Car_In
分析: EMA 公式限幅不可能跳5亿; 写点全正常 → 越界写, 写源未定
防御: EMA 每步限 ±3×dlt; 与 Origin 偏差>25% 自愈回 Origin
诊断: DBG 加 SUM(ORG_SUM 对照); 每 10s ADR 打 4 变量地址
语法0 error, 4测试全绿; spec V2.51 / devlog V2.69
This commit is contained in:
wangfq
2026-09-08 10:32:43 +08:00
parent da2fc83afb
commit 76177fd086
4 changed files with 40 additions and 9 deletions
+15
View File
@@ -4,6 +4,20 @@
--- ---
## 2026-09-08 — EMA 内存污染:VEM 垃圾实锤 + 钳位自愈防御(固件 V4.36.34)
35µH 日志(35uH 释放不了)VEM 字段垃圾 536259907→846958055→2224104615(显示负) 递增, 10:23:03 起持续。
**连锁破坏**: vac_ref()=垃圾 EMA → 释放线 RLN=-2070862722 → RSM 永不够 → 卡死; 且触发判定 vac_ref-dlt 巨大 → 10:23:06 CAPVD 130841(真空值) 假 Car_In。
**分析**:EMA 公式限幅(±差/128)不可能一步跳 5 亿; 写点仅 INIT/判稳/EMA 更新全正常 → 别处越界写。垃圾值 ≈CAPVD×N(N 随无车时长增、卡死即停) 具 ORG_SUM 语义但数值不匹配; 拼接/计数器规律不成立 → 写源未定。
**V4.36.34 三重**
1. 防御: EMA 每步限 ±3×dlt(防 CAPVD 毛刺拖带); 与 Origin 偏差 >25% 视为污染自愈回 Origin
2. 诊断: DBG 加 SUM=loop1_ORG_SUM 对照 (VEM 与 SUM 同帧可判是否地址重叠); 每 10s ADR 行打印 &VEM/&ORGSUM/&Origin/&RSM
3. 机理确认: 卡死由 EMA 垃圾连锁 (释放线垃圾+假触发), 非释放逻辑本身
语法 0 error、4 测试全绿;REV 4.36.34spec V2.51 / devlog V2.69。
## 2026-09-04 — vac_ref 重锚阈值:EMA 边缘污染修复(固件 V4.36.33) ## 2026-09-04 — vac_ref 重锚阈值:EMA 边缘污染修复(固件 V4.36.33)
V4.36.32 板测反馈:33µH 大幅好转(剩上电自检完首压偶发);23µH 仍可复现;**新问题(所有线圈):金属板间隔几秒再压,触发高度下降一半甚至更多,多试几轮恢复**。 V4.36.32 板测反馈:33µH 大幅好转(剩上电自检完首压偶发);23µH 仍可复现;**新问题(所有线圈):金属板间隔几秒再压,触发高度下降一半甚至更多,多试几轮恢复**。
@@ -2112,6 +2126,7 @@ if (dev >= dlt_ORG × 4) {
| 版本 | 时间 | 说明 | | 版本 | 时间 | 说明 |
|------|------|------| |------|------|------|
| V2.69 | 2026-09-08 | V4.36.34 EMA 钳位自愈+SUM/ADR 诊断: 35µH VEM 垃圾实锤(写源待定) |
| V2.68 | 2026-09-04 | V4.36.33 vac_ref 重锚阈值(OriginEMA>1×dlt 才锚 EMA): 修边缘悬停拉低 EMA 触发高度漂移 | | V2.68 | 2026-09-04 | V4.36.33 vac_ref 重锚阈值(OriginEMA>1×dlt 才锚 EMA): 修边缘悬停拉低 EMA 触发高度漂移 |
| V2.67 | 2026-09-04 | V4.36.32 释放后分级补偿(冻结1s+降权2s×1/5): 仿132T 慢采样防残余整窗拉低 Origin | | V2.67 | 2026-09-04 | V4.36.32 释放后分级补偿(冻结1s+降权2s×1/5): 仿132T 慢采样防残余整窗拉低 Origin |
| V2.66 | 2026-09-04 | V4.36.31 B3 真空 EMA 重锚: vac_ref=min(Origin,EMA) 判定参考解耦; A2 存档 | | V2.66 | 2026-09-04 | V4.36.31 B3 真空 EMA 重锚: vac_ref=min(Origin,EMA) 判定参考解耦; A2 存档 |
+2 -1
View File
@@ -1,6 +1,6 @@
# DLD154V4B 技术规格书 # DLD154V4B 技术规格书
> 单路线圈车辆检测器 | 固件版本: V4.36.33 | 文档版本: V2.50 > 单路线圈车辆检测器 | 固件版本: V4.36.34 | 文档版本: V2.51
> 本文档面向工程开发、系统集成及故障深度分析 > 本文档面向工程开发、系统集成及故障深度分析
--- ---
@@ -843,3 +843,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的
| V2.48 | 2026-09-04 | **V4.36.32 释放后分级补偿(仿 PD132T 慢采样)**:均值窗是满窗替换(500 样本/5s)——快采样 10ms 让窗装得快, 释放残余(板缓离低 CAPVD)易整窗拉低 Origin。分级:释放后全冻结 1s(REL_ORIGIN_FREEZE_TICKS 50→100) → 降权低速补偿 2s(ORIGIN_LOWLEARN_TICKS=200, 窗 500→2500=25s, 学习速率 1/5, ORIGIN_LOWLEARN_MULT=5) → 正常。全宏可调;EMA/判定零影响 | | V2.48 | 2026-09-04 | **V4.36.32 释放后分级补偿(仿 PD132T 慢采样)**:均值窗是满窗替换(500 样本/5s)——快采样 10ms 让窗装得快, 释放残余(板缓离低 CAPVD)易整窗拉低 Origin。分级:释放后全冻结 1s(REL_ORIGIN_FREEZE_TICKS 50→100) → 降权低速补偿 2s(ORIGIN_LOWLEARN_TICKS=200, 窗 500→2500=25s, 学习速率 1/5, ORIGIN_LOWLEARN_MULT=5) → 正常。全宏可调;EMA/判定零影响 |
| V2.49 | 2026-09-04 | 文档勘误:① 4.4.2 表"折算频率下降"列少乘 2(应 = dXn/Xn: 2.06/0.43/0.23/0.15%);② 补方向澄清——本表只管 CAPVD>Origin(L 升方向),车压 L 降方向冻结不在此表;③ 4.3.1 注 USE_PLANB_TABLE 双表 | | V2.49 | 2026-09-04 | 文档勘误:① 4.4.2 表"折算频率下降"列少乘 2(应 = dXn/Xn: 2.06/0.43/0.23/0.15%);② 补方向澄清——本表只管 CAPVD>Origin(L 升方向),车压 L 降方向冻结不在此表;③ 4.3.1 注 USE_PLANB_TABLE 双表 |
| V2.50 | 2026-09-04 | **V4.36.33 vac_ref 重锚阈值 VAC_REF_DELTA_DLT=1**:用户反馈触发高度漂移(间隔几秒再压变浅、多试几轮恢复)——EMA(α128 τ1.28s)+4×dlt 宽窗把金属板悬感应边缘(dev−20~−40)当真空快学 → vac_ref 被拉低 → 触发线漂移。修: 仅 OriginEMA>1×dlt(真锚错 J1 130 counts) 才重锚 EMA, 小偏差用 Origin | | V2.50 | 2026-09-04 | **V4.36.33 vac_ref 重锚阈值 VAC_REF_DELTA_DLT=1**:用户反馈触发高度漂移(间隔几秒再压变浅、多试几轮恢复)——EMA(α128 τ1.28s)+4×dlt 宽窗把金属板悬感应边缘(dev−20~−40)当真空快学 → vac_ref 被拉低 → 触发线漂移。修: 仅 OriginEMA>1×dlt(真锚错 J1 130 counts) 才重锚 EMA, 小偏差用 Origin |
| V2.51 | 2026-09-08 | **V4.36.34 EMA 钳位+自愈+诊断**35µH 日志 VEM 垃圾实锤(536M→846M→2224M 递增, 10:23:03 起) → EMA 内存被越界写(值≈ORG_SUM 语义但数值不匹配; 写源未定)。防御: EMA 每步限 ±3×dlt、与 Origin 偏差>25% 自愈回 Origin;诊断: DBG 加 SUM(ORG_SUM 对照)+每 10s ADR(四变量地址) |
+2 -2
View File
@@ -14,11 +14,11 @@
#define __CMCNG_H__ #define __CMCNG_H__
#define PRODUCT_MODEL "DLD154" #define PRODUCT_MODEL "DLD154"
#define FIRMWARE_VER "4.36.33" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定) #define FIRMWARE_VER "4.36.34" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
#define HARDWARE_VER "3.00" #define HARDWARE_VER "3.00"
#define FIRMWARE_VER_MAIN 4 #define FIRMWARE_VER_MAIN 4
#define FIRMWARE_VER_SUB 36 #define FIRMWARE_VER_SUB 36
#define FIRMWARE_VER_REV 33 #define FIRMWARE_VER_REV 34
#define HARDWARE_VER_MAIN 3 #define HARDWARE_VER_MAIN 3
#define HARDWARE_VER_SUB 0 #define HARDWARE_VER_SUB 0
@@ -1259,11 +1259,21 @@ void vd1_task(void)
update_moving_average(&loop1_ORG_SUM, &loop1_ORG_CNT, update_moving_average(&loop1_ORG_SUM, &loop1_ORG_CNT,
&loop1_Origin, loop1_CAPVD, _win); &loop1_Origin, loop1_CAPVD, _win);
/* V4.36.31: 真空 EMA 同步更新 (同条件同守卫; α=128 τ≈1.28s) */ /* V4.36.31: 真空 EMA 同步更新 (同条件同守卫; α=128 τ≈1.28s) */
if (g_vacuum_ema == 0) if (g_vacuum_ema == 0) {
g_vacuum_ema = loop1_CAPVD; g_vacuum_ema = loop1_CAPVD;
else } else {
g_vacuum_ema += (uint32_t)((int32_t)loop1_CAPVD - (int32_t)g_vacuum_ema) /* V4.36.34: EMA 钳位 — 每步最多 ±3×dlt (防 CAPVD 毛刺拖带);
/ VACUUM_EMA_ALFA; * Origin >25% /, Origin (20260908 35uH VEM ) */
int32_t _ema_d = (int32_t)loop1_CAPVD - (int32_t)g_vacuum_ema;
int32_t _ema_lim = (int32_t)(loop1_dlt_ORG * 3);
if (_ema_d > _ema_lim) _ema_d = _ema_lim;
else if (_ema_d < -_ema_lim) _ema_d = -_ema_lim;
if (_ema_d != 0)
g_vacuum_ema += (uint32_t)_ema_d / VACUUM_EMA_ALFA;
if (((int32_t)loop1_Origin - (int32_t)g_vacuum_ema) > (int32_t)(loop1_Origin >> 2) ||
((int32_t)g_vacuum_ema - (int32_t)loop1_Origin) > (int32_t)(loop1_Origin >> 2))
g_vacuum_ema = loop1_Origin;
}
} }
} else if (dev < 0) { } else if (dev < 0) {
g_env_wait_cnt = 0; // V4.24: 目标靠近(车方向) → 等待重来 g_env_wait_cnt = 0; // V4.24: 目标靠近(车方向) → 等待重来
@@ -1709,7 +1719,7 @@ void loop_task_function(void *pvParameters)
_rln = vac_ref() - ((loop1_dlt_ORG * REL_BAND_LO_MULT) / 100); /* V4.36.31: 显示真空锚定线 */ _rln = vac_ref() - ((loop1_dlt_ORG * REL_BAND_LO_MULT) / 100); /* V4.36.31: 显示真空锚定线 */
PRINT("DBG|t=%ums f=%dkHz L=%luuH Xn=%d LPCNT=%d Value=%d CAPVD=%d slow=%d " PRINT("DBG|t=%ums f=%dkHz L=%luuH Xn=%d LPCNT=%d Value=%d CAPVD=%d slow=%d "
"Origin=%d dlt=%d SENS=%d VD=%d FRZ=%d/%d LIM=%d LOOP=%d STBL=%d " "Origin=%d dlt=%d SENS=%d VD=%d FRZ=%d/%d LIM=%d LOOP=%d STBL=%d "
"QLO=%d VEM=%d RSM=%d RLN=%d RCN=%d\n", "QLO=%d VEM=%d RSM=%d RLN=%d RCN=%d SUM=%lu\n",
_t_ms, _t_ms,
_fk, _fk,
coil_l_uH(_fk), coil_l_uH(_fk),
@@ -1717,8 +1727,13 @@ void loop_task_function(void *pvParameters)
loop1_Origin, loop1_dlt_ORG, loop1_SensLevel, loop1_VD_FLAG, loop1_Origin, loop1_dlt_ORG, loop1_SensLevel, loop1_VD_FLAG,
loop1_freeze_cnt, loop1_freeze_ref, g_slope_limit_cnt, loop1_freeze_cnt, loop1_freeze_ref, g_slope_limit_cnt,
loop1_LOOP_OK, g_loop_stable, loop1_LOOP_OK, g_loop_stable,
g_q_lo, g_vacuum_ema, g_rel_smooth, _rln, loop1_cnt_release); g_q_lo, g_vacuum_ema, g_rel_smooth, _rln, loop1_cnt_release,
(unsigned long)loop1_ORG_SUM);
} }
if ((_t_ms % 10000) == 0) /* V4.36.34 诊断: 关键变量地址 (每 10s) */
PRINT("ADR|VEM=%08X ORGSUM=%08X Origin=%08X RSM=%08X\n",
(unsigned)&g_vacuum_ema, (unsigned)&loop1_ORG_SUM,
(unsigned)&loop1_Origin, (unsigned)&g_rel_smooth);
g_slope_limit_cnt = 0; // 限幅计数按周期清 (统计最近 2s) g_slope_limit_cnt = 0; // 限幅计数按周期清 (统计最近 2s)
} }
} }