feat(V4B): V4.36.4 — 绿灯=RLY1 继电器实际输出状态指示

现场误判根因: 断开时 poll_green_led 强制绿灯灭, 而 V4.36.3 保持
逻辑下继电器仍吸合 → 灯/继电器脱节 → 误判继电器释放
改动: 稳定后绿灯镜像 RLY1_GPIO->odt (吸合亮/释放灭), 删断开
强制灭分支 → 有车断开保持期绿灯亮(与继电器一致); 自检期慢闪不变
语法0 error, 4测试全绿; spec V2.20 / manual 灯表 / devlog V2.38
This commit is contained in:
wangfq
2026-09-04 09:43:42 +08:00
parent 1efa9ad775
commit 55ac432c69
5 changed files with 60 additions and 20 deletions
+37
View File
@@ -4,6 +4,42 @@
---
## 2026-09-03 — 绿灯=继电器状态指示(固件 V4.36.4)
> **固件版本:V4.36.4**cmcng.hFIRMWARE_VER="4.36.4"REV=4)。devlog 修订 V2.38。
### 现场误判(用户报告)
车压线圈拔线测试:**继电器实际未释放**(V4.36.3 保持逻辑工作正常),但**绿灯灭了**——
原 poll_green_led 在 `g_disconnect_active` 时强制绿灯灭(黄灯快闪负责故障指示),
而继电器在有车断开时保持吸合 → 灯(灭)与继电器(吸)脱节 → 误判"继电器立刻释放"。
### 改动
**绿灯语义改为 = RLY1 继电器实际输出状态**(稳定后):
-`RLY1_GPIO->odt & RLY1_PIN`(与 RLY1_ON/OFF 宏同源 = 真实驱动状态)
- 吸合(高) → 绿灯亮(PA9 低电平点亮);释放 → 绿灯灭
- **删除 `g_disconnect_active` 强制灭分支** → 断开时绿灯跟随继电器:
- 有车断开保持(RELAY_HOLD_MS)期间 → 绿灯保持亮(与继电器一致)
- 断开超时释放/无车断开 → 绿灯灭
- 自检/判稳期(INI_LOOP/!power_up/!stable)保持 200ms 慢闪(就绪过程指示,该阶段继电器未驱动)
### 输出覆盖(模式自适应)
- 存在模式:有车/离开延时输出 → RLY1 吸合 → 绿灯亮;无车 → 灭
- 脉冲模式:进出脉冲输出中 → 绿灯短亮;平时灭(真实输出指示)
### 验证
- 语法 0 error4 组单测全 PASS(绿灯为 poll 层,无单测耦合;待板级验证)
### 待板级验证
1. 车压线圈拔线:绿灯保持亮 500ms(与继电器同步)→ 超时释放后灭
2. 车压快速拔插(<500ms):绿灯不掉,车走继电器释放 → 绿灯灭
3. 上电判稳期:绿灯慢闪 → 稳定后灭(无车)/ 有车亮
4. 脉冲模式:进出车时绿灯短亮脉冲
## 2026-09-03 — 有车断开继电器保持 500ms(固件 V4.36.3
> **固件版本:V4.36.3**cmcng.hFIRMWARE_VER="4.36.3"REV=3)。devlog 修订 V2.37。
@@ -1554,6 +1590,7 @@ if (dev >= dlt_ORG × 4) {
| 版本 | 时间 | 说明 |
|------|------|------|
| V2.38 | 2026-09-03 | V4.36.4 绿灯=RLY1 继电器实际输出状态(吸合亮/释放灭), 删断开强制灭分支; 自检期慢闪不变 |
| V2.37 | 2026-09-03 | V4.36.3 有车断开继电器保持 RELAY_HOLD_MS=500ms(ISR计时/宏可调); 无车断开立即释放不变 |
| V2.36 | 2026-09-03 | V4.36.2 线圈重连确认窗 100ms(防抖动重复计数/首样本毛刺); 断开判定不加防抖 |
| V2.35 | 2026-09-03 | 版本体系增加修订号: 4.36.1 (MAIN/SUB 产品定, 小改只增 REV); 启动打印 fw 行 |
+4 -2
View File
@@ -169,8 +169,10 @@ DLD154V4B 是一款基于 ARM Cortex-M4 微控制器的**单通道环形线圈
| 状态 | 红灯 (PB1) | 绿灯 (LEDA/PA9) | 黄灯 (LEDC/PA10) |
|------|-----------|-----------------|-------------------|
| 上电自检中 | 呼吸 | **慢闪** (200ms),基准值稳定后停止 (约2~5s) | 快闪 (200ms) |
| 正常运行,无车 | 呼吸 | 灭 | 灭 |
| 正常运行,有车 | 呼吸 | **亮** | 灭 |
| 正常运行,无车(继电器释放) | 呼吸 | 灭 | 灭 |
| 正常运行,有车(继电器吸合) | 呼吸 | **亮**=RLY1 状态) | 灭 |
| 线圈断开,断开前有车(继电器保持 500ms) | 呼吸 | **亮**(继电器未释放) | 快闪 |
| 线圈断开,继电器已释放/无车断开 | 呼吸 | 灭 | 快闪 |
### 5.2 故障状态
+2 -1
View File
@@ -1,6 +1,6 @@
# DLD154V4B 技术规格书
> 单路线圈车辆检测器 | 固件版本: V4.36.3 | 文档版本: V2.19
> 单路线圈车辆检测器 | 固件版本: V4.36.4 | 文档版本: V2.20
> 本文档面向工程开发、系统集成及故障深度分析
---
@@ -785,3 +785,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的
| V2.17 | 2026-09-03 | 固件版本体系增加修订号:**V4.36.1**(MAIN/SUB 由产品定,小改动只增 REV);启动日志打印 fw 行 |
| V2.18 | 2026-09-03 | **V4.36.2 重连确认窗**:载波连续恢复 ~100ms 才确认重连重置(防接触抖动重复计数/首样本毛刺);断开判定不加防抖(释放速度安全刚需) |
| V2.19 | 2026-09-03 | **V4.36.3 有车断开继电器保持 RELAY_HOLD_MS=500ms**:断开前 VD_FLAG=1 → RLY 保持不释放;500ms 内重连+有车 → 无缝续持;重连+无车 → vd1_task 判离释放;超时仍断 → 强制释放(宏可调) |
| V2.20 | 2026-09-03 | **V4.36.4 绿灯=继电器状态指示**:稳定后绿灯镜像 RLY1(PA6) 实际输出——吸合亮/释放灭;删除断开时绿灯强制灭分支(与保持逻辑一致,消除"拔线绿灯灭=误判继电器释放");自检/判稳期仍 200ms 慢闪 |
+2 -2
View File
@@ -14,11 +14,11 @@
#define __CMCNG_H__
#define PRODUCT_MODEL "DLD154"
#define FIRMWARE_VER "4.36.3" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
#define FIRMWARE_VER "4.36.4" // 主.子.修订 (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 3
#define FIRMWARE_VER_REV 4
#define HARDWARE_VER_MAIN 3
#define HARDWARE_VER_SUB 0
+15 -15
View File
@@ -274,9 +274,13 @@ void LEDA_ON_OFF(void)
*
* 模式:
* 自检/稳定中 (loop1_INI_LOOP || 线圈未连 || !g_loop_stable):
* → 慢闪 (200ms 亮 / 200ms 灭)
* 正常工作:
* → 有车亮 (VD_FLAG==1), 无车灭
* → 慢闪 (200ms 亮 / 200ms 灭) — 就绪过程指示, 此阶段继电器未驱动
* 稳定后 (V4.36.4):
* → 绿灯 = RLY1 继电器实际输出状态 (镜像 PA6 odt):
* 吸合(PA6 高) → 绿灯亮; 释放(PA6 低) → 绿灯灭
* - 有车/离开延时(存在模式) → 亮; 脉冲输出中 → 短亮
* - 有车断开保持(RELAY_HOLD_MS)期间 → 保持亮 (与继电器一致)
* - 断开超时释放/无车 → 灭
*===========================================================================*/
void poll_green_led(void)
{
@@ -284,14 +288,7 @@ void poll_green_led(void)
static uint16_t _slow_tick = 0;
/*--- 线圈断开中 → 灭(黄灯快闪负责故障指示 ---*/
if (g_disconnect_active) {
LEDA_OFF;
_slow_tick = 0;
return;
}
/*--- 自检阶段:慢闪 ---*/
/*--- 自检阶段:慢闪(就绪过程指示;此阶段继电器未驱动 ---*/
if (loop1_INI_LOOP || !g_loop_power_up_state || !g_loop_stable) {
_slow_tick++;
if (_slow_tick >= GREEN_SLOW_HALF) {
@@ -301,12 +298,15 @@ void poll_green_led(void)
return;
}
/*--- 正常工作:车辆存在指示 ---*/
/*--- 稳定后: 绿灯 = RLY1 继电器实际输出状态 (V4.36.4) ---
* 读 RLY1_GPIO->odt (与 RLY1_ON/OFF 宏同源, 即真实驱动状态):
* 吸合(高) → 绿灯亮; 释放(低) → 绿灯灭
* 断开时无强制灭分支 → 与继电器保持逻辑一致 (防误判"继电器释放") */
_slow_tick = 0;
if (loop1_VD_FLAG)
LEDA_ON;
if (RLY1_GPIO->odt & RLY1_PIN)
LEDA_ON; // 继电器吸合 → 绿灯亮 (PA9 低电平点亮)
else
LEDA_OFF;
LEDA_OFF; // 继电器释放 → 绿灯灭
}
/*===========================================================================