refactor(编号): 16 个测试模块码单词化 + 门禁识别面连带放宽

批 2(用户授权改名 + 「新名要一眼看懂」裁定)
- 16 个有歧义模块码单词化,共 1,146 处随 scripts/rename_ids.py 改写:
  AI→ADCIN、AH→ADCHEALTH、PS→PROTSET、PE→PROTELEM、PH→PHASOR、
  TS→TIMESYNC、VL→VOLLOCK、NP→NANDPORT、CFG→CONFIG、CLK→SYSCLK、
  WD→WATCHDOG、STO→STORAGE、SH→SHA256、FA→FTPAUTH、FR→FREQ、104→IEC104
- 不动 NET/GD5F/RTC/SOE/UI/ADC/LOG/RS485/TOOL(已是单词、芯片名或业界通用词,
  改了纯属 churn)
- 别名按全局登记:这批字面量已完全限定(TC-<码>-<nnn>),不存在裸形多义
- 映射表存档 scripts/rename_maps/batch2.json 作审计轨迹;§6 模块码表同步

连带修门禁(关键教训)
- 模块码涨到 9 位(ADCHEALTH/WATCHDOG)后,候选正则与族正则的 {0,4} 上界
  会让改名后的号**整批从门禁眼里消失**:实测编号字面量从 8271 掉到 7315、
  悬空假降 490 处。已放宽到 {0,9} 并写进 §6 注记
- 结论:改名批次必须连带复核识别面,只改数据不改判据 = 静默放行;
  这次是靠「可判定比例跌破基线即失败」那条线拦下来的

现状与遗留
- 校验 1 未登记前缀 0 处;可判定比例 82.71%(基线 82.6%,只涨不跌成立)
- 遗留:7 个模块的「单元测试说明.md」仍缺(PROTSET 116、NANDPORT 109、
  PROTELEM 65、FREQ 48、FTPAUTH 45、SHA256 25、SOE 14 处悬空)——改名不解决
  缺文档,处置方式待议
