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:
@@ -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.34;spec 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 重锚阈值(Origin−EMA>1×dlt 才锚 EMA): 修边缘悬停拉低 EMA 触发高度漂移 |
|
| V2.68 | 2026-09-04 | V4.36.33 vac_ref 重锚阈值(Origin−EMA>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 存档 |
|
||||||
|
|||||||
@@ -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 被拉低 → 触发线漂移。修: 仅 Origin−EMA>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 被拉低 → 触发线漂移。修: 仅 Origin−EMA>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(四变量地址) |
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user