proto(V1.05): variation 由 2B无符号 扩展为 3B有符号
背景: variation 是遥测量, 用于离线跟踪分析车检器算法。原 2B 无符号 存在两个缺陷: (1)CAPVD域量级~131072, 大车全覆盖时偏差可超65535而回绕, 污染数据; (2)绝对值丢失方向, 分不清'车进入'与'反向漂移'。 改动 (三端联动, 同版本发布): - 协议 DLD960Loop_串口通信协议.md: 变化量 2B->3B有符号补码, 定义 variation=Origin-CAPVD (正=车/裕量, 负=反向漂移); 每单元11->12B, Len 47->51; 补符号扩展说明; 示例报文重算(XOR=FE SUM=38); 修订记录V1.05 - vd960Loop main.c: 组包 uint32->int32, Origin-CAPVD, 3B LE, +-2^23饱和防回绕 - vd960DBN loop_uart_proto.h: variation uint16->int32 - vd960DBN loop_uart_proto.c: 步长11->12, data_len/11->/12, misc偏移右移1B, variation 3B解码+bit23符号扩展 - vd960DBN iot_mqtt_srv.c: fast_mode 阈值判断改 abs(variation)>=10, 正负变化都加速 验证: 本地 gcc 隔离单测 编解码往返/符号扩展/饱和/方向语义/fast_mode 全通过; 大车 diff=100000 旧版回绕34464 新版正确保留。字节账: 帧56B < Loop缓冲64B < DBN缓冲512B < MSS576, 均不溢出。整体固件编译需在 Keil/MounRiver 侧完成。
This commit is contained in:
@@ -507,12 +507,16 @@ void uart_report_packet_loop_acs(uint8_t flag)
|
||||
g_pkg_uart_report.pkg[i++] = (uint8_t)((_frequent >> 8) & 0xFF);
|
||||
g_pkg_uart_report.pkg[i++] = (uint8_t)((_frequent >> 16) & 0xFF);
|
||||
|
||||
// 变化量 (2B, LE)
|
||||
uint32_t variation = (unit->loop_Origin > unit->loop_CAPVD)
|
||||
? (unit->loop_Origin - unit->loop_CAPVD)
|
||||
: (unit->loop_CAPVD - unit->loop_Origin);
|
||||
// 变化量 (3B, LE, 有符号补码) — V1.05
|
||||
// 定义: variation = Origin - CAPVD
|
||||
// 正值 = 当前值低于基线(车辆/金属进入, 检测裕量方向)
|
||||
// 负值 = 当前值高于基线(反向漂移/异常抬升)
|
||||
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 饱和
|
||||
g_pkg_uart_report.pkg[i++] = (uint8_t)(variation & 0xFF);
|
||||
g_pkg_uart_report.pkg[i++] = (uint8_t)((variation >> 8) & 0xFF);
|
||||
g_pkg_uart_report.pkg[i++] = (uint8_t)((variation >> 16) & 0xFF);
|
||||
|
||||
// 杂项值 (4B, LE)
|
||||
g_pkg_uart_report.pkg[i++] = (uint8_t)(_misc_val[j] & 0xFF);
|
||||
|
||||
Reference in New Issue
Block a user