docs(协议): variation 值域勘误 V1.07 — ±8388607 → −8388608 ~ +8388607
统一为 3B 补码标准值域 (-2^23 ~ +2^23-1), 对齐代码负向饱和边界 0x800000 - DLD960Loop_串口通信协议.md: variation 字段值域修正 + 修订记录 V1.07 - variation-analysis.md: 头部版本引用/§1/§5.1 表格/§5.6.3 口径小注同步 - devlog.md: 2026-08-25 条目追加勘误说明 代码无改动 (main.c 饱和边界本就正确)
This commit is contained in:
@@ -215,7 +215,7 @@ SensData:传感数据
|
||||
| 配置 1 | 1 | freq\_level(2bit), Direction(1bit),freq\_type(1bit), sens(4bit) | 线圈 1 配置freq\_level:高低频,两个比特位,00 表示高频(33nF),01表示中高(43nF), 10表示中低(66nF), 11表示低频(76nF)。Direction: 0 表示触发,1 表示方向判别,freq\_type: 0 表示初始频率,1 表示当前实时频率。sens:低四位表示当前的灵敏度等级 |
|
||||
| 线圈评估条件 | 1 | condition(4bit), loop\_state(1bit),<br>car\_state(1bit),<br>report\_msic(2bit) | loop\_condition 正常(0)有效,环境状态条件(环境状态评估值,值越大,干扰越大),高四位有效。低四位中 ,其中第3位表示线圈状态,0 表示正常,1 表示线圈断开;第 2 位表示有无车,0 表示无车,1 表示有车;低两位表示**杂项类型**,0b00表示时间量,0b01表示线圈断开次数;0b10表示车流量数;0b11表示继电器输出次数 |
|
||||
| 频率 1 | 3 | frequent | 低字节在前,无符号 |
|
||||
| 变化量 1 | 3 | variation | **有符号** 3 字节,低字节在前(小端),补码表示。定义 `variation = loop_Origin − loop_CAPVD`(基线 − 当前值)。**正值**表示当前值低于基线(车辆/金属进入,检测裕量方向);**负值**表示当前值高于基线(反向漂移/异常抬升)。值域 ±8388607(±2²³−1),发送端已做饱和限幅,不会回绕。<br>**接收端解析**:读入 3 字节后须做符号扩展——`v = b0\|(b1<<8)\|(b2<<16); if (v & 0x800000) v \|= 0xFF000000;` |
|
||||
| 变化量 1 | 3 | variation | **有符号** 3 字节,低字节在前(小端),补码表示。定义 `variation = loop_Origin − loop_CAPVD`(基线 − 当前值)。**正值**表示当前值低于基线(车辆/金属进入,检测裕量方向);**负值**表示当前值高于基线(反向漂移/异常抬升)。值域 −8388608 ~ +8388607(−2²³ ~ +2²³−1,3B 补码标准值域),发送端已做饱和限幅,不会回绕。<br>**接收端解析**:读入 3 字节后须做符号扩展——`v = b0\|(b1<<8)\|(b2<<16); if (v & 0x800000) v \|= 0xFF000000;` |
|
||||
| 杂项 | 4 | in\_out\_passtime/cut\_amount/flow\_amount | **杂项类型**,可能是时间量,也可能是线圈断开次数、车流量数,说明:<br>1、时间量有两种类型,通过时间或车间距,**50ms 为单位**(固件 50ms tick,TMR15 5ms×10 分频)。通过时间是从有车开始到车辆离开的时间(上报时car\_state 为0);车间距是 从上一次车辆离开到有车时候的时间(上报时car\_state 为1)。非0有效。<br>2、线圈断开次数。<br>3、车流量数。<br>4、继电器输出次数。 |
|
||||
|
||||
eg:
|
||||
@@ -261,3 +261,4 @@ FE 38 校验字节(XOR=0xFE, SUM=0x38)
|
||||
| V1.04 | 2026-07-02 | 主动上报增加继电器输出次数 类型 | wangfq |
|
||||
| V1.05 | 2026-07-14 | 多线圈上报(0x0C)变化量 variation 由 2 字节无符号扩展为 **3 字节有符号**(补码, 小端),定义 `variation = Origin − CAPVD`(正=车/裕量, 负=反向漂移);每单元 11→12 字节,Len 47→51。接收端须做符号扩展。**Loop 固件与 DBN 固件须同版本发布。** | wangfq |
|
||||
| V1.06 | 2026-07-15 | 修正杂项时间量单位说明:5ms → **50ms**(对齐固件 50ms tick 实现,TMR15 5ms×10 分频) | wangfq |
|
||||
| V1.07 | 2026-08-25 | variation 值域表述勘误:`±8388607` → **−8388608 ~ +8388607**(对齐代码负向饱和边界 0x800000,3B 补码标准值域) | wangfq |
|
||||
@@ -46,6 +46,17 @@ variation/Origin = 1 − √(1 + ΔL/L₀) 精确
|
||||
|
||||
工具四模式实测通过,正反算自洽(ΔL/L=0.33% ↔ variation=216 @ Origin=131072)。
|
||||
|
||||
### 协议文字勘误(协议 V1.07)
|
||||
|
||||
用户指出 §5.6.3 记录的口径差异应直接改协议:原文 `±8388607` 不对称,负向边界少了 1。统一为 **−8388608 ~ +8388607**(3B 补码标准值域 −2²³ ~ +2²³−1,对齐代码负向饱和边界 0x800000),后台按文档实现时不会对 0x800000 边界犯嘀咕。
|
||||
|
||||
| 文件 | 变更 |
|
||||
|------|------|
|
||||
| `DLD960Loop_串口通信协议.md` | variation 字段值域文字修正 + 修订记录 V1.07 |
|
||||
| `variation-analysis.md` | 头部版本引用 → V1.07;§1 值域;§5.1 表格;§5.6.3 口径小注改写 |
|
||||
|
||||
代码无改动(`main.c` 饱和边界本就是 −8388608 ~ +8388607)。
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-14 — variation 上报量 2B→3B 有符号 (协议 V1.05)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> 分析对象:`uart_report_packet_loop_acs()` 中上报的 **变化量 variation**
|
||||
> 涉及文件:`src/main.c`(组包)、`src/TaskLoop.c`(基线/IIR 更新)、`inc/TaskLoop.h`(参数宏)
|
||||
> 协议版本:与《DLD960Loop_串口通信协议.md》**V1.05** 同步(2026-07-14:variation 无符号 2B → **有符号 3B**,见 §5)
|
||||
> 协议版本:与《DLD960Loop_串口通信协议.md》**V1.07** 同步(2026-07-14 V1.05:variation 无符号 2B → **有符号 3B**,见 §5;2026-08-25 V1.07:值域表述勘误统一为 **−8388608 ~ +8388607**)
|
||||
> 结论层次:物理层 → 信号层 → 数据层 → 上报调度层
|
||||
|
||||
---
|
||||
@@ -38,7 +38,7 @@ g_pkg_uart_report.pkg[i++] = (uint8_t)((variation >> 16) & 0xFF);
|
||||
```
|
||||
|
||||
- **带符号带方向**:正 = 检测裕量方向(与旧版有车时的数值语义连续),负 = 反向漂移
|
||||
- 3 字节小端补码,值域 ±2²³−1,发送端 **饱和限幅,不会回绕**
|
||||
- 3 字节小端补码,值域 −2²³ ~ +2²³−1,发送端 **饱和限幅,不会回绕**
|
||||
- 旧版(≤V1.04)为 2B 无符号绝对值,缺陷与变更动机见 **§5**
|
||||
|
||||
---
|
||||
@@ -136,7 +136,7 @@ variation: ╱| ╱| ╱| ╱| ← 锯齿波!
|
||||
|---|---|---|
|
||||
| 计算式 | `\|Origin − CAPVD\|` 取绝对值 | `Origin − CAPVD` 带符号 |
|
||||
| 编码 | 2 字节无符号,小端 | **3 字节有符号补码**,小端 |
|
||||
| 值域 | 0~65535,**溢出回绕** | ±8388607,**发送端饱和限幅** |
|
||||
| 值域 | 0~65535,**溢出回绕** | −8388608 ~ +8388607,**发送端饱和限幅** |
|
||||
| 方向信息 | 无 | 正 = 车/金属进入,负 = 反向漂移 |
|
||||
| 每通道单元 | 11 字节 | **12 字节** |
|
||||
| 帧 Len / 总长(4 路无分包) | 0x2F=47 / 52B | **0x33=51 / 56B**(仍 < `BUFF_STACK_SIZE=64`,缓冲安全) |
|
||||
@@ -182,7 +182,7 @@ if (v & 0x800000) v |= 0xFF000000; // bit23 = 1 → 负数,符号扩展
|
||||
|
||||
1. **Loop 与 DBN 固件必须同版本发布**。单元步长 11↔12 死绑定,任一端用旧固件,4 通道数据整体错位。**且帧级 XOR/SUM 校验依然通过**(校验的是整帧,不感知单元边界)——这是**静默数据损坏**,不会报错,只会得到一堆"看起来合理"的错值。
|
||||
2. 上位机若想兼容新旧固件,可用 **Len 字节区分**:4 路无分包时 Len=0x2F(47) 为旧格式(2B 无符号),Len=0x33(51) 为新格式(3B 有符号),按帧动态选解析器。
|
||||
3. 口径小注:协议文字写值域 ±8388607,代码负向饱和到 −8388608(0x800000)。解析端符号扩展后无歧义,且实际物理量远到不了该量级(CAPVD 全量程才 ~131072,3B 有 **~64 倍余量**),不构成问题,仅作记录。
|
||||
3. 口径说明(V1.07 已勘误):协议文字与代码统一为 **−8388608 ~ +8388607**(0x800000 是合法负边界)。解析端符号扩展后无歧义;实际物理量远到不了该量级(CAPVD 全量程才 ~131072,3B 有 **~64 倍余量**),边界仅作记录。
|
||||
|
||||
### 5.7 对分析工作的直接增益
|
||||
|
||||
|
||||
Reference in New Issue
Block a user