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:
@@ -97,8 +97,9 @@ typedef struct {
|
||||
uint8_t loop_state : 1; // 0=正常, 1=断开
|
||||
uint8_t car_state : 1; // 0=无车, 1=有车
|
||||
uint8_t misc_type : 2; // 0=时间量, 1=断开次数, 2=车流量, 3=继电器输出次数
|
||||
uint32_t freq; // 频率 (3 bytes, little-endian)
|
||||
uint16_t variation; // 变化量 (2 bytes, little-endian)
|
||||
uint32_t freq; // 频率 (3 bytes, little-endian, 无符号)
|
||||
int32_t variation; // 变化量 (3 bytes, little-endian, 有符号补码) — V1.05
|
||||
// = Origin - CAPVD; 正=当前值低于基线(车/裕量), 负=反向漂移
|
||||
union {
|
||||
uint32_t passtime_ms; // 通过时间/车间距, 50ms单位 (misc_type=0)
|
||||
uint32_t cut_amount; // 线圈断开次数 (misc_type=1)
|
||||
|
||||
Reference in New Issue
Block a user