feat(vd960Loop): LOOP_MEASURE_BASE 归一化基数上报 (协议 V1.09)
跨产品 MEASUREMENT_BASE 对齐(2026-08-26 DLD110S ×4 事故):variation 是周期域 计数值,归一化必须除设备自身的 MEASUREMENT_BASE。960Loop 此前 0x64 读参响应裸发 参数,第三方平台无从换算(写死 131072 恰好蒙对,写 524288 就 ÷4 失真)。 - docs(DLD960Loop_串口通信协议.md): V1.09 — 0x64 响应尾部追加 3B LE LOOP_MEASURE_BASE(响应 34B→37B)+ 换算公式 ΔL/L≈-2×variation/BASE、 Δf/f≈variation/BASE + 修订记录 - inc/cmcng.h: #define LOOP_MEASURE_BASE 131072L(注释标明与 TaskLoop.h MEASUREMENT_BASE 同步) - src/main.c: CMD_DBN_GET_MCJQ_PARAM (0x64) handler for 循环后追加 3B LE - docs/devlog.md: 置顶 2026-08-27 条目 设计决策:常量走 0x64 查询响应(低频)不进 0xC0 高频帧(避免分包); 向后兼容老客户端(只读前 34B 不受影响)。 联动待办:DBN 侧对外(BLE/TCP/MQTT)暴露基数未落地。
This commit is contained in:
@@ -4,6 +4,40 @@
|
||||
|
||||
---
|
||||
|
||||
## 2026-08-27 — LOOP_MEASURE_BASE 归一化基数上报(协议 V1.09)
|
||||
|
||||
### 背景
|
||||
|
||||
跨产品 MEASUREMENT_BASE 对齐(2026-08-26 DLD110S ×4 事故:第三方小程序把 ΔL/L 报成 8.85%,真实 2.21%)。variation 是周期域计数值(`variation = Origin − CAPVD`,CAPVD ∝ √L),归一化必须除**设备自身**的 MEASUREMENT_BASE。960Loop 是产品线中唯一未上报基数的型号——0x64 读参响应裸发参数,第三方平台无从换算(写死 131072 恰好蒙对,写 524288 就 ÷4 失真)。
|
||||
|
||||
### 改动
|
||||
|
||||
| 文件 | 内容 |
|
||||
|------|------|
|
||||
| `docs/DLD960Loop_串口通信协议.md`(vd_960 仓库) | **V1.09**:0x64 响应尾部追加 3B LE `LOOP_MEASURE_BASE`(响应 34B→37B)+ 换算公式 + 修订记录 |
|
||||
| `inc/cmcng.h` | `#define LOOP_MEASURE_BASE 131072L`(注释标明与 TaskLoop.h MEASUREMENT_BASE 同步) |
|
||||
| `src/main.c` | `CMD_DBN_GET_MCJQ_PARAM` (0x64) handler for 循环后追加 3B LE(小端,响应 2+8×4+3=37B) |
|
||||
|
||||
### 换算公式(写入协议文档)
|
||||
|
||||
```
|
||||
Δf/f ≈ variation / LOOP_MEASURE_BASE (131072, AT32@120MHz)
|
||||
ΔL/L ≈ -2 × variation / LOOP_MEASURE_BASE (系数 2 来自 CAPVD ∝ √L 展开)
|
||||
```
|
||||
|
||||
### 设计决策
|
||||
|
||||
- 常量放 **0x64 查询响应**(低频),不进 0xC0 高频帧(每线圈 12B 已贴边,加字段触发分包)
|
||||
- 向后兼容:老客户端只读前 34B 不受影响;新客户端读 37B 拿基数
|
||||
- ⚠ 联动待办:DBN 侧对外(BLE/TCP/MQTT)暴露基数未落地——平台走网络协议评估时仍需加字段
|
||||
|
||||
### 验证
|
||||
|
||||
- ✅ `check_c_balance.py` 语法平衡 OK;编码保持 UTF-8+CRLF
|
||||
- [ ] 板级验证:0x64 响应长度 37B、尾部 3B = `00 00 02`(131072 LE)
|
||||
|
||||
---
|
||||
|
||||
## 2026-08-25 — 灵敏度 4 级制修复(协议 V1.08)
|
||||
|
||||
### 背景
|
||||
|
||||
@@ -25,6 +25,11 @@
|
||||
#define HARDWARE_VER_SUB 0
|
||||
#define HARDWARE_VER_SSUB 0
|
||||
|
||||
// LOOP_MEASURE_BASE: variation 归一化基数 (协议 0x64 响应尾部 3B LE 上报)
|
||||
// ⚠ 必须与 TaskLoop.h 的 MEASUREMENT_BASE 同步 (AT32F421 @120MHz = 2^17 = 131072)
|
||||
// 第三方评估换算: Δf/f ≈ variation/LOOP_MEASURE_BASE; ΔL/L ≈ -2×variation/LOOP_MEASURE_BASE
|
||||
#define LOOP_MEASURE_BASE 131072L
|
||||
|
||||
|
||||
#define FUNCTION_A 0x01 // 二次判断
|
||||
#define FUNCTION_B 0x02 // 二次判断增强条件判断
|
||||
|
||||
@@ -839,6 +839,11 @@ void manage_dbn_ble_default(uint8_t *pkg, uint8_t len)
|
||||
_cng++;
|
||||
}
|
||||
|
||||
// LOOP_MEASURE_BASE: variation 归一化基数 (3B LE, 与 TaskLoop.h MEASUREMENT_BASE 同步)
|
||||
tmp_ble_buf[i++] = (uint8_t)(LOOP_MEASURE_BASE & 0xFF);
|
||||
tmp_ble_buf[i++] = (uint8_t)((LOOP_MEASURE_BASE >> 8) & 0xFF);
|
||||
tmp_ble_buf[i++] = (uint8_t)((LOOP_MEASURE_BASE >> 16) & 0xFF);
|
||||
|
||||
response_uart_pkg(_cmd, tmp_ble_buf, i);
|
||||
|
||||
} break;
|
||||
|
||||
Reference in New Issue
Block a user