Commit Graph
17 Commits
Author SHA1 Message Date
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 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 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 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 4d77ef8c71 refactor: 去掉快速 IIR,ALFA_CAP1=79 @10ms (同步 DLD154V4B) 2026-06-29 18:35:15 +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 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 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