From 82e01cd33746b34e15a3165d774693fe44c04e57 Mon Sep 17 00:00:00 2001 From: wangfq Date: Tue, 14 Jul 2026 16:48:25 +0800 Subject: [PATCH] =?UTF-8?q?docs(devlog):=20=E8=AE=B0=E5=BD=95=20variation?= =?UTF-8?q?=202B->3B=E6=9C=89=E7=AC=A6=E5=8F=B7=E5=8D=87=E7=BA=A7=20(V1.05?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - vd960Loop/docs/devlog.md: 组包端改动(uint32->int32,方案B,饱和防回绕), 背景/影响范围/验证 - vd960DBN/docs/devlog.md: 接收端4处联动(结构体/解析步长/符号扩展/ fast_mode abs阈值), 缓冲核查 两端均标注必须同版本发布 --- vd960DBN/docs/devlog.md | 42 ++++++++++++++++++++++++++++++++++++++++ vd960Loop/docs/devlog.md | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/vd960DBN/docs/devlog.md b/vd960DBN/docs/devlog.md index 741a899..17d5102 100644 --- a/vd960DBN/docs/devlog.md +++ b/vd960DBN/docs/devlog.md @@ -6,6 +6,48 @@ --- +## 2026-07-14 — Loop 上报 variation 解析升级 2B→3B 有符号 (协议 V1.05) + +### 背景 + +Loop MCU 上报的 `SENS_MULTI_LOOP_DYNAMIC (0xC0/0x0C)` 中变化量 `variation` 由 2B 无符号扩展为 **3B 有符号补码**(详见 Loop 侧 devlog 与协议 V1.05)。DBN 作为接收/转发端,解析逻辑须同步升级,否则每通道单元 12B 会被按旧的 11B 步长错位解析,**4 通道数据全错**。 + +### 改动 (4 处) + +**1. `loop_uart_proto.h` — 结构体字段类型** +```c +// uint16_t variation; -> int32_t variation; // 3B有符号, = Origin-CAPVD +``` + +**2. `loop_uart_proto.c` — 解析函数 `lup_parse_sensor_report`** +- 每通道单元步长 `i*11` → `i*12` +- 通道数计算 `data_len/11` → `data_len/12` +- 频率仍 3B 无符号;**变化量 3B 解码 + bit23 符号扩展**: +```c +int32_t v = c[5] | ((int32_t)c[6] << 8) | ((int32_t)c[7] << 16); +if (v & 0x800000) v |= (int32_t)0xFF000000; // 符号扩展, 漏了负值会变~1600万大正数 +cs->variation = v; +``` +- 杂项偏移 `c[7..10]` → `c[8..11]`(整体右移 1B) + +**3. `iot_mqtt_srv.c` — fast_mode 阈值判断(隐藏坑)** +```c +// variation 变有符号后, 车进入(正)/反向漂移(负) 都应触发加速上报 +int32_t av = (v >= 0) ? v : -v; +if (av >= IOT_MQTT_VARIATION_THRESHOLD) fast_mode = 1; // 原 variation>=10 会漏掉负向 +``` + +**4. JSON 输出(`iot_mqtt_srv.c` / `tcp_json_srv.c`)** +- `"diff":%d` / `"variation":%d` 格式符不变——CH32V208 上 `int32_t == int`,`%d` 天然正确输出负号,无需改动。 + +### 缓冲核查 + +整帧 52B→56B,DBN 侧 `g_pkg_uart_2.pkg[BUFF_STACK_SIZE=512]`、`LUP_MAX_PKG_LEN=70` 均远大于 56B,接收无截断;转发 MSS=576 不分片。 + +⚠️ **必须与 Loop 固件同版本发布**(步长死绑定)。 + +--- + ## 2026-06-26 — TCP JSON 协议框架搭建 ### 1. TCP JSON Server 基础实现 diff --git a/vd960Loop/docs/devlog.md b/vd960Loop/docs/devlog.md index 8a23d09..1cc0ac5 100644 --- a/vd960Loop/docs/devlog.md +++ b/vd960Loop/docs/devlog.md @@ -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 改为实际线圈频率