From d6314d6f2a246b02792166a80944389da1f52a40 Mon Sep 17 00:00:00 2001 From: super_agent_bot Date: Sun, 1 Nov 2026 22:32:18 +0800 Subject: [PATCH] Replace Lx layer labels with plain Chinese --- Home.md | 8 ++++---- UI子系统.md | 4 ++-- 开发指南.md | 6 +++--- 文档地图.md | 2 +- 术语表.md | 12 ++++++------ 测试与调试.md | 20 ++++++++++---------- 硬件平台.md | 2 +- 采集与算法.md | 22 +++++++++++----------- 项目架构.md | 12 ++++++------ 9 files changed, 44 insertions(+), 44 deletions(-) diff --git a/Home.md b/Home.md index 3df36c4..102df17 100644 --- a/Home.md +++ b/Home.md @@ -13,7 +13,7 @@ STM32F4-Base 是一套面向工业现场的嵌入式平台固件, 也是一块** ```text TPAFE5160(8 路电气量) + STM32 ADC1(9 路) └─ TIM3 1 kHz 硬件节拍 → adcTask - └─ L1 采集层 → L2 相量/测频 → L3 保护判据 + └─ 采集处理 → 相量/测频 → 保护判据 └─ protectTask(20 ms) → IEC 60870-5-104(TCP 2404) ``` @@ -22,7 +22,7 @@ TPAFE5160(8 路电气量) + STM32 ADC1(9 路) | 能力 | 状态 | |---|---| | 平台能力: 网络 / 存储 / 时间 / UI / 日志 / 看门狗 / FTP / 配置 | ✅ 已实现并台架验收 | -| 采集主线: L1 → L2 → L3 → protectTask → IEC 104 | ✅ 已闭环(2026-10-12, B5) | +| 采集主线: 采集处理 → 相量/测频 → 保护判据 → protectTask → IEC 104 | ✅ 已闭环(2026-10-12, B5) | | RS-485 对下采集(ModBus RTU) | ⬜ 未接线; B2 按用户决定冻结(2026-10-12) | | V0.1 硬件 8 路电气量分属两片转换器 | ⚠ 已知硬件缺陷, V0.2 修复前禁止跨转换器做相位/功率运算 | @@ -49,12 +49,12 @@ TPAFE5160(8 路电气量) + STM32 ADC1(9 路) | [快速开始](快速开始) | 环境准备、编译、烧录、上电测试、串口与模拟器 | | [项目架构](项目架构) | 分层、9 个任务、就绪屏障、启动时序、数据流、目录地图 | | [硬件平台](硬件平台) | V0.1 引脚、外设、存储与硬件约束 | -| [采集与算法](采集与算法) | ADC 采样链、L1/L2/L3、保护任务、IEC 104、RS-485 现状 | +| [采集与算法](采集与算法) | ADC 采样链、采集/相量/保护处理、保护任务、IEC 104、RS-485 现状 | | [存储子系统](存储子系统) | NAND → dhara FTL → FatFs、配置文件、日志与存储陷阱 | | [网络子系统](网络子系统) | CH395F、BSD Socket、FTP/对时/远程显示/104、网络配置 | | [UI子系统](UI子系统) | LVGL、菜单树、内容页、字体、PC 模拟器、远程显示协议 | | [开发指南](开发指南) | 编码铁律、构建门禁、新增文件、内存预算、CubeMX 规则 | -| [测试与调试](测试与调试) | L0~L3、`@build`/`@test`、串口助手、ST-LINK、CI | +| [测试与调试](测试与调试) | 各类测试、`@build`/`@test`、串口助手、ST-LINK、CI | | [已知陷阱](已知陷阱) | 高频踩坑速查: 编码、RTOS、FatFs、ADC、网络、烧录 | | [术语表](术语表) | DTU / FTL / BBT / IWDG / 104 / RemoDispBus 等 | | [文档地图](文档地图) | 仓库文档全量入口与按角色阅读顺序 | diff --git a/UI子系统.md b/UI子系统.md index b8e9d9f..9276f57 100644 --- a/UI子系统.md +++ b/UI子系统.md @@ -24,11 +24,11 @@ ## 2. 菜单树 -- 规模: 9 个菜单节点(含根)+ 33 个叶子 = **42 节点**; 最大深度 **4 级(L0~L3)**。 +- 规模: 9 个菜单节点(含根)+ 33 个叶子 = **42 节点**; 最大深度 **4 级**。 - 根页 7 个一级条目: **装置信息 / 实时数据 / 参数定值 / 三遥设置 / 装置维护 / 通讯参数 / 记录查询**。 ```text -主界面 (L0) +主界面 ├─ 装置信息 [叶子] ├─ 实时数据 ▶ │ ├─ 交流量 ├─ 直流量 └─ 遥信量 diff --git a/开发指南.md b/开发指南.md index 4d8cd4a..75a173f 100644 --- a/开发指南.md +++ b/开发指南.md @@ -28,7 +28,7 @@ # 自动化测试(@test) .venv\Scripts\python.exe .dsh\skills\serial-boot-test\scripts\run_boot_test.py -# 本地等价门禁: L0 静态 + L0b + L0.5 主机侧单测 +# 本地等价门禁: 静态检查 + 主机侧单元测试 .venv\Scripts\python.exe scripts/ci_local.py # 全库 pre-commit @@ -62,7 +62,7 @@ pre-commit install ### 2.3 CI -Gitea Actions 只跑 **L0 静态门禁 + L0.5 主机侧单测**, **刻意不跑 `@build`**(需要本机 Keil 授权), 也不跑 L1/L2/L3(需要真机)。远程 CI 只跑在本机一台 runner `win-stm32-ci` 上; runner 不在线不影响本地门禁。详见 `docs/CI/README.md`。 +Gitea Actions 只跑 **静态检查和主机侧单元测试**, **刻意不跑 `@build`**(需要本机 Keil 授权), 也不跑板端测试、模拟器回归和真机台架(需要真机)。远程 CI 只跑在本机一台 runner `win-stm32-ci` 上; runner 不在线不影响本地门禁。详见 `docs/CI/README.md`。 ## 3. 新增与修改文件 @@ -115,7 +115,7 @@ Gitea Actions 只跑 **L0 静态门禁 + L0.5 主机侧单测**, **刻意不跑 - `Inc/` / `Src/` 是 CubeMX 生成文件; 自定义代码只写 `USER CODE` 区。 - 重生成会覆盖标记区之外的一切; `.ioc` 的 `KeepUserCode=true` 只保护 USER CODE 区。 -- 防丢失三层优先级: **L1 写进 `.ioc` → L2 搬进 USER CODE 区 → L3 审计兜底**。 +- 防丢失三层优先级: **写进 `.ioc` → 搬进 USER CODE 区 → 审计兜底**。 - 每次重生成后立刻运行: ```powershell diff --git a/文档地图.md b/文档地图.md index fab5534..ae28da8 100644 --- a/文档地图.md +++ b/文档地图.md @@ -52,7 +52,7 @@ |---|---| | [`docs/算法/傅氏算法详解.md`](http://gitea.bitnasdaq.vip/wandering1/STM32F4-Base/src/branch/master/docs/算法/傅氏算法详解.md) | 全周傅氏原理与工程实现 | | [`docs/算法/继电保护功能复现规划.md`](http://gitea.bitnasdaq.vip/wandering1/STM32F4-Base/src/branch/master/docs/算法/继电保护功能复现规划.md) | 保护链路、平台适配、路线图 | -| [`App/algo/README.md`](http://gitea.bitnasdaq.vip/wandering1/STM32F4-Base/src/branch/master/App/algo/README.md) | L1/L2/L3 模块与代码边界 | +| [`App/algo/README.md`](http://gitea.bitnasdaq.vip/wandering1/STM32F4-Base/src/branch/master/App/algo/README.md) | 采集处理、相量/测频、保护判据模块与代码边界 | ## 6. UI diff --git a/术语表.md b/术语表.md index 8bf92bc..cff61de 100644 --- a/术语表.md +++ b/术语表.md @@ -61,12 +61,12 @@ | **TRGO** | Timer Trigger Output; TIM3 更新事件经 TRGO 触发 ADC1 | | **CONVST** | Convert Start; TPAFE5160 的转换启动脉冲 | | **1 kHz / 20 点周波** | 采样率 1000 Hz; 50 Hz 下每周期 20 点 | -| **L1** | 采集层: 语义通道映射、有效性、健康 | -| **L2** | 相量层: 采样环 + 全周傅氏 + 相量 | -| **L2.5** | 测频层: 自适应窗频率测量 | -| **L3** | 保护层: 定值与保护元件判据 | +| **采集处理层** | 语义通道映射、有效性、健康检查 | +| **相量层** | 采样环 + 全周傅氏 + 相量计算 | +| **测频** | 自适应窗频率测量 | +| **保护判据层** | 定值与保护元件判据 | | **全周傅氏 / DFT** | 全周波离散傅氏变换; 利用正交性做梳状带通, 计算幅值/相位 | -| **相量** | 用幅值和相位表示的正弦量; L2 输出 | +| **相量** | 用幅值和相位表示的正弦量; 相量层输出 | | **RMS** | 有效值; 傅氏系数表折算 | | **protectTask** | 20 ms 保护判据任务 | | **定值** | 保护动作门槛与参数; 存 `/prot_set.bin` | @@ -95,7 +95,7 @@ | **pre-commit** | Git 提交前自动执行的检查框架; 本项目约 33 个钩子 | | **cppcheck** | C/C++ 静态分析工具; 本项目对项目代码执行 | | **gitlint** | Git 提交信息格式检查 | -| **L0 / L0.5 / L1 / L2 / L3** | 静态门禁 / 主机侧单测 / 板端套件 / 模拟器回归 / 真机台架 | +| **测试分类** | 静态检查 / 主机侧单元测试 / 板端套件 / 模拟器回归 / 真机台架 | | **B0 / B1 / B2 / B4 / B5 / B7 / B8** | 项目内部任务编号: B0 产品定义、B1 采集链路、B2 RS-485、B4 104 上行、B5 保护任务、B7 定值落盘、B8 测频 | | **E-xx / N-xx** | 问题/登记项编号, 见 `docs/任务规划/` 与 `docs/问题记录/` | | **双端** | MCU(Keil/ARMCC)与 PC 模拟器(CMake/MSVC)共用同一份源码 | diff --git a/测试与调试.md b/测试与调试.md index f480dea..19f18d8 100644 --- a/测试与调试.md +++ b/测试与调试.md @@ -1,23 +1,23 @@ # 测试与调试 -> 测试分四层: L0 静态门禁、L0.5 主机侧单测、L1 板端套件 / L2 模拟器回归、L3 真机台架。日常改代码至少跑 L0 + L0.5; 涉及硬件再跑 `@test`。 +> 测试分四类: 静态检查、主机侧单元测试、板端套件 / 模拟器回归、真机台架。日常改代码至少跑静态检查 + 主机侧单元测试; 涉及硬件再跑 `@test`。 > > 细节见 `docs/测试说明/自动化测试流程.md`、`测试开发标准流程.md`、`实机测试实施指南.md`。 -## 1. 测试分层 +## 1. 测试分类 -| 层 | 内容 | 运行位置 | +| 类别 | 内容 | 运行位置 | |---|---|---| -| **L0** | 静态门禁: pre-commit 全钩子(cppcheck、编码规范、乱码、文档链接、任务表、内存数字、双端注册、RAM 预算等) | 本地 / CI | -| **L0.5** | 主机侧单元测试: MSVC 离线编译真实源码 | 本地 / CI | -| **L1** | 板端测试套件: CH395F / 存储 / GD5F / RTC 等 | 本地(需真机) | -| **L2** | LVGL 模拟器回归: 菜单像素、内容页黄金参考、池水位 | 本地(需模拟器) | -| **L3** | 真机台架: `@test` 闭环 + 探针 + 长跑 | 本地(需真机 + ST-LINK) | +| **静态检查** | 静态门禁: pre-commit 全钩子(cppcheck、编码规范、乱码、文档链接、任务表、内存数字、双端注册、RAM 预算等) | 本地 / CI | +| **主机侧单元测试** | MSVC 离线编译真实源码 | 本地 / CI | +| **板端测试套件** | CH395F / 存储 / GD5F / RTC 等 | 本地(需真机) | +| **模拟器回归** | 菜单像素、内容页黄金参考、池水位 | 本地(需模拟器) | +| **真机台架** | `@test` 闭环 + 探针 + 长跑 | 本地(需真机 + ST-LINK) | ## 2. 日常命令 ```powershell -# L0 + L0b + L0.5(推荐每次提交前) +# 静态检查 + 主机侧单元测试(推荐每次提交前) .venv\Scripts\python.exe scripts/ci_local.py # 全库 pre-commit @@ -105,7 +105,7 @@ FAIL / ERROR / HardFault / [ERR] - 运行用 `board-test-suite` skill; 测试指南见 `docs/测试说明/*_Test_Guide.md`。 - ⚠ 跑一轮破坏性 GD5F 测试会让 dhara 多记一个坏块, 且该计数持久化, 普通恢复清不掉; 只有明确要做容量恢复/全片擦除时才开。 -## 7. 主机侧单元测试(L0.5) +## 7. 主机侧单元测试 在 PC 上用 MSVC 离线编译真实源码, 不依赖硬件。主要模块: diff --git a/硬件平台.md b/硬件平台.md index cc58183..f822bb4 100644 --- a/硬件平台.md +++ b/硬件平台.md @@ -97,7 +97,7 @@ V0.1 相比 V0.0: 3. RS-485 初始化; 4. GD5F NAND 初始化(BBT 扫描, 启动段最耗时); 5. TPAFE5160 初始化; -6. L1 `adc_input_init()` → L2 `phasor_init()` / `freq_init()` → L3 `prot_set_init()` / `prot_elm_init()`; +6. 采集处理 `adc_input_init()` → 相量 `phasor_init()` / 测频 `freq_init()` → 保护判据 `prot_set_init()` / `prot_elm_init()`; 7. SD2506 诊断(ID/时间/温度/电池); 8. 启动 TIM3 1 kHz 采样节拍。 diff --git a/采集与算法.md b/采集与算法.md index da2c8fd..a261d7f 100644 --- a/采集与算法.md +++ b/采集与算法.md @@ -1,6 +1,6 @@ # 采集与算法 -> 从两片转换器到 104 主站的一条最小闭环。当前状态: **L1 → L2 → L3 → protectTask → IEC 104 已闭环**(B5, 2026-10-12); **RS-485 对下采集尚未接线**(B2 冻结)。 +> 从两片转换器到 104 主站的一条最小闭环。当前状态: **采集处理 → 相量/测频 → 保护判据 → protectTask → IEC 104 已闭环**(B5, 2026-10-12); **RS-485 对下采集尚未接线**(B2 冻结)。 > > 细节见 `App/algo/README.md`、`docs/算法/继电保护功能复现规划.md`、`docs/子系统设计/ADC采样节拍设计说明.md`、`docs/子系统设计/IEC104上行设计说明.md`。 @@ -16,10 +16,10 @@ adc_input_poll()(每拍) │ ▼ - L1 采集层: 语义映射 / 有效性 / 健康 - L2 相量层: sample_ring → 全周傅氏 → phasor - L2.5 测频: freq(自适应窗) - L3 保护层: prot_set / prot_elm + 采集处理层: 语义映射 / 有效性 / 健康 + 相量层: sample_ring → 全周傅氏 → phasor + 测频: freq(自适应窗) + 保护判据层: prot_set / prot_elm │ ▼ protectTask(20 ms) @@ -55,7 +55,7 @@ - 消费者侧统一经 `adc_input_poll()` / `adc_input_raw()` 按**语义**取数, 不写死下标。 - ISR 侧只能走 `adc_tick_irq_notify()`(内含“消费者就绪”门); TIM3 比调度器早约 100 ms 启动。 -## 3. L1 采集层 +## 3. 采集处理层 模块: `App/algo/adc_input.*`、`App/algo/adc_health.*`。 @@ -69,23 +69,23 @@ > 映射权威表: `docs/硬件平台/ADC通道映射说明.md`。网名 `AINn` ≠ 板级 `ADCn` ≠ 转换器通道号, **必须查表**。 -## 4. L2 相量层与 L2.5 测频 +## 4. 相量层与测频 模块: `App/algo/sample_ring.*`、`App/algo/phasor.*`、`App/algo/freq.*`。 - **sample_ring**: 按采样节拍写入环形缓冲, 供相量计算取窗。 - **phasor**: 全周波傅氏(单频 DFT)算法; 利用正交性做梳状带通, 抑制谐波; 滑动窗更新; 输出幅值/相位; 系数表折算有效值, 区分保护/遥测双轨。 -- **freq**: L2 派生量, 自适应窗测频; 由 `adcTask` 每拍运行, 保护判据经 `prot_elm_run()` 取数。 -- 纯算法层不依赖外设/RTOS, 可在主机侧单测(L0.5)。 +- **freq**: 相量派生量, 自适应窗测频; 由 `adcTask` 每拍运行, 保护判据经 `prot_elm_run()` 取数。 +- 纯算法层不依赖外设/RTOS, 可在主机侧单元测试。 > 傅氏算法原理与工程实现见 `docs/算法/傅氏算法详解.md`; 保护功能复现规划见 `docs/算法/继电保护功能复现规划.md`。 -## 5. L3 保护层与 protectTask +## 5. 保护判据层与 protectTask 模块: `App/algo/prot_set.*`、`App/algo/prot_elm.*`, 任务体 `App/task/protect_task.c`。 - `prot_set_init()`: 出厂默认定值封存校验和; `prot_elm_init()`: 复位元件状态并解析相量索引(必须在 `phasor_init()` 之后)。 -- `protectTask`: **20 ms 判据节拍**, 运行 `prot_elm_run()`、L5-4 采样故障闭锁、L5-1 定值校验和巡检。 +- `protectTask`: **20 ms 判据节拍**, 运行 `prot_elm_run()`、采样故障闭锁、定值校验和巡检。 - 跨上下文复归: 104 的 YK11 经 `prot_elm_request_reset()` 落请求, 不直接跨任务改状态。 - 纳入 IWDG `required_mask`(`TASK_WD_PROTECT`, 产品 `0x1F7`)。 - 保护定值落盘: `iec104Task` 检测到定值脏后置 `SYS_EVT_PROT_SET_SAVE`, 由 `defaultTask` 消费并写 `/prot_set.bin`。 diff --git a/项目架构.md b/项目架构.md index 385d39c..8a6475f 100644 --- a/项目架构.md +++ b/项目架构.md @@ -74,9 +74,9 @@ ├─ rs485_init() ├─ gd5f2gq5ue_init() // BBT 扫描, 启动段最耗时 ├─ tpafe5160_init() - ├─ adc_input_init() // L1: 语义映射 + ADC1 DMA - ├─ phasor_init() / freq_init() // L2 / L2.5 - ├─ prot_set_init() / prot_elm_init()// L3 + ├─ adc_input_init() // 采集处理: 语义映射 + ADC1 DMA + ├─ phasor_init() / freq_init() // 相量 / 测频 + ├─ prot_set_init() / prot_elm_init()// 保护判据 ├─ SD2506 诊断(ID/时间/温度/电池) └─ HAL_TIM_Base_Start_IT(TIM3) // 1 kHz 采样节拍 └─ osKernelInitialize() @@ -107,13 +107,13 @@ STM32 ADC1(9 路, DMA) ─────┘ adcTask(纯消费者) │ adc_input_poll() ▼ -L1 采集层(adc_input / adc_health) +采集处理层(adc_input / adc_health) │ ▼ -L2 相量层(sample_ring / phasor)→ L2.5 测频(freq) +相量层(sample_ring / phasor)→ 测频(freq) │ ▼ -L3 保护层(prot_set / prot_elm) +保护判据层(prot_set / prot_elm) │ ▼ protectTask(20 ms)