feat(DLD154Pro): V3.04 — 0x24追加LOOP_MEASURE_BASE归一化基数(与DLD110S对齐) + 文档同步

This commit is contained in:
wangfq
2026-08-26 18:10:06 +08:00
parent fcbe7698a3
commit 16f5e9b738
6 changed files with 57 additions and 9 deletions
@@ -635,6 +635,10 @@ void manage_dbn_ble_default(uint8_t *pkg, uint8_t len)
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_amount));
tmp_ble_buf[i++] = (uint8_t)(g_loop_cut_amount >> 8); tmp_ble_buf[i++] = (uint8_t)(g_loop_cut_amount >> 8);
tmp_ble_buf[i++] = g_loop_cng_unit.direction_mode; tmp_ble_buf[i++] = g_loop_cng_unit.direction_mode;
/* V3.04: 追加归一化基数 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 >> 8);
tmp_ble_buf[i++] = (uint8_t)(LOOP_MEASURE_BASE >> 16);
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, i); set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, i);
// PRINT("\nGet_Cjq_param\n"); // PRINT("\nGet_Cjq_param\n");
@@ -17,10 +17,13 @@
*/ */
#define PRODUCT_MODEL "DLD154Pro" #define PRODUCT_MODEL "DLD154Pro"
#define FIRMWARE_VER "3.03" #define FIRMWARE_VER "3.04"
#define HARDWARE_VER "3.01" #define HARDWARE_VER "3.01"
#define FIRMWARE_VER_MAIN 3 #define FIRMWARE_VER_MAIN 3
#define FIRMWARE_VER_SUB 3 #define FIRMWARE_VER_SUB 4
/* 归一化基数: variation 换算 dL/L 时除以该值 (2^19=524288, 必须与 peripheral_main.c MEASUREMENT_BASE 同步) */
#define LOOP_MEASURE_BASE 524288L
#define HARDWARE_VER_MAIN 3 #define HARDWARE_VER_MAIN 3
#define HARDWARE_VER_SUB 1 #define HARDWARE_VER_SUB 1
+11 -5
View File
@@ -1,7 +1,7 @@
# DLD154Pro 蓝牙小程序接口协议 # DLD154Pro 蓝牙小程序接口协议
> 依据源码整理:`BLE/DLD154Pro_Peripheral_28K/APP/dbn_ble_srv.c`(主逻辑)、`peripheral.c`/`Profile/gattprofile.c`BLE 服务)、`include/storage.h`(配置结构)、`include/cmcng.h`(常量) > 依据源码整理:`BLE/DLD154Pro_Peripheral_28K/APP/dbn_ble_srv.c`(主逻辑)、`peripheral.c`/`Profile/gattprofile.c`BLE 服务)、`include/storage.h`(配置结构)、`include/cmcng.h`(常量)
> 固件版本:V3.03cmcng.h `FIRMWARE_VER`| 硬件版本:V3.01 | 产品型号:DLD154Pro > 固件版本:V3.04cmcng.h `FIRMWARE_VER`| 硬件版本:V3.01 | 产品型号:DLD154Pro
--- ---
@@ -84,7 +84,7 @@ dsum = Header + Len + CMD + Data[0] + ... + Data[N-1]; // 取低 8 位
|------|------|------| |------|------|------|
| 0-5 | 6 | MAC 地址(MACAddr[6] | | 0-5 | 6 | MAC 地址(MACAddr[6] |
| 6-7 | 2 | 硬件版本 MAIN/SUBV3.01 → 03 01 | | 6-7 | 2 | 硬件版本 MAIN/SUBV3.01 → 03 01 |
| 8-9 | 2 | 固件版本 MAIN/SUBV3.03 → 03 03 | | 8-9 | 2 | 固件版本 MAIN/SUBV3.04 → 03 04 |
| 10 | 1 | 产品型号长度 | | 10 | 1 | 产品型号长度 |
| 11.. | N | 产品型号 ASCII"DLD154Pro" | | 11.. | N | 产品型号 ASCII"DLD154Pro" |
| .. | 6 | 设备编号(g_dev_number[6] | | .. | 6 | 设备编号(g_dev_number[6] |
@@ -121,7 +121,7 @@ g_hold_time = exist_mode * 20 * 5 (tick)
### 5.4 0x24 读车检器参数 ### 5.4 0x24 读车检器参数
无 Data。响应 Data8B): 无 Data。响应 Data11B):
| 偏移 | 内容 | | 偏移 | 内容 |
|------|------| |------|------|
@@ -130,9 +130,15 @@ g_hold_time = exist_mode * 20 * 5 (tick)
| 2 | `output_mode \| (loopSafe_Timeout << 3)` | | 2 | `output_mode \| (loopSafe_Timeout << 3)` |
| 3 | exist_mode | | 3 | exist_mode |
| 4 | `sens_list.total << 4`(灵敏度档数,高 4 位) | | 4 | `sens_list.total << 4`(灵敏度档数,高 4 位) |
| 5 | 线圈断开次数低字节(g_loop_cut_amount | | 5 | 线圈断开次数低字节(g_loop_cut_amount,上电持续累计 |
| 6 | 线圈断开次数高字节 | | 6 | 线圈断开次数高字节 |
| 7 | direction_mode | | 7 | direction_mode |
| 8-10 | **归一化基数 LOOP_MEASURE_BASE3B LE= 524288**V3.04 追加) |
> ⚠ **偏移 8-10 用途(V3.042026-08-26 追加)**variation 换算 ΔL/L 的归一化基数。
> 第三方应用连接后读一次 0x24 缓存该值:`Δf/f ≈ variation / LOOP_MEASURE_BASE``ΔL/L ≈ -2 × variation / LOOP_MEASURE_BASE`。
> **背景**DLD154Pro 的 MEASUREMENT_BASE = 5242882^19 @60MHz),与 DLD110S 相同、与 DLD154V4B 的 131072 不同。固件显式上报后第三方无需猜测(曾出现照搬 131072 导致百分比放大 4 倍的问题,DLD110S 2026-08-26 实测发现)。
> 向后兼容:老小程序只读前 8B 不受影响;新小程序读 11B。
### 5.5 0x31 读写 UART 参数 ### 5.5 0x31 读写 UART 参数
@@ -228,7 +234,7 @@ Data`[enable] [interval] [timeout_min]`
│ └─ Header = 0 (单包) │ └─ Header = 0 (单包)
└─ Magic = 0x8F └─ Magic = 0x8F
芯片 → Char4 notify: 8F 00 10 XX [MAC6][03 01][03 03][0A "DLD154Pro"][dev_no6][00 00][00 00] [XOR] [SUM] 芯片 → Char4 notify: 8F 00 10 XX [MAC6][03 01][03 04][0A "DLD154Pro"][dev_no6][00 00][00 00] [XOR] [SUM]
Len=0x10(16): CMD + 15B Data Len=0x10(16): CMD + 15B Data
``` ```
+33
View File
@@ -4,6 +4,39 @@
--- ---
## 2026-08-26 — V3.040x24 追加 LOOP_MEASURE_BASE 归一化基数(与 DLD110S 对齐)
### 背景
DLD110S 2026-08-26 实测发现小程序评估把 variation 归一化基数写错(照搬 DLD154V4B 的 131072DLD110S/154Pro 实为 524288 2^19 @60MHz)→ 所有百分比放大 4 倍。根治方案:固件 0x24 显式上报基数。DLD110S 已完成(协议 V1.1),**DLD154Pro 同步对齐**。
### 改动
| 文件 | 改动 |
|------|------|
| `APP/include/cmcng.h` | 版本 V3.03→V3.04;新增 `#define LOOP_MEASURE_BASE 524288L` |
| `APP/dbn_ble_srv.c` | 0x24 读参响应尾部追加 3B LELOOP_MEASURE_BASE(响应 8B→11B,仍单包 ≤14B,无分包) |
| `docs/ble-protocol.md` | §5.4 响应表加偏移 8-10 + 换算公式 + 背景说明 |
| `docs/product-manual.md` | 版本号 V3.04 + 版本历史 |
| `docs/technical-spec.md` | 版本号 V3.04 + 版本历史 |
### 对照 110S 差异结论(不需要改的部分)
- **断开次数双变量**:154Pro 不需要——LED 快闪不依赖 cut_amount 次数(走 `g_disconnect_active`),`g_loop_cut_amount` 本身就是上电持续累计,无 3 次上限
- **0x24 偏移 7 direction_mode**154Pro 已经是完整字节(dbn_ble_srv.c:637),与 110S V4.31 语义一致
- **重连 g_loop_cut_last = 0**154Pro 已有(peripheral_main.c:815
- ⚠ 位含义差异:两产品 direction_mode 低 4 位语义不同(110S=方向/触发;154Pro=输出融合模式 7 种),小程序按产品区分
### 涉及文件
| 文件 | 内容 |
|------|------|
| `BLE/DLD154Pro_Peripheral_28K/APP/include/cmcng.h` | V3.04 + LOOP_MEASURE_BASE |
| `BLE/DLD154Pro_Peripheral_28K/APP/dbn_ble_srv.c` | 0x24 追加 3B |
| `docs/ble-protocol.md` / `product-manual.md` / `technical-spec.md` | 同步 V3.04 |
---
## 2026-08-25 — 蓝牙小程序接口协议文档 ## 2026-08-25 — 蓝牙小程序接口协议文档
### 背景 ### 背景
+2 -1
View File
@@ -1,6 +1,6 @@
# DLD154Pro 产品说明书 # DLD154Pro 产品说明书
> 单路线圈蓝牙车辆检测器 | 型号: DLD154Pro | 版本: V3.03 > 单路线圈蓝牙车辆检测器 | 型号: DLD154Pro | 版本: V3.04
> 适用于停车场、收费站、交通卡口等场景的车辆到达/离开检测 > 适用于停车场、收费站、交通卡口等场景的车辆到达/离开检测
--- ---
@@ -284,6 +284,7 @@ DLD154Pro 支持两种 RS485 协议,通过 BLE 小程序切换:
| 版本 | 日期 | 说明 | | 版本 | 日期 | 说明 |
|------|------|------| |------|------|------|
| V3.04 | 2026-08-26 | 0x24 追加 LOOP_MEASURE_BASE 归一化基数(3B LE=524288);断开次数语义明确为上电持续累计 |
| V3.03 | 2026-07-31 | 硬件看门狗 (WWDG ~558ms 超时)OTA 安全关闭看门狗 | | V3.03 | 2026-07-31 | 硬件看门狗 (WWDG ~558ms 超时)OTA 安全关闭看门狗 |
| V3.01 | 2026-07-28 | 光耦输出融合模式(6 种);LEDA 同步继电器状态 | | V3.01 | 2026-07-28 | 光耦输出融合模式(6 种);LEDA 同步继电器状态 |
| V3.00 | 2026-07-21 | 项目初始化:从 DLD110SV4 移植 + 硬件适配 CH591R | | V3.00 | 2026-07-21 | 项目初始化:从 DLD110SV4 移植 + 硬件适配 CH591R |
+2 -1
View File
@@ -1,6 +1,6 @@
# DLD154Pro 技术规格书 # DLD154Pro 技术规格书
> 单路线圈蓝牙车辆检测器 | 固件版本: V3.03 | 硬件版本: V3.01 > 单路线圈蓝牙车辆检测器 | 固件版本: V3.04 | 硬件版本: V3.01
> 本文档面向工程开发、系统集成及故障深度分析 > 本文档面向工程开发、系统集成及故障深度分析
--- ---
@@ -555,6 +555,7 @@ Magic | Addr/Sub | Len | CMD | Data | XOR | SUM
| 版本 | 日期 | 说明 | | 版本 | 日期 | 说明 |
|------|------|------| |------|------|------|
| V3.04 | 2026-08-26 | 0x24 响应追加 LOOP_MEASURE_BASE 归一化基数(3B LE=524288variation 换算 ΔL/L 用);断开次数语义明确为上电持续累计 |
| V3.03 | 2026-07-31 | 硬件看门狗 WWDG (~558ms 超时, 5ms tick + 500ms 喂狗)OTA 安全关闭看门狗 | | V3.03 | 2026-07-31 | 硬件看门狗 WWDG (~558ms 超时, 5ms tick + 500ms 喂狗)OTA 安全关闭看门狗 |
| V3.02 | 2026-07-31 | Modbus RTU 协议 + 主动上报;0x2C/HR 0x0012 复位改为 `SYS_ResetExecute()``g_loop_cut_amount` 累加修复;RS485 初始化时序调整 | | V3.02 | 2026-07-31 | Modbus RTU 协议 + 主动上报;0x2C/HR 0x0012 复位改为 `SYS_ResetExecute()``g_loop_cut_amount` 累加修复;RS485 初始化时序调整 |
| V3.01 | 2026-07-28 | 光耦输出模式完整实现 (6 种融合逻辑 + 状态机);LEDA 同步继电器状态 | | V3.01 | 2026-07-28 | 光耦输出模式完整实现 (6 种融合逻辑 + 状态机);LEDA 同步继电器状态 |