docs(devlog): 记录 variation 2B->3B有符号升级 (V1.05)

- vd960Loop/docs/devlog.md: 组包端改动(uint32->int32,方案B,饱和防回绕),
  背景/影响范围/验证
- vd960DBN/docs/devlog.md: 接收端4处联动(结构体/解析步长/符号扩展/
  fast_mode abs阈值), 缓冲核查
两端均标注必须同版本发布
This commit is contained in:
wangfq
2026-07-14 16:48:25 +08:00
parent bfc9646e48
commit 82e01cd337
2 changed files with 82 additions and 0 deletions
+40
View File
@@ -4,6 +4,46 @@
---
## 2026-07-14 — variation 上报量 2B→3B 有符号 (协议 V1.05)
### 背景
`uart_report_packet_loop_acs` 上报的变化量 `variation` 用于**后台离线跟踪分析车检器算法**(判决裕量、基线跟踪行为)。原实现为 **2 字节无符号 + 取绝对值**,存在两个致命缺陷:
1. **回绕污染**`variation` 是 CAPVD 域的量(量级 ~131072,非 Hz)。大车/大金属全覆盖时偏差可超 65535 → 2B 回绕成小值,后台看到"大信号突然变小"的假象,分析数据作废。
2. **方向丢失**`|Origin CAPVD|` 抹掉符号,分不清"车/金属进入(CAPVD 掉到基线下)"与"反向漂移/异常抬升(CAPVD 升到基线上)",两者判决意义相反。
### 改动 (组包段)
```c
// 旧: uint32_t variation = |Origin - CAPVD| (2B LE)
// 新: 3B LE 有符号补码, 方案B定义
int32_t variation = (int32_t)unit->loop_Origin - (int32_t)unit->loop_CAPVD;
if (variation > 8388607) variation = 8388607; // +2^23-1 饱和防回绕
if (variation < -8388608) variation = -8388608; // -2^23 饱和
// 低字节在前, 发 3 字节
```
- **方案B**`variation = Origin CAPVD`。**正值** = 当前值低于基线(车/裕量方向,与旧版语义连续);**负值** = 反向漂移。
- **饱和限幅** ±2²³,彻底杜绝回绕。
- 每通道单元 **11B → 12B**,整帧 52B → **56B**(仍 < `BUFF_STACK_SIZE=64`,缓冲安全)。
### 影响范围 & 联动
| 端 | 变更 |
|------|------|
| `main.c` 组包 | `uint32_t``int32_t`3B LE + 饱和 |
| 协议文档 | `DLD960Loop_串口通信协议.md` V1.05:字段表、Len 47→51、示例报文重算 |
| **vd960DBN** | 解析步长 11→12、misc 偏移右移 1B、3B 解码 + **bit23 符号扩展**、fast_mode 改 `abs(variation)` |
⚠️ **Loop 固件与 DBN 固件必须同版本发布**——步长死绑定,任一端用旧固件则 4 通道数据整体错位。
### 验证
本地 gcc 隔离单测(编解码往返 / 符号扩展 / 双向饱和 / 方向语义 / fast_mode)全通过。关键:大车 diff=100000 旧版回绕成 34464,新版正确保留 100000。
---
## 2026-06-26 — 多项可配置化改造
### 1. 上报频率从 raw CAPVD 改为实际线圈频率