wangfq
|
77b667f1a0
|
chore(vd960Loop): V1.02 — 基线跟踪双向对称保护后版本号bump + devlog
- cmcng.h: FIRMWARE_VER 1.01→1.02, SUB 1→2 (SSUB=1保持)
- devlog: V1.02 条目(双向对称基线保护同步V4B V4.20 + 版本轨迹)
- 代码基线保护同步见前提交 4c4000e
|
2026-09-02 15:02:43 +08:00 |
|
wangfq
|
4c4000eb7d
|
fix(vd960Loop): 基线跟踪双向对称保护同步V4B V4.20 — 负variation铁块防Origin污染锁死
负偏差(dev>0,CAPVD>Origin)只冻结永不超时更新Origin, 对称窗口[-4×dlt,+4×dlt]
四路unit结构同步, 与DLD154V4B V4.20修复一致
|
2026-09-02 14:52:09 +08:00 |
|
wangfq
|
31ca3d66c3
|
bump(vd960Loop): FIRMWARE_VER 1.00 -> 1.01 (MAIN=1/SUB=1/SSUB=1)
CMD_DEV_Ver 上报字节: 1.1.1; 字符串版本 '1.01'
|
2026-08-28 09:48:06 +08:00 |
|
wangfq
|
d1fb357989
|
feat(vd960Loop): 看门狗升级双保险喂狗模式 + 超时对齐 V4B(1.64s)
对照 DLD154V4B V2.10(同款 AT32F421):
- 原直喂模式缺 ISR 活性检测: TMR15 ISR 死但主循环活 -> 看门狗永不复位(假活)
- 升级: TMR15 ISR 5ms 递增 g_wdg_counter + 主循环 poll_wdg() 500ms 才 reload
- 超时 3s(div64/rld1875) -> 1.64s(div16枚举/rld4095)
- wdt_feed 定义移至 TaskLoop.c 改名 poll_wdg, 与 V4B 同构
- 修正 main.c 注释矛盾(4687 vs 1875); 沿用 WDT_CLK_DIV_16 枚举写法避免
V4B 同源传值 bug
- 隔离测试 3 项断言全过(分频16/超时1638ms>500ms/10s喂20次/ISR死不喂)
|
2026-08-28 09:15:54 +08:00 |
|
wangfq
|
40e6648445
|
feat(vd960Loop): LOOP_MEASURE_BASE 归一化基数上报 (协议 V1.09)
跨产品 MEASUREMENT_BASE 对齐(2026-08-26 DLD110S ×4 事故):variation 是周期域
计数值,归一化必须除设备自身的 MEASUREMENT_BASE。960Loop 此前 0x64 读参响应裸发
参数,第三方平台无从换算(写死 131072 恰好蒙对,写 524288 就 ÷4 失真)。
- docs(DLD960Loop_串口通信协议.md): V1.09 — 0x64 响应尾部追加 3B LE
LOOP_MEASURE_BASE(响应 34B→37B)+ 换算公式 ΔL/L≈-2×variation/BASE、
Δf/f≈variation/BASE + 修订记录
- inc/cmcng.h: #define LOOP_MEASURE_BASE 131072L(注释标明与 TaskLoop.h
MEASUREMENT_BASE 同步)
- src/main.c: CMD_DBN_GET_MCJQ_PARAM (0x64) handler for 循环后追加 3B LE
- docs/devlog.md: 置顶 2026-08-27 条目
设计决策:常量走 0x64 查询响应(低频)不进 0xC0 高频帧(避免分包);
向后兼容老客户端(只读前 34B 不受影响)。
联动待办:DBN 侧对外(BLE/TCP/MQTT)暴露基数未落地。
|
2026-08-27 08:27:02 +08:00 |
|
wangfq
|
af95660c68
|
fix(vd960Loop): init_vd_single 灵敏度从配置读, 不再硬编码 2
现场日志: 配置 SENS=3/2/1/0, 检测全用 sens_in:36 (SENS=2 表值)
根因: main→para_store_init() 同步 loop_SensLevel=配置, 但任务启动后
INIT_VDs()→init_vd_single() 硬编码 loop_SensLevel=2 覆盖配置 → 全通道 SENS=2
修复: init_vd_single 改为 sens_level_from_config(
g_loop_cng_info.loop_cng[unit->loop_num].sensitvity)
另: flash 灵敏度表 sens[0]={512,400} 为坏数据(出厂应为{216,108}),
修复后 loop_3(SENS=0) 会撞上异常值, 需恢复出厂清配置区
|
2026-08-25 14:23:33 +08:00 |
|
wangfq
|
bbf5492fe2
|
fix(vd960Loop): 灵敏度收敛 4 级制 + 运行中配置立即生效 (协议 V1.08)
根因: 设置不同灵敏度感应高度无区别
1. unpack_pkg_set_mcjq_param 未同步 loop_SensLevel → 改灵敏度需重启才生效
2. 9级制映射 sensitvity & 0x03 折叠 (默认7→3, 3→3, 8→0)
3. (测试陷阱) 金属块过大信号饱和, 建议小金属块测临界高度
修复:
- 提取 sens_level_from_config() 映射函数, 4级制 0~3 一一对应 (9级制后改)
- unpack_pkg_set_mcjq_param 补 loop_SensLevel 同步 (运行中立即生效)
- para_store_init 上电路径改用同一函数
- 协议 V1.08: Sensitivity 0~9级 → 4级制 0~3 (默认2)
- tests/test_sens_mapping.c gcc 隔离单测 PASS (0~3无折叠/兼容旧默认7→3)
|
2026-08-25 11:52:14 +08:00 |
|
wangfq
|
fad99a550b
|
fix(vd960Loop): 灵敏度阈值改用可配置灵敏度表 g_loop_sens_list
固定表 SensTable/SensTable_1 替换为 flash 可配置的
g_loop_sens_list.sens[loop_SensLevel].sens_in/sens_out
(进入/平坦性/离开三处 dlt_ORG 计算同步修改)
- 修复灵敏度值固定不可配置的问题
- 默认值由 set_factory_param 保持 {216,108,36,10}/{108,72,18,9}
|
2026-08-25 11:44:24 +08:00 |
|
wangfq
|
bfc9646e48
|
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 侧完成。
|
2026-07-14 14:47:39 +08:00 |
|
wangfq
|
d7951b1056
|
feat: 上电3秒内抑制主动上报, 等线圈稳定
- uart_report_packet_loop_acs 开头检查 misc_counter < 60 (3s@50ms)
- 抑制期内清零 report_counter 防止出抑制后立即触发上报
- 利用 misc_counter 自由运行特性, 无需额外静态变量
|
2026-07-03 14:14:56 +08:00 |
|
wangfq
|
5aa8edc1ea
|
refactor: 新增 misc_counter 替代 report_counter 做时间戳
- Loop154_States 新增 misc_counter (50ms 自由运行不复位)
- 7处时间戳操作改用 misc_counter: passtime_start/last_exit_tick/misc_value
- report_counter 还原原始清零逻辑, 仅管上报间隔
- 删除 last_report_tick
这样 report_counter 只管上报调度, misc_counter 只管时间戳,
互不干扰, 即使 report_counter 清零也不影响车间距/通过时间计算
|
2026-07-03 10:33:48 +08:00 |
|
wangfq
|
b49797ecc6
|
fix: report_counter 清零导致车间距/通过时间下溢 (0xFFFFFFxx)
根因: report_counter 清零后 last_exit_tick/passtime_start 存旧值,
再次进场时差值下溢 uint32_t → 0xFFFFFFF7
修复:
- Loop154_States 新增 last_report_tick, report_counter 自由运行不复位
- report_misc: 增量判断 (report_counter - last_report_tick) >= _interval
- TMR6 ISR: 用 last_report_tick 实现 UART 期间推迟上报, 不再清零
- 删掉所有 g_loop_states.report_counter = 0
|
2026-07-03 10:27:56 +08:00 |
|
wangfq
|
85a4fa7910
|
change: 时间量上报单位 10ms→50ms, report_counter 入 50ms tick
- report_counter++ 从 5ms ISR 外层移入 if(TM1cnt>=10) 50ms 块
- 3处 misc_value 去掉 /2, 直接差值即可
- REPORT_IDLE_TICKS 120→12, REPORT_EVENT_TICKS 30→3
- 更新 TaskLoop.h/main.c/devlog 注释
|
2026-07-03 10:01:30 +08:00 |
|
wangfq
|
3c243ea792
|
change: 时间量上报单位 5ms→10ms
- 进场车间距 / 离场通过时间: misc_value = (差值)/2
- 内部时间戳保持 5ms 精度, 仅上报值转为 10ms
- 更新注释和 devlog (V2.6)
|
2026-07-03 09:36:28 +08:00 |
|
wangfq
|
9fae087fed
|
feat: 主动上报时间量 — 补齐车间距时间 (gap time)
- Loop154_Unit 新增 last_exit_tick 字段,记录上次离场时间戳
- 进场: misc_value = 车间距 (report_counter - last_exit_tick), 首车为0
- 离场 (flatness/cnt_release): 记录 last_exit_tick, misc_value = 通过时间
- 有限存在超时: 也记录 last_exit_tick, 确保下一辆车车间距正确
四通道独立计算, 单位 5ms tick
|
2026-07-03 09:13:39 +08:00 |
|
wangfq
|
67a54bded3
|
fix: 修复 ARMCC 编译错误和警告 — 多余大括号/未引用变量/枚举类型混用
- #991: g_loop_states 初始化去多余括号 {{0}, {{{0}}}} → {0}
- #177-D: 删除未引用的 _counter1_init
- #188-D: 7处 at32_led_* 调用加 (led_type) 强转
|
2026-07-03 08:29:30 +08:00 |
|
wangfq
|
9e125f953c
|
feat(vd960Loop): 0xC0 主动上报 — 4种杂项类型轮转 + 事件优先级
杂项类型轮转:
- 0b00 时间量: 进场=车间距, 离开=通过时间, 空闲=0
- 0b01 线圈断开次数
- 0b10 车流量累计
- 0b11 继电器动作次数
上报间隔:
- 空闲稳定: 600ms, 轮流上报 0→1→2→3
- 进场/离开事件: 150ms, 强制时间量, 最高优先级
TaskLoop.h: 新增 MISC_TYPE_* / REPORT_*_TICKS 宏
Loop154_Unit 新增 flow_count/relay_count/passtime_start/misc_value
Loop154_States 新增 report_misc_round
TaskLoop.c: 进场时记录时间戳+累计; 离开时计算通过时间
main.c: 重写 uart_report_packet_loop_acs
|
2026-07-02 18:18:16 +08:00 |
|
wangfq
|
c447bfa475
|
tune: 稳定期窗口 100 快速收敛 (同步 DLD154V4B)
|
2026-06-29 18:45:31 +08:00 |
|
wangfq
|
4d77ef8c71
|
refactor: 去掉快速 IIR,ALFA_CAP1=79 @10ms (同步 DLD154V4B)
|
2026-06-29 18:35:15 +08:00 |
|
wangfq
|
0a5a640195
|
fix: 快速 IIR 斜率限幅参考改为 CAPVD_fast (同步 DLD154V4B)
|
2026-06-29 17:56:40 +08:00 |
|
wangfq
|
2aad8782a7
|
fix: 快速 IIR 输入改为限幅后原始值 (同步 DLD154V4B)
|
2026-06-29 17:27:11 +08:00 |
|
wangfq
|
918287d9da
|
clean: 删除死代码 ALFA_FAST (同步 DLD154V4B)
|
2026-06-29 17:16:47 +08:00 |
|
wangfq
|
23f33d9af5
|
fix: update_moving_average window 参数 uint8_t→uint16_t (同步 DLD154V4B)
|
2026-06-29 15:55:59 +08:00 |
|
wangfq
|
1ca7f01cdf
|
tune: WINDOW_ORIGIN 100→500, 基线更新 1s→5s (同步 DLD154V4B)
|
2026-06-29 15:37:12 +08:00 |
|
wangfq
|
0b951768ec
|
feat(vd960Loop): 移植 DLD154V4B V2.0-V2.5 M4 优化 — 双路 IIR + 斜率限幅 + 进入确认 + 冻结超时
V2.0: 双路 IIR (慢速 α=18/256 τ=135ms + 快速 α=0.5 τ=28ms)
斜率限幅 MAX_SLOPE_RATE=5%
进入确认 ENTRY_CONFIRM=3
vTaskDelay 50→10ms (tick 加速 5×)
V2.1: CAPVD_fast 初始化修复 (==0 时首次锁定)
V2.2: 稳定期绕过 IIR 和斜率限幅,直接用 Value 收敛基线
V2.3: 基线冻结超时自动恢复 (FREEZE_TIMEOUT)
V2.4: 冻结稳定性检查 (FREEZE_STABILITY_RATE=2% 窗口)
V2.5: 冻结超时 10s (1000 tick @ 10ms)
结构体新增: loop_CAPVD_fast, loop_entry_cnt,
loop_freeze_cnt, loop_freeze_ref
每通道独立状态,四路并行运行
|
2026-06-29 11:25:44 +08:00 |
|
wangfq
|
5a12044c1a
|
fix: vTaskDelay 10→50ms 对齐 DLD154V4B 原始设计, 创建 docs/devlog.md
loop_task_function 主循环周期修正:
- 原值 10ms 是 FreeRTOS 移植时的疏忽
- 改为 50ms 对齐原始 TMR15 5ms×10 设计
- 基线更新: 100×10ms=1s → 100×50ms=5s (Origin 更稳定)
- CPU 占用降低 5×
创建 docs/devlog.md 记录 V2.0~V2.2 全部改动。
|
2026-06-26 14:30:51 +08:00 |
|
wangfq
|
eb9f21b08d
|
fix: 有限存在超时改为通道完整重启, 避免继电器立即重新吸合
原逻辑设 loop_FLAG_OUT=1 触发正常离车流程,
但线圈物理上仍有车, vd1_task 立刻重新检测到有车→继电器又吸合。
改为与安全复位一致的重启逻辑:
- LC_Reset=1, loop_INI_LOOP=1 → 强制重新初始化
- loop_stable=0, loop_LOOP_OK0=0 → 重建基线(含稳定期128样本)
- 清除所有标志位和计数器
- 移除 loop_VD_FLAG 前置条件 (set_loops_relay_off 无条件执行)
|
2026-06-26 12:02:00 +08:00 |
|
wangfq
|
995520164d
|
fix: 有车时根据 hold_time 启用有限存在计时
vd1_task_per_channel 判定有车 (loop_VD_FLAG=1) 时,
若 hold_time > 0 则设置 loop_VD_HOLD = 1,
使有限存在超时逻辑能够实际生效。
hold_time=0 (exist_mode=0) 时不设 VD_HOLD,保持无限制存在。
|
2026-06-26 11:55:43 +08:00 |
|
wangfq
|
56d8b77278
|
fix: 有限存在超时后完整恢复无车状态
set_loops_relay_off 之后补充:
- loop_VD_FLAG = 0 → 无车 → 绿灯灭 (poll_green_led 自动)
- loop_FLAG_OUT = 1 → 触发正常离开输出
- LC_HOLD = 0 → 清除安全保持
- loop_ORG_CNT/SUM=0 → 重置基线跟踪
|
2026-06-26 11:18:25 +08:00 |
|
wangfq
|
1831291d76
|
fix: 离开延时 OUT_DELAY 改为可配置 relay_delay
- Loop154_Unit 新增 relay_delay 字段
- storage.c 从 delay_time 计算: relay_delay = delay_time * 2
- TMR15_GLOBAL_IRQHandler 使用 unit->relay_delay 替代固定 OUT_DELAY
|
2026-06-26 10:31:53 +08:00 |
|
wangfq
|
bfbceec761
|
fix: 有限存在超时改为可配置 hold_time 替代固定 HOLD_TIME
- Loop154_Unit 新增 hold_time 字段 (tick 数)
- storage.c para_store_init 从 exist_mode 计算: hold_time = exist_mode * 20 * 5
- TMR15_GLOBAL_IRQHandler 中使用 unit->hold_time 替代固定 HOLD_TIME
|
2026-06-26 10:20:13 +08:00 |
|
wangfq
|
58774a2038
|
fix: 上报频率字段从raw CAPVD改为实际线圈频率
uart_report_packet_loop_acs 和 CMD_DBN_GET_MCJQ_PARAM 两处,
loop_CAPVD 需经公式转换为实际频率后再上报:
freq = sclk_freq * input_div * LPCNT / CAPVD
使用 uint64_t 先乘后除避免整数截断
|
2026-06-26 09:46:58 +08:00 |
|
wangfq
|
421913d342
|
fix(vd960Loop): 补充 usart_task_handler 和 usart1_rx_buffer 定义
|
2026-06-25 16:53:53 +08:00 |
|
wangfq
|
abf000911b
|
fix(vd960Loop): 移除 TaskLoop.c 中重复的 usart_task/g_flag_output 定义
|
2026-06-25 16:51:36 +08:00 |
|
wangfq
|
7906504e4e
|
fix(vd960Loop): 修复 g_input_div 重复定义和 tmp_ble_buf 缺失
|
2026-06-25 16:46:45 +08:00 |
|
wangfq
|
d2b132a6ef
|
fix(vd960Loop): 编译错误修复 — Flt_Reg/SensTable/macros/INCNT
|
2026-06-25 16:41:50 +08:00 |
|
wangfq
|
95808f9f25
|
refactor(vd960Loop): 算法回退到 DLD154V4B,四通道适配
- 用 DLD154V4B vd1_task/per_channel 替换 vds_task 复杂算法
- 移除 FUNCTION_B/二次判断/快速变化/多重确认等增强特性
- 保留平坦性离开算法 (CN200910309382),每通道独立状态
- 灵敏度表改为 DLD154V4B 4级: {216,108,36,10} / {108,72,18,9}
- 清理废弃类型: FltHistoryManager, Loop_ACS_Info, StageRangeConfig 等
- 首次添加 vd960DBN 完整源码
|
2026-06-25 16:21:57 +08:00 |
|