fix(V4B): V4.36.14 — 重连确认窗漏网路径修复 (主循环拍级上升沿)
现场 21µH: 三段重连仅无窗段跳 (无 reconnect/blank 打印直接 Car_In) 根因: 上升沿用 ISR LOOP_OK0(5ms), 断开时主循环 150ms 慢 tick, 插头抖动可致 LOOP_OK0 卡 1 → 恢复漏触发确认窗 → CAPVD 不重置直接判定 → 插回瞬态假有车. 干净断开重连走窗则被抑制(验证 2/3 段无跳) 改动: loop_task while 顶部 g_prev_ok 主循环拍级(10ms)上升沿检测, 任何 0→1 恢复强制进确认窗+blank; 抖动免疫保留; LOOP_OK0 仅供安全复位 语法0 error, 4测试全绿; spec V2.30 / devlog V2.48
This commit is contained in:
@@ -4,6 +4,43 @@
|
||||
|
||||
---
|
||||
|
||||
## 2026-09-03 — 重连确认窗漏网路径修复(固件 V4.36.14)
|
||||
|
||||
> **固件版本:V4.36.14**(cmcng.h:FIRMWARE_VER="4.36.14",REV=14)。devlog 修订 V2.48。
|
||||
|
||||
### 现场复现(用户 21µH/164kHz 线圈, 临时改 LO 抑制 3000ms 测试)
|
||||
|
||||
日志三段重连仅第一段跳:disconnect(cnt=1) → 4s 后 enter_try/Car_In/Car_OFF(1.96s),
|
||||
**前后无 reconnect confirmed / reconn_blank 打印** → 假车没走抑制窗。
|
||||
|
||||
### 根因:确认窗漏网路径(LOOP_OK0 拍级竞态)
|
||||
|
||||
重连上升沿用 ISR(5ms) 维护的 `loop1_LOOP_OK0`,而主循环断开时 150ms 慢 tick:
|
||||
插头抖动(断开↔恢复数拍)可使 LOOP_OK0 停在 1 → 恢复时 `!LOOP_OK0` 不触发
|
||||
→ 跳过 candidate/确认窗/blank → CAPVD 不重置、直接正常判定 → 插回瞬态
|
||||
(CAPVD 大跌 700+ counts) 判假车跳输出。干净断开→干净重连则走窗被抑制(②③无跳)。
|
||||
|
||||
### 改动
|
||||
|
||||
loop_task while 顶部**主循环拍级(10ms)自身上升沿检测**:
|
||||
```c
|
||||
if (loop1_LOOP_OK && !g_prev_ok) { g_prev_ok = 1; candidate=1; cnt=0; }
|
||||
else if (!loop1_LOOP_OK) g_prev_ok = 0;
|
||||
```
|
||||
任何 0→1 恢复(无论 LOOP_OK0 状态)都强制进确认窗 + blank 抑制;
|
||||
确认窗内掉线仍取消候选(抖动免疫保留)。ISR LOOP_OK0 维护保留(供安全复位路径,不再驱动候选)。
|
||||
|
||||
### 验证
|
||||
|
||||
- 语法 0 error;4 组单测全 PASS(重连在主循环,无单测耦合;待板级验证)
|
||||
|
||||
### 待板级验证
|
||||
|
||||
1. 21µH(或 46µH) 快速抖动拔插:每次恢复都应看到 `loop_reconnect confirmed` + `reconn_blank`,
|
||||
无直接 Car_In 跳输出(尤其"断开几拍又恢复"的抖动场景)
|
||||
2. 正常拔插重连:行为同 V4.36.13(100ms 确认 + 分档抑制)
|
||||
3. 抑制窗值:git 基线 LO=1500ms(用户临时 3000 是否转正待定)
|
||||
|
||||
## 2026-09-03 — 一长一短 灭 100→300ms(固件 V4.36.13)
|
||||
|
||||
> **固件版本:V4.36.13**(cmcng.h:FIRMWARE_VER="4.36.13",REV=13)。devlog 修订 V2.47。
|
||||
@@ -1747,6 +1784,7 @@ if (dev >= dlt_ORG × 4) {
|
||||
|
||||
| 版本 | 时间 | 说明 |
|
||||
|------|------|------|
|
||||
| V2.48 | 2026-09-03 | V4.36.14 重连确认窗漏网路径修复: 主循环拍级上升沿检测替代 ISR LOOP_OK0 |
|
||||
| V2.47 | 2026-09-03 | V4.36.13 一长一短 灭 100→300ms (dur 180/60/20/140, 周期2.0s) |
|
||||
| V2.46 | 2026-09-03 | V4.36.12 一长一短长亮 300→900ms (dur 180/20/20/140, 周期1.8s) |
|
||||
| V2.45 | 2026-09-03 | V4.36.11 低Q 重连抑制窗 400→1500ms (分档 200/300/1500ms) |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# DLD154V4B 技术规格书
|
||||
|
||||
> 单路线圈车辆检测器 | 固件版本: V4.36.13 | 文档版本: V2.29
|
||||
> 单路线圈车辆检测器 | 固件版本: V4.36.14 | 文档版本: V2.30
|
||||
> 本文档面向工程开发、系统集成及故障深度分析
|
||||
|
||||
---
|
||||
@@ -795,3 +795,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的
|
||||
| V2.27 | 2026-09-03 | **V4.36.11 低Q 重连抑制窗 400→1500ms**:Q 分档抑制 高200/中300/**低1500**ms |
|
||||
| V2.28 | 2026-09-03 | **V4.36.12 黄灯一长一短 长亮 300→900ms**:dur {60,20,20,140}→{180,20,20,140}(总周期 1.8s),灭100/短亮100/灭700 不变 |
|
||||
| V2.29 | 2026-09-03 | **V4.36.13 一长一短 灭 100→300ms**:dur {180,20,20,140}→{180,60,20,140}=900/300/100/700ms(总周期 2.0s) |
|
||||
| V2.30 | 2026-09-03 | **V4.36.14 重连确认窗漏网路径修复**:主循环拍级自身上升沿检测(g_prev_ok)替代 ISR LOOP_OK0——插头抖动致 LOOP_OK0 卡 1 时恢复不再漏触发确认窗(现场 21µH 无窗直接 Car_In 复现);LO 抑制窗仍 1500ms(用户临时 3000 未入库) |
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
#define __CMCNG_H__
|
||||
|
||||
#define PRODUCT_MODEL "DLD154"
|
||||
#define FIRMWARE_VER "4.36.13" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
|
||||
#define FIRMWARE_VER "4.36.14" // 主.子.修订 (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 13
|
||||
#define FIRMWARE_VER_REV 14
|
||||
#define HARDWARE_VER_MAIN 3
|
||||
#define HARDWARE_VER_SUB 0
|
||||
|
||||
|
||||
@@ -161,6 +161,7 @@ uint16_t g_relay_hold_cnt = 0; // V4.36.3: 有车断开继电器保持
|
||||
uint8_t g_relay_hold_done = 0; // V4.36.3: 本次有车断开已兜底释放(防重复OFF)
|
||||
uint16_t g_reconn_blank_ms = 0; // V4.36.5: 重连起振抑制倒计时(ms, 按Q分档, vd1_task 每样本-10)
|
||||
uint8_t g_entry_need = 3; // V4.36.8: 进入确认样本数 (按Q档, 高3/中4/低5)
|
||||
uint8_t g_prev_ok = 0; // V4.36.14: loop_task 主循环拍级上一拍 LOOP_OK (自身上升沿检测)
|
||||
uint8_t g_release_need = 3; // V4.36.8: 释放确认样本数 (按Q档, 高3/中4/低5)
|
||||
uint8_t g_fault_phase = 0;
|
||||
uint16_t g_fault_tick = 0;
|
||||
@@ -1354,16 +1355,24 @@ void loop_task_function(void *pvParameters)
|
||||
INIT_VD();
|
||||
|
||||
while (1) {
|
||||
/*--- V4.36.14: 主循环拍级 RF 上升沿检测 (不依赖 ISR LOOP_OK0) ---
|
||||
* 原 !LOOP_OK0 依赖 ISR 5ms 拍与主循环 150ms 慢 tick 的竞态:
|
||||
* 插头抖动(断开↔恢复几拍)可使 LOOP_OK0 卡 1 → 恢复时漏触发确认窗
|
||||
* → CAPVD 不重置直接跑判定 → 插回瞬态假"有车"跳输出 (现场 21µH 复现)
|
||||
* 现每 10ms 主循环拍自采样 LOOP_OK: 任何 0→1 恢复都强制进确认窗 */
|
||||
if (loop1_LOOP_OK && !g_prev_ok) {
|
||||
g_prev_ok = 1;
|
||||
g_reconn_candidate = 1;
|
||||
g_reconn_cnt = 0;
|
||||
} else if (!loop1_LOOP_OK) {
|
||||
g_prev_ok = 0;
|
||||
}
|
||||
|
||||
if (loop1_LOOP_OK) {
|
||||
/*--- 线圈重连: V4.36.2 确认窗 (载波连续恢复 ~100ms 才确认重置) ---
|
||||
* RF 上升沿仅进入候选; 期间保持 g_disconnect_active=1 → 黄灯仍快闪,
|
||||
* RF 上升沿(顶部检测)仅进入候选; 期间保持 g_disconnect_active=1 → 黄灯仍快闪,
|
||||
* 断开计数不重复; 抖动(断开↔恢复快速交替)每次掉线取消候选 → 免疫.
|
||||
* 确认后才: 清断开标记 / CAPVD 强制重收敛(首样本此时已干净, 无斜率限幅绕过风险) */
|
||||
if (!loop1_LOOP_OK0) {
|
||||
loop1_LOOP_OK0 = 1;
|
||||
g_reconn_candidate = 1;
|
||||
g_reconn_cnt = 0;
|
||||
}
|
||||
if (g_reconn_candidate) {
|
||||
g_reconn_cnt++;
|
||||
if (g_reconn_cnt >= RECONNECT_CONFIRM_TICKS) {
|
||||
|
||||
Reference in New Issue
Block a user