feat(V4B): V4.36.16 — 上电自检与重连灯语义分离

用户三条需求:
1. 上电无线圈: 绿灯黄灯都闪, 接线圈后黄灯时长<=绿灯, 自检完同灭
2. 上电有线圈: 绿灯闪自检, 黄灯不闪
3. 运行中重连: 黄灯接管(不变)

问题(V4.36.15 副作用): 上电首次 LOOP_OK 上升沿误触发判稳门控,
低Q 蠕变把黄灯拖到 2s+ 超过绿灯判稳 1.3s; 上电有线圈黄灯也闪(!power_up)
改动: 黄灯模式1 去 !power_up(无线圈由 disconnect_active 覆盖);
判稳门控触发加 g_loop_stable(仅运行中重连; 上电/安全复位不判稳)
语法0 error, 4测试全绿; spec V2.32 / manual 灯表 / devlog V2.50
This commit is contained in:
wangfq
2026-09-04 16:28:17 +08:00
parent fc070a9145
commit 13876be54c
5 changed files with 47 additions and 9 deletions
+32
View File
@@ -4,6 +4,37 @@
--- ---
## 2026-09-03 — 上电自检与线圈重连灯语义分离(固件 V4.36.16)
> **固件版本:V4.36.16**cmcng.hFIRMWARE_VER="4.36.16"REV=16)。devlog 修订 V2.50。
### 用户需求(三条语义区分)
1. 上电无线圈:绿灯+黄灯都闪 → 接线圈后**黄灯闪时长 ≤ 绿灯闪**,自检结束(判稳)绿灯灭黄灯也灭
2. 上电已接线圈:绿灯闪(自检),**黄灯不闪**
3. 非上电(运行中)线圈重连:黄灯接管(判稳门控快闪) —— 保持 V4.36.15 模式
### 现状问题(V4.36.15 副作用)
- 上电首次 LOOP_OK 上升沿 → 确认重置 → VD_FLAG==0 → **误触发判稳门控**
低Q 线圈蠕变把黄灯拖到 2s+,而绿灯判稳 ~1.3s 先停 → 黄灯比绿灯闪得久(违反需求 1)
- 上电有线圈时黄灯因 `!power_up` 也快闪(违反需求 2
### 改动
1. **黄灯模式1 条件去 `!g_loop_power_up_state`**:黄灯只随"载波问题"
`g_disconnect_active || g_reconn_stab`;上电无线圈由 loop_task 断开分支置
disconnect_active 覆盖(仍双闪);上电有线圈/判稳中黄灯不闪(需求 2 ✓)
2. **判稳门控触发加 `g_loop_stable`**:仅运行中(判稳完成)重连触发;
上电/安全复位(stable=0)确认重置不判稳 → 上电黄灯不被蠕变拖长(需求 1 ✓:
接线圈 → 100ms 确认 → disconnect_active 清 → 黄灯灭 ≤ 绿灯判稳时长)
3. 运行中重连(stable=1, VD=0):判稳门控照常 → 黄灯接管(需求 3 ✓ 不变)
### 验证
- 语法 0 error4 组单测全 PASS
- 待板级:上电无线圈/有线圈各看一次灯序;运行中拔插确认黄灯接管不变
## 2026-09-03 — 重连判稳门控(固件 V4.36.15) ## 2026-09-03 — 重连判稳门控(固件 V4.36.15)
> **固件版本:V4.36.15**cmcng.hFIRMWARE_VER="4.36.15"REV=15)。devlog 修订 V2.49。 > **固件版本:V4.36.15**cmcng.hFIRMWARE_VER="4.36.15"REV=15)。devlog 修订 V2.49。
@@ -1823,6 +1854,7 @@ if (dev >= dlt_ORG × 4) {
| 版本 | 时间 | 说明 | | 版本 | 时间 | 说明 |
|------|------|------| |------|------|------|
| V2.50 | 2026-09-03 | V4.36.16 上电自检与重连灯语义分离: 黄灯去!power_up, 判稳门控限运行中(stable=1) |
| V2.49 | 2026-09-03 | V4.36.15 重连判稳门控: 值稳定(600ms无漂移)+回带才放行, Origin 自动对齐, 强车8×dlt例外, 5s兜底 | | V2.49 | 2026-09-03 | V4.36.15 重连判稳门控: 值稳定(600ms无漂移)+回带才放行, Origin 自动对齐, 强车8×dlt例外, 5s兜底 |
| V2.48 | 2026-09-03 | V4.36.14 重连确认窗漏网路径修复: 主循环拍级上升沿检测替代 ISR LOOP_OK0 | | 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.47 | 2026-09-03 | V4.36.13 一长一短 灭 100→300ms (dur 180/60/20/140, 周期2.0s) |
+2 -1
View File
@@ -168,7 +168,8 @@ DLD154V4B 是一款基于 ARM Cortex-M4 微控制器的**单通道环形线圈
| 状态 | 红灯 (PB1) | 绿灯 (LEDA/PA9) | 黄灯 (LEDC/PA10) | | 状态 | 红灯 (PB1) | 绿灯 (LEDA/PA9) | 黄灯 (LEDC/PA10) |
|------|-----------|-----------------|-------------------| |------|-----------|-----------------|-------------------|
| 上电自检中 | 呼吸 | **慢闪** (200ms),基准值稳定后停止 (约2~5s) | 快闪 (200ms) | | 上电自检中,已接线圈 | 呼吸 | **慢闪** (200ms),基准值稳定后停止 (约2~5s) | 灭(自检归绿灯) |
| 上电自检中,未接线圈 | 呼吸 | **慢闪** (200ms) | **快闪** (200ms) | 接线圈确认后黄灯灭;判稳完成绿灯停闪(黄灯时长 ≤ 绿灯) |
| 正常运行,无车(继电器释放) | 呼吸 | 灭 | 灭 | | 正常运行,无车(继电器释放) | 呼吸 | 灭 | 灭 |
| 正常运行,有车(默认继电器 RLY2 吸合) | 呼吸 | **亮**(=RLY2 默认继电器状态) | 灭 | | 正常运行,有车(默认继电器 RLY2 吸合) | 呼吸 | **亮**(=RLY2 默认继电器状态) | 灭 |
| 线圈断开,断开前有车(继电器保持 1s) | 呼吸 | **亮**(默认继电器未释放) | 快闪 | | 线圈断开,断开前有车(继电器保持 1s) | 呼吸 | **亮**(默认继电器未释放) | 快闪 |
+2 -1
View File
@@ -1,6 +1,6 @@
# DLD154V4B 技术规格书 # DLD154V4B 技术规格书
> 单路线圈车辆检测器 | 固件版本: V4.36.15 | 文档版本: V2.31 > 单路线圈车辆检测器 | 固件版本: V4.36.16 | 文档版本: V2.32
> 本文档面向工程开发、系统集成及故障深度分析 > 本文档面向工程开发、系统集成及故障深度分析
--- ---
@@ -797,3 +797,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的
| 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.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 未入库) | | V2.30 | 2026-09-03 | **V4.36.14 重连确认窗漏网路径修复**:主循环拍级自身上升沿检测(g_prev_ok)替代 ISR LOOP_OK0——插头抖动致 LOOP_OK0 卡 1 时恢复不再漏触发确认窗(现场 21µH 无窗直接 Car_In 复现);LO 抑制窗仍 1500ms(用户临时 3000 未入库) |
| V2.31 | 2026-09-03 | **V4.36.15 重连判稳门控**:无车断开重连后值稳定才放行动作——200ms 步进漂移≤dlt/2 连续 600ms + dev 回带(≤dlt) → Origin 对齐当前空场(消新旧基线差);不稳黄灯续闪;强车 8×dlt 例外即时放行;5s 兜底。低Q 窗末假车(21µH 蠕变 ~2.2s > 固定窗)根治 | | V2.31 | 2026-09-03 | **V4.36.15 重连判稳门控**:无车断开重连后值稳定才放行动作——200ms 步进漂移≤dlt/2 连续 600ms + dev 回带(≤dlt) → Origin 对齐当前空场(消新旧基线差);不稳黄灯续闪;强车 8×dlt 例外即时放行;5s 兜底。低Q 窗末假车(21µH 蠕变 ~2.2s > 固定窗)根治 |
| V2.32 | 2026-09-03 | **V4.36.16 上电自检与重连灯语义分离**:黄灯模式1 去 !power_up(上电有线圈黄灯不闪,自检归绿灯慢闪);无线圈由 disconnect_active 覆盖仍双闪;判稳门控触发加 g_loop_stable(上电/安全复位不判稳);运行中重连仍黄灯接管 |
+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.15" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定) #define FIRMWARE_VER "4.36.16" // 主.子.修订 (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 15 #define FIRMWARE_VER_REV 16
#define HARDWARE_VER_MAIN 3 #define HARDWARE_VER_MAIN 3
#define HARDWARE_VER_SUB 0 #define HARDWARE_VER_SUB 0
@@ -357,8 +357,11 @@ void poll_yellow_led(void)
g_fault_tick++; g_fault_tick++;
/*--- 模式1: 快闪 — 当前断开中 或 从无线圈上电 ---*/ /*--- 模式1: 快闪 — V4.36.16 起仅"载波问题"接管 (上电自检不闪, 归绿灯):
if (g_disconnect_active || g_reconn_stab || !g_loop_power_up_state) { * 运行中断开(disconnect_active) / 运行中重连判稳门控(reconn_stab) / 上电无线圈
* (LOOP_OK=0 → loop_task 断开分支置 disconnect_active)
* 上电有线圈/判稳中: 黄灯不闪, 自检指示归绿灯慢闪 ---*/
if (g_disconnect_active || g_reconn_stab) {
if (g_fault_tick >= FLT_FAST_HALF) { if (g_fault_tick >= FLT_FAST_HALF) {
g_fault_tick = 0; g_fault_tick = 0;
LED_YELLOW_GPIO->odt ^= LED_YELLOW_PIN; // toggle LED_YELLOW_GPIO->odt ^= LED_YELLOW_PIN; // toggle
@@ -1453,9 +1456,10 @@ void loop_task_function(void *pvParameters)
g_relay_hold_cnt = 0; // V4.36.3: 保持计时复位 g_relay_hold_cnt = 0; // V4.36.3: 保持计时复位
g_relay_hold_done = 0; g_relay_hold_done = 0;
g_reconn_blank_ms = 0; // V4.36.5: 抑制倒计时(首样本直锁时按 Q 定档) g_reconn_blank_ms = 0; // V4.36.5: 抑制倒计时(首样本直锁时按 Q 定档)
/* V4.36.15: 无车断开重连 → 判稳门控(值稳定才放行动作); /* V4.36.15/16: 无车断开重连(运行中 stable=1) → 判稳门控(值稳定才放行);
* 有车断开重连(VD_FLAG=1, 保持路径输出中)不判稳: 重连后走离开判定 */ * 有车断开重连(VD_FLAG=1, 保持路径输出中)不判稳: 重连后走离开判定;
if (loop1_VD_FLAG == 0) { * 上电/安全复位判稳(stable=0)不触发: 上电自检归绿灯慢闪, 黄灯不闪 */
if (loop1_VD_FLAG == 0 && g_loop_stable) {
g_reconn_stab = 1; g_reconn_stab = 1;
g_stab_ms = 0; g_stab_ms = 0;
g_stab_step_tick = 0; g_stab_step_tick = 0;