feat(DLD110S): V4.31 — 断开次数双变量拆分(g_loop_cut_amount≤3 LED / g_loop_cut_total持续累计BLE上报) + 恢复g_loop_cut_last边沿同步 + 文档同步
This commit is contained in:
@@ -506,9 +506,9 @@ void usart_packet_processing_acs_loop(uint8_t flag)
|
|||||||
if(g_loop_acs_info.flag_change){
|
if(g_loop_acs_info.flag_change){
|
||||||
g_loop_acs_info.flag_change = 0;
|
g_loop_acs_info.flag_change = 0;
|
||||||
}
|
}
|
||||||
g_tmp_report_buf.buf[i++] = (g_loop_power_up_state == 0) ? 1 : ((uint8_t)g_loop_cut_amount);
|
g_tmp_report_buf.buf[i++] = (g_loop_power_up_state == 0) ? 1 : ((uint8_t)g_loop_cut_total);
|
||||||
g_tmp_report_buf.buf[i++] = (g_loop_power_up_state == 0) ? 0 : ((g_loop_cut_amount >> 8) % 0x100);
|
g_tmp_report_buf.buf[i++] = (g_loop_power_up_state == 0) ? 0 : ((g_loop_cut_total >> 8) % 0x100);
|
||||||
g_tmp_report_buf.buf[i++] = (g_loop_power_up_state == 0) ? 0 : ((g_loop_cut_amount >> 16) % 0x100);
|
g_tmp_report_buf.buf[i++] = (g_loop_power_up_state == 0) ? 0 : ((g_loop_cut_total >> 16) % 0x100);
|
||||||
|
|
||||||
g_tmp_report_buf.buf[i++] = (uint8_t)g_loop_acs_info.frequent;
|
g_tmp_report_buf.buf[i++] = (uint8_t)g_loop_acs_info.frequent;
|
||||||
g_tmp_report_buf.buf[i++] = (g_loop_acs_info.frequent >> 8) % 0x100;
|
g_tmp_report_buf.buf[i++] = (g_loop_acs_info.frequent >> 8) % 0x100;
|
||||||
@@ -629,8 +629,8 @@ void manage_dbn_ble_default(uint8_t *pkg, uint8_t len)
|
|||||||
tmp_ble_buf[i++] = g_loop_cng_unit.output_mode | (g_loop_cng_unit.loopSafe_Timeout << 3);
|
tmp_ble_buf[i++] = g_loop_cng_unit.output_mode | (g_loop_cng_unit.loopSafe_Timeout << 3);
|
||||||
tmp_ble_buf[i++] = g_loop_cng_unit.exist_mode;
|
tmp_ble_buf[i++] = g_loop_cng_unit.exist_mode;
|
||||||
tmp_ble_buf[i++] = g_loop_sens_list.total << 4;
|
tmp_ble_buf[i++] = g_loop_sens_list.total << 4;
|
||||||
tmp_ble_buf[i++] = (g_loop_power_up_state == 0) ? 1 : ((uint8_t)(g_loop_cut_amount));
|
tmp_ble_buf[i++] = (g_loop_power_up_state == 0) ? 1 : ((uint8_t)(g_loop_cut_total));
|
||||||
tmp_ble_buf[i++] = (uint8_t)(g_loop_cut_amount >> 8);
|
tmp_ble_buf[i++] = (uint8_t)(g_loop_cut_total >> 8);
|
||||||
tmp_ble_buf[i++] = g_function_mode;
|
tmp_ble_buf[i++] = g_function_mode;
|
||||||
/* V1.1: 追加归一化基数 LOOP_MEASURE_BASE (2^19=524288, LE), 供第三方 variation 换算 dL/L */
|
/* V1.1: 追加归一化基数 LOOP_MEASURE_BASE (2^19=524288, LE), 供第三方 variation 换算 dL/L */
|
||||||
tmp_ble_buf[i++] = (uint8_t)(LOOP_MEASURE_BASE);
|
tmp_ble_buf[i++] = (uint8_t)(LOOP_MEASURE_BASE);
|
||||||
|
|||||||
@@ -13,10 +13,10 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#define PRODUCT_MODEL "DLD110S"
|
#define PRODUCT_MODEL "DLD110S"
|
||||||
#define FIRMWARE_VER "4.20"
|
#define FIRMWARE_VER "4.31"
|
||||||
#define HARDWARE_VER "4.01"
|
#define HARDWARE_VER "4.01"
|
||||||
#define FIRMWARE_VER_MAIN 4
|
#define FIRMWARE_VER_MAIN 4
|
||||||
#define FIRMWARE_VER_SUB 20
|
#define FIRMWARE_VER_SUB 31
|
||||||
#define HARDWARE_VER_MAIN 4
|
#define HARDWARE_VER_MAIN 4
|
||||||
#define HARDWARE_VER_SUB 1
|
#define HARDWARE_VER_SUB 1
|
||||||
|
|
||||||
@@ -37,6 +37,7 @@ extern uint8_t MACAddr[6];
|
|||||||
|
|
||||||
extern uint8_t g_loop_cut_last;
|
extern uint8_t g_loop_cut_last;
|
||||||
extern uint32_t g_loop_cut_amount;
|
extern uint32_t g_loop_cut_amount;
|
||||||
|
extern uint32_t g_loop_cut_total;
|
||||||
extern uint8_t g_loop_power_up_state;
|
extern uint8_t g_loop_power_up_state;
|
||||||
|
|
||||||
extern uint8_t g_function_mode;
|
extern uint8_t g_function_mode;
|
||||||
|
|||||||
@@ -81,7 +81,8 @@ uint32_t mstick(void){
|
|||||||
|
|
||||||
uint32_t u32CountWdt = 0;
|
uint32_t u32CountWdt = 0;
|
||||||
uint8_t g_loop_cut_last = 0;
|
uint8_t g_loop_cut_last = 0;
|
||||||
uint32_t g_loop_cut_amount = 0;
|
uint32_t g_loop_cut_amount = 0; // LED 快闪用 (3次上限)
|
||||||
|
uint32_t g_loop_cut_total = 0; // 上电后持续累计断开次数 (BLE 上报用, 不截断)
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
@@ -821,6 +822,10 @@ void cjq_srv(void){
|
|||||||
g_loop_cut_last = loop1_FLAG_CUT;
|
g_loop_cut_last = loop1_FLAG_CUT;
|
||||||
if(g_loop_power_up_state){
|
if(g_loop_power_up_state){
|
||||||
g_loop_cut_amount++;
|
g_loop_cut_amount++;
|
||||||
|
if(g_loop_cut_amount > 3){
|
||||||
|
g_loop_cut_amount = 3;
|
||||||
|
}
|
||||||
|
g_loop_cut_total++; // 持续累计, 不截断 (BLE 上报用)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# DLD110SV4 蓝牙小程序接口协议
|
# DLD110SV4 蓝牙小程序接口协议
|
||||||
|
|
||||||
> 依据源码整理:`BLE/DLD110S_Peripheral_28K/APP/dbn_ble_srv.c`(主逻辑)、`peripheral.c`/`Profile/gattprofile.c`(BLE 服务)、`peripheral_main.c`(灵敏度/检测)、`include/storage.h`(配置结构)、`include/cmcng.h`(常量)
|
> 依据源码整理:`BLE/DLD110S_Peripheral_28K/APP/dbn_ble_srv.c`(主逻辑)、`peripheral.c`/`Profile/gattprofile.c`(BLE 服务)、`peripheral_main.c`(灵敏度/检测)、`include/storage.h`(配置结构)、`include/cmcng.h`(常量)
|
||||||
> 固件版本:V4.20(cmcng.h `FIRMWARE_VER`)| 硬件版本:V4.01 | 产品型号:DLD110S(BLE 单线圈)
|
> 固件版本:V4.31(cmcng.h `FIRMWARE_VER`)| 硬件版本:V4.01 | 产品型号:DLD110S(BLE 单线圈)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
|------|------|------|
|
|------|------|------|
|
||||||
| 0-5 | 6 | MAC 地址 |
|
| 0-5 | 6 | MAC 地址 |
|
||||||
| 6-7 | 2 | 硬件版本 MAIN/SUB(V4.01 → 04 01) |
|
| 6-7 | 2 | 硬件版本 MAIN/SUB(V4.01 → 04 01) |
|
||||||
| 8-9 | 2 | 固件版本 MAIN/SUB(V4.20 → 04 14) |
|
| 8-9 | 2 | 固件版本 MAIN/SUB(V4.31 → 04 1F) |
|
||||||
| 10 | 1 | 产品型号长度 |
|
| 10 | 1 | 产品型号长度 |
|
||||||
| 11.. | N | 产品型号 ASCII("DLD110S") |
|
| 11.. | N | 产品型号 ASCII("DLD110S") |
|
||||||
| .. | 6 | 设备编号 |
|
| .. | 6 | 设备编号 |
|
||||||
@@ -141,7 +141,7 @@ g_hold_time = exist_mode * 30 * 20 (600 tick ≈ 30s × exist_mode, @50ms
|
|||||||
| 2 | `output_mode \| (loopSafe_Timeout << 3)` |
|
| 2 | `output_mode \| (loopSafe_Timeout << 3)` |
|
||||||
| 3 | exist_mode |
|
| 3 | exist_mode |
|
||||||
| 4 | `sens_list.total << 4`(= 3,高 4 位) |
|
| 4 | `sens_list.total << 4`(= 3,高 4 位) |
|
||||||
| 5 | 线圈断开次数低字节 |
|
| 5 | 线圈断开次数低字节(**上电后持续累计**,不截断) |
|
||||||
| 6 | 线圈断开次数高字节 |
|
| 6 | 线圈断开次数高字节 |
|
||||||
| 7 | **g_function_mode**(注意:DLD154Pro 此处是 direction_mode) |
|
| 7 | **g_function_mode**(注意:DLD154Pro 此处是 direction_mode) |
|
||||||
| 8-10 | **归一化基数 LOOP_MEASURE_BASE(3B LE,= 524288)**(V1.1 追加) |
|
| 8-10 | **归一化基数 LOOP_MEASURE_BASE(3B LE,= 524288)**(V1.1 追加) |
|
||||||
@@ -184,7 +184,7 @@ Data:`[enable] [interval] [timeout_min]`
|
|||||||
| 1 | 1 | `loop_num<<6 \| freq_level<<4 \| condition&0x0F` |
|
| 1 | 1 | `loop_num<<6 \| freq_level<<4 \| condition&0x0F` |
|
||||||
| 2 | 1 | `relay2_state<<6 \| relay2_cng<<4 \| relay1_state<<2 \| relay1_cng&0x3` |
|
| 2 | 1 | `relay2_state<<6 \| relay2_cng<<4 \| relay1_state<<2 \| relay1_cng&0x3` |
|
||||||
| 3 | 1 | `loop1_FLAG_CUT<<7 \| car_state<<4 \| direction&0x0F` |
|
| 3 | 1 | `loop1_FLAG_CUT<<7 \| car_state<<4 \| direction&0x0F` |
|
||||||
| 4-6 | 3 | 线圈断开次数(LE,上电未连时为 1) |
|
| 4-6 | 3 | 线圈断开次数(LE,**上电后持续累计**,不截断;上电未连时为 1) |
|
||||||
| 7-9 | 3 | 实际频率(LE,`freq = sclk_freq/CAPVD×LPCNT + 360` 补偿) |
|
| 7-9 | 3 | 实际频率(LE,`freq = sclk_freq/CAPVD×LPCNT + 360` 补偿) |
|
||||||
| 10-12 | 3 | variation(**3B 有符号补码 LE**,正=车/金属进入方向) |
|
| 10-12 | 3 | variation(**3B 有符号补码 LE**,正=车/金属进入方向) |
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,32 @@
|
|||||||
|
|
||||||
> MCU: CH591R (RISC-V, BLE) @60MHz | 通道: 1 路线圈 | 调试口: UART0 (DEBUG 编译, 230400)
|
> MCU: CH591R (RISC-V, BLE) @60MHz | 通道: 1 路线圈 | 调试口: UART0 (DEBUG 编译, 230400)
|
||||||
|
|
||||||
|
## 2026-08-26 — V4.31:断开次数双变量拆分(LED 3次上限 vs BLE 持续累计)
|
||||||
|
|
||||||
|
### 背景
|
||||||
|
|
||||||
|
V4.30 代码合并整理时,peripheral_main.c 出现了两处回退(删 `g_loop_cut_last = 0` + 加回 3 次上限)。核对 1815caf 后确认:**删掉 `g_loop_cut_last = 0` 会让第二次断开不再计数**(FLAG_CUT 0→1 时 last 仍为 1,边沿检测失败)。且 3 次上限原意是给 LED 快闪,但小程序要读"上电后持续累计的断开次数"——**一个变量无法同时满足两个需求,拆成两个**。
|
||||||
|
|
||||||
|
### 改动(王工确认方案)
|
||||||
|
|
||||||
|
| 文件 | 改动 |
|
||||||
|
|------|------|
|
||||||
|
| `peripheral_main.c` | ① 恢复重连分支 `g_loop_cut_last = 0`(边沿记忆同步,1815caf 修复回归防御);② 新增 `uint32_t g_loop_cut_total`(上电持续累计,不截断);③ 断开计数处 `g_loop_cut_amount++`(3 次截断,LED 用)+ `g_loop_cut_total++`(不截断) |
|
||||||
|
| `cmcng.h` | extern `g_loop_cut_total` |
|
||||||
|
| `dbn_ble_srv.c` | 0xC0 偏移 4-6(3B)与 0x24 偏移 5-6(2B)上报改用 `g_loop_cut_total` |
|
||||||
|
| `docs/ble-protocol.md` | 固件版本 V4.20→V4.31;断开次数字段标注"上电持续累计,不截断" |
|
||||||
|
| `docs/product-manual.md` | 版本历史补 V4.30/V4.31 |
|
||||||
|
| `docs/technical-spec.md` | cut_amount 语义更新 + V4.31 变更说明 + 修订记录 V1.1 |
|
||||||
|
|
||||||
|
### 要点
|
||||||
|
|
||||||
|
- **双变量语义**:`g_loop_cut_amount`(≤3)= LED 黄灯快闪指示;`g_loop_cut_total`(uint32 无上限)= 小程序读的真实断开次数
|
||||||
|
- 上电未连线圈时两个变量上报值仍为 1(`g_loop_power_up_state == 0 ? 1 : ...`)
|
||||||
|
- `INIT_VD()` 不复位两个计数变量(BLE 上报语义),仅边沿记忆 `g_loop_cut_last` 在重连分支复位
|
||||||
|
- 版本号 cmcng.h `FIRMWARE_VER` = "4.31"(V4.30 合并整理由王工在 MRS 完成,本仓库同步 bump)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 2026-08-26 — 0x24 追加归一化基数 LOOP_MEASURE_BASE(协议 V1.1)
|
## 2026-08-26 — 0x24 追加归一化基数 LOOP_MEASURE_BASE(协议 V1.1)
|
||||||
|
|
||||||
### 背景
|
### 背景
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# DLD110SV4 产品手册
|
# DLD110SV4 产品手册
|
||||||
|
|
||||||
> 单线圈蓝牙车辆检测器 | 型号: DLD110SV4 | 版本: V4.20
|
> 单线圈蓝牙车辆检测器 | 型号: DLD110SV4 | 版本: V4.31
|
||||||
> 适用于停车场、收费站、交通卡口等场景的车辆到达/离开检测
|
> 适用于停车场、收费站、交通卡口等场景的车辆到达/离开检测
|
||||||
> 通过蓝牙小程序远程配置参数、OTA 升级、实时查看检测状态
|
> 通过蓝牙小程序远程配置参数、OTA 升级、实时查看检测状态
|
||||||
|
|
||||||
@@ -272,6 +272,8 @@ DLD110SV4 配备 1 个绿色状态指示灯 LEDA (PB22) 和 1 个红色电源指
|
|||||||
| V4.00 | — | 初始版本(旧算法) |
|
| V4.00 | — | 初始版本(旧算法) |
|
||||||
| V4.20 | 2026-07-18 | 算法移植 DLD154V4B V2.0,删除旧线圈算法 |
|
| V4.20 | 2026-07-18 | 算法移植 DLD154V4B V2.0,删除旧线圈算法 |
|
||||||
| V4.21 | 2026-07-20 | variation 3B 上报;全项目 GBK→UTF-8;线圈重连保留 VD_FLAG |
|
| V4.21 | 2026-07-20 | variation 3B 上报;全项目 GBK→UTF-8;线圈重连保留 VD_FLAG |
|
||||||
|
| V4.30 | 2026-08 | 代码整理合并(断开计数/指示灯逻辑调整) |
|
||||||
|
| V4.31 | 2026-08-26 | 0x24 追加 LOOP_MEASURE_BASE 归一化基数;断开次数改为上电持续累计(g_loop_cut_total),LED 快闪用 3 次上限(g_loop_cut_amount) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# DLD110SV4 技术规格书
|
# DLD110SV4 技术规格书
|
||||||
|
|
||||||
> 单路线圈蓝牙车辆检测器 | 固件版本: V4.20 | 文档版本: V1.0
|
> 单路线圈蓝牙车辆检测器 | 固件版本: V4.31 | 文档版本: V1.0
|
||||||
> 本文档面向工程开发、系统集成及故障深度分析
|
> 本文档面向工程开发、系统集成及故障深度分析
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -361,12 +361,14 @@ DLD110SV4 通过 BLE GATT 与小程序通信,协议基于 DBN (Device Binary N
|
|||||||
| 字段 | 字节 | 说明 |
|
| 字段 | 字节 | 说明 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
| loop_state | 1 | 线圈状态 |
|
| loop_state | 1 | 线圈状态 |
|
||||||
| cut_amount | 3 | 累计断开次数 (≤3) |
|
| cut_amount | 3 | 累计断开次数(上电持续累计,不截断;上电未连时为 1) |
|
||||||
| frequent | 3 | 实时频率 (Hz), 小端序 |
|
| frequent | 3 | 实时频率 (Hz), 小端序 |
|
||||||
| variation | **3** | Origin − CAPVD, 有符号 int24, 小端序 |
|
| variation | **3** | Origin − CAPVD, 有符号 int24, 小端序 |
|
||||||
|
|
||||||
> **V4.20 变更**:`variation` 从 2B 升级为 3B 有符号(int24),范围 ±8,388,607,完整覆盖 2^19 幅值基准。旧版 2B 无符号 ±32767 截断已废弃。
|
> **V4.20 变更**:`variation` 从 2B 升级为 3B 有符号(int24),范围 ±8,388,607,完整覆盖 2^19 幅值基准。旧版 2B 无符号 ±32767 截断已废弃。
|
||||||
|
|
||||||
|
> **V4.31 变更**:① 0x24 读参响应追加偏移 8-10 = LOOP_MEASURE_BASE(3B LE = 524288),供第三方 variation 归一化换算 ΔL/L(`ΔL/L ≈ -2×variation/LOOP_MEASURE_BASE`);② 线圈断开次数改为**上电后持续累计**(`g_loop_cut_total`,不截断),LED 快闪仍用 3 次上限(`g_loop_cut_amount`);③ 恢复重连时 `g_loop_cut_last = 0` 边沿记忆同步(修复第二次断开不计数)。
|
||||||
|
|
||||||
### 8.3 可配置参数
|
### 8.3 可配置参数
|
||||||
|
|
||||||
通过 BLE 读写命令配置:
|
通过 BLE 读写命令配置:
|
||||||
@@ -450,5 +452,6 @@ DLD110SV4/
|
|||||||
| 版本 | 日期 | 说明 |
|
| 版本 | 日期 | 说明 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
| V1.0 | 2026-07-20 | 技术规格书初版 (固件 V4.20) |
|
| V1.0 | 2026-07-20 | 技术规格书初版 (固件 V4.20) |
|
||||||
|
| V1.1 | 2026-08-26 | 同步固件 V4.31:LOOP_MEASURE_BASE、断开次数持续累计、cut_amount 字段语义更新 |
|
||||||
|
|
||||||
> **产品手册**(安装指南、故障排查、使用说明等)请参阅 [产品手册](product-manual.md)
|
> **产品手册**(安装指南、故障排查、使用说明等)请参阅 [产品手册](product-manual.md)
|
||||||
|
|||||||
Reference in New Issue
Block a user