- 遗留:T-2/T-3/T-4/T-6 历史任务号悬空(别名表未收全,属本工具批次漏项)
- 未改任何 C/H 可编译语义(仅注释与宏名内的编号),故不需 @build
This commit is contained in:
2026-10-21 09:53:28 +08:00
parent 301c3e5183
commit bda7ab2b50
45 changed files with 3706 additions and 1295 deletions
+26 -26
View File
@@ -15,18 +15,18 @@
* 3. 不占 MCU 的 RAM,毫秒级完成。
*
* 覆盖点(对应 docs/算法/继电保护功能复现规划.md §3.2):
* TC-PH-001 L2-1 系数表逐项等于 sin(2πk/N)·(√2/N) / cos(2πk/N)·(√2/N)(防转录错)
* TC-PH-002 L2-1 系数表精确零点(sin@0,10 / cos@5,15)与归一化 Σcoe² = 1/N
* TC-PH-003 L2-3 纯基波:fAmSQ = A/√2(有效值),fAm = √2·fAmSQ(幅值)
* TC-PH-004 L2-3/L2-4 实部虚部与相位:atan2(fIm,fRe) = 注入相角
* TC-PH-005 直流 + 2/3/5 次谐波被完全滤除(基波读数不变)
* TC-PH-006 任意次谐波提取(索引步进 = 谐波次数):k=2 / k=5
* TC-PH-007 频率偏离 50 Hz 的幅值误差(±1 Hz ≤ 1.5%,±2 Hz ≤ 3%,见 §9 Q3)
* TC-PH-010 采样环:入环/取窗时序、回绕、饱和、帧计数、参数守卫
* TC-PH-020 L2-2 实例层:实例数/实例表/未攒满一周波不产出
* TC-PH-021 L2-6 滑动窗:连续滑动 20 拍基波读数恒定
* TC-PH-022 L2-7 双区交换:使用区交替 + get 返回**最后一次** run 的结果(非陈旧)
* TC-PH-030..034 phasor_zero 四字段清零 / phasor_init 双区清零 + 使用区与就绪标志复位 + 幂等
* TC-PHASOR-001 L2-1 系数表逐项等于 sin(2πk/N)·(√2/N) / cos(2πk/N)·(√2/N)(防转录错)
* TC-PHASOR-002 L2-1 系数表精确零点(sin@0,10 / cos@5,15)与归一化 Σcoe² = 1/N
* TC-PHASOR-003 L2-3 纯基波:fAmSQ = A/√2(有效值),fAm = √2·fAmSQ(幅值)
* TC-PHASOR-004 L2-3/L2-4 实部虚部与相位:atan2(fIm,fRe) = 注入相角
* TC-PHASOR-005 直流 + 2/3/5 次谐波被完全滤除(基波读数不变)
* TC-PHASOR-006 任意次谐波提取(索引步进 = 谐波次数):k=2 / k=5
* TC-PHASOR-007 频率偏离 50 Hz 的幅值误差(±1 Hz ≤ 1.5%,±2 Hz ≤ 3%,见 §9 Q3)
* TC-PHASOR-010 采样环:入环/取窗时序、回绕、饱和、帧计数、参数守卫
* TC-PHASOR-020 L2-2 实例层:实例数/实例表/未攒满一周波不产出
* TC-PHASOR-021 L2-6 滑动窗:连续滑动 20 拍基波读数恒定
* TC-PHASOR-022 L2-7 双区交换:使用区交替 + get 返回**最后一次** run 的结果(非陈旧)
* TC-PHASOR-030..034 phasor_zero 四字段清零 / phasor_init 双区清零 + 使用区与就绪标志复位 + 幂等
*
* 通过:全部 TC PASS(main 返回 0)。
* 入口:int main(void),返回 0=PASS / 1=FAIL(由 run 脚本判读)。
@@ -98,7 +98,7 @@ static void frame_at(float *f, uint32_t t, double amp, double phase) {
}
}
/* ===================== TC-PH-001/002:L2-1 系数表 ===================== */
/* ===================== TC-PHASOR-001/002:L2-1 系数表 ===================== */
static void tc_table(void) {
const double scale = sqrt(2.0) / (double)PHASOR_N;
@@ -136,7 +136,7 @@ static void tc_table(void) {
"L2-1 sin[5] == sqrt(2)/N (peak coefficient)");
}
/* ===================== TC-PH-003/004:基波幅值 / 有效值 / 相位 ===================== */
/* ===================== TC-PHASOR-003/004:基波幅值 / 有效值 / 相位 ===================== */
static void tc_fundamental(void) {
static const struct { double amp; double ph; } k_case[] = {
@@ -176,7 +176,7 @@ static void tc_fundamental(void) {
CHECK(ok_ph, "L2-4/L2-3 atan2(fIm,fRe) == injected phase (6 amp/phase cases)");
}
/* ===================== TC-PH-005:直流与谐波被滤除 ===================== */
/* ===================== TC-PHASOR-005:直流与谐波被滤除 ===================== */
static void tc_filtering(void) {
const double amp = 57.7, exp_rms = amp / sqrt(2.0);
@@ -218,7 +218,7 @@ static void tc_filtering(void) {
CHECK(ok, "L2-3 DC + 2nd/3rd/5th harmonics fully rejected (5 cases, err <= 1%)");
}
/* ===================== TC-PH-006:任意次谐波提取 ===================== */
/* ===================== TC-PHASOR-006:任意次谐波提取 ===================== */
static void tc_harmonic(void) {
/* 基波 100 + 二次 25 + 五次 12(峰值);三根谱线应各自独立读出 */
@@ -263,7 +263,7 @@ static void tc_harmonic(void) {
}
}
/* ===================== TC-PH-007:频率敏感性 ===================== */
/* ===================== TC-PHASOR-007:频率敏感性 ===================== */
static void tc_freqdev(void) {
const double amp = 57.7, exp_rms = amp / sqrt(2.0);
@@ -302,7 +302,7 @@ static void tc_freqdev(void) {
CHECK(ok, "L2-3 frequency sensitivity: 50Hz<=0.1%, +-1Hz<=1.5%, +-2Hz<=3% (worst phase)");
}
/* ===================== TC-PH-010:采样环 ===================== */
/* ===================== TC-PHASOR-010:采样环 ===================== */
static void tc_ring(void) {
float f[ADC_SEM_COUNT];
@@ -360,7 +360,7 @@ static void tc_ring(void) {
CHECK(sample_ring_push_frame(f, 3u) == -1, "L2-in ring: wrong frame length rejected");
}
/* ===================== TC-PH-020/021/022:实例层 + 滑动窗 + 双区 ===================== */
/* ===================== TC-PHASOR-020/021/022:实例层 + 滑动窗 + 双区 ===================== */
static void tc_instances(void) {
const double amp = 100.0, exp_rms = amp / sqrt(2.0);
@@ -433,7 +433,7 @@ static void tc_instances(void) {
CHECK(ok, "L2-2/L2-6 instance results == phasor_calc() on the same ring window");
}
/* ===================== TC-PH-030..034:phasor_zero / init 清零 ===================== */
/* ===================== TC-PHASOR-030..034:phasor_zero / init 清零 ===================== */
static void tc_zero(void) {
phasor_t p;
@@ -444,7 +444,7 @@ static void tc_zero(void) {
p.fRe = 1.0f; p.fIm = -2.0f; p.fAm = 3.0f; p.fAmSQ = 4.0f;
phasor_zero(&p);
CHECK((p.fRe == 0.0f) && (p.fIm == 0.0f) && (p.fAm == 0.0f) && (p.fAmSQ == 0.0f),
"TC-PH-030 phasor_zero clears all four fields");
"TC-PHASOR-030 phasor_zero clears all four fields");
/* 2) 经 phasor_init:先把双区写成脏值,init 后必须全零,使用区复位、就绪标志清 */
for (i = 0u; i < (uint8_t)PHASOR_INST_N; i++) {
@@ -463,16 +463,16 @@ static void tc_zero(void) {
zones_dirty = 1;
}
}
CHECK(zones_dirty == 0, "TC-PH-031 phasor_init zeroes both result zones");
CHECK(s_use_zone == 0u, "TC-PH-032 phasor_init resets use zone to 0");
CHECK(phasor_get(0u, &p) == -2, "TC-PH-033 phasor_init clears ready (get -> -2)");
CHECK(zones_dirty == 0, "TC-PHASOR-031 phasor_init zeroes both result zones");
CHECK(s_use_zone == 0u, "TC-PHASOR-032 phasor_init resets use zone to 0");
CHECK(phasor_get(0u, &p) == -2, "TC-PHASOR-033 phasor_init clears ready (get -> -2)");
/* 3) 幂等:重复 init 不改变结果 */
(void)phasor_init();
CHECK((s_use_zone == 0u) && (phasor_get(0u, &p) == -2), "TC-PH-034 phasor_init is idempotent");
CHECK((s_use_zone == 0u) && (phasor_get(0u, &p) == -2), "TC-PHASOR-034 phasor_init is idempotent");
}
/* ===================== TC-PH-022:L2-7 双区指针原子交换 ===================== */
/* ===================== TC-PHASOR-022:L2-7 双区指针原子交换 ===================== */
static void tc_dualzone(void) {
const double amp = 100.0;