Files
STM32F4-Base/test/host/wave_store/run_unit_test.py
T
wandering1 3675b89e8e feat(adc): 新增变比维 r 三维折算,录波段格式升 v2
采样板注入 Ua=5V/Ia=0.5A 读数偏小,根因是固件只输出引脚电压、
缺「端子→引脚」变比。折算改三维:

工程量 = (code + b) × k[µV/码] × 1e-6 × r

k 保持 ROM 引脚 LSB,b 为零点,r 为端子变比(int32 Q16)。
变比不能并进 k:UA 端子域 k 达 1.5e5 µV/码、Q16 溢出 int32;
r 单独存 Q16 不溢出。两点标定改标 r,k 仍是板级事实。

- 新开单段 [adc_cal_sec](8 键 r_ua..r_in),cfg 段数达 8/8 上限
- 一次变比复用 prot_set 四项,不新开段;r=0 表示本路不折算
- ROM 默认带台架实测变比(电压族 1000、电流族 29.4118),
  烧进固件即显二次值;VALID 仍须两点标定,两者互不派生
- eng 判据改「每路要么已配变比、要么削顶不显示」,不再看 VALID
- 104 地址 0x8050~0x8057 写 r,run_par_cal_r_set 写值与置脏同函数
- 录波 v2:通道表加 int32 r_q16,头 128→160、整段 5250→5282;
  code_to_milli 用余数分解换等价单次圆整,20 万组大整数对拍 0 不符
- 文档同步:采集与算法层/通道映射/故障录波/网络配置/配置文件/
  产品需求/内存台账,历史带日期实测数字按冻结口径不改
- 单测 13 套全绿,/keil-build 0 错误 0 警告(256024/31760/
  2080/152368),RAM 实测回填内存内容分配策略 §6.1
2026-11-11 11:31:34 +08:00

52 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""录波段格式层(段文件字节布局编解码 + 打包游标 + 段名轮转,wave_store)主机侧纯逻辑单元测试运行器(纯标准库)。
做什么:
用本机 MSVC 编译 test/host/wave_store/wave_store_test.c(它以 #include 纳入
**生产源文件** App/algo/wave_store.c),在 PC 上离线跑 CRC-16/MODBUS 规范锚点、
整段长度等式(32 + 16*ch + pts*ch*2 + 2 == 5282)、段头编解码往返、拒绝清单、
按通道分列的偏移换算、打包游标三段推进与四条拒绝路径、自产字节自检、段文件名
轮转与反解,失败即非 0 退出。零硬件、零烧录、毫秒级。顺带把一段合成段写到 %TEMP%
供 PC 侧读段脚本(test/host/wave_read.py)做只读互验(不参与判定)。
工具链探测 / 编译运行全部委托 test/host/common/unit_test_harness.py。
为什么要主机侧单测(而不是只等台架):
段文件是证据。偏移错一个字节、CRC 少覆盖一段、轮转号回绕错一位,在板子上全是
静默的,只有 PC 脚本或回放页才发现,而那时现场已经没了(口径属主见
docs/子系统设计/故障录波设计说明.md §6.2 与 §6.3)。FatFs 真落盘的短写判失败
(§5.2 第二条)需要板子,不在本套件。
本层为纯逻辑:不 include HAL/CMSIS/RTOS、不调 FatFs,**不需要任何桩目录**。
用法(仓库根目录):
python test/host/wave_store/run_unit_test.py
退出码:0=PASS / 1=测试失败 / 2=环境错误。
设计依据:docs/子系统设计/故障录波设计说明.md §5.2 §6.2 §6.3 §8.1;
docs/子系统设计/故障录波设计说明.md §10。
创建日期:2026-10-29
"""
import os
import sys
HERE = os.path.dirname(os.path.abspath(__file__))
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(HERE)))
sys.path.insert(0, os.path.join(ROOT, "test", "host", "common"))
from unit_test_harness import TestBuild, run_host_unit_test # noqa: E402
# 无桩目录:wave_store.c 只依赖 stdint/stddef 与 App/algo/wave_store.h。
BUILD = TestBuild(
name="Wave Store Tests",
src=os.path.join(HERE, "wave_store_test.c"),
include_dirs=[
os.path.join(ROOT, "App", "algo"),
HERE,
],
summary_marker="=== Wave Store Tests:",
)
if __name__ == "__main__":
sys.exit(run_host_unit_test(BUILD))