diff --git a/docs/问题记录/采集与数据处理短板评测.md b/docs/问题记录/采集与数据处理短板评测.md new file mode 100644 index 00000000..27105b9e --- /dev/null +++ b/docs/问题记录/采集与数据处理短板评测.md @@ -0,0 +1,359 @@ +# 采集与数据处理短板评测(2026-10-23) + +> **定位**:以参考项目 CLS100(`Scatter_P_HV03.01_SV01.01`)的"采样 → 预处理 → 相量 → 遥测 → 录波 → 上送"全链路为对照,评测本项目在**电力采集与数据处理**上的完成度,指出下一步该补的短板与顺序。 +> **不是待办登记簿**:排序权威仍是 `docs/任务规划/README.md` §2;本文只出评测结论与建议,条目落地时按语义标识登记进 `docs/任务规划/登记簿.md`。 +> **对照口径**:项目内以 `docs/算法/继电保护功能复现规划.md` §3 的 L1~L5 清单为准;参考侧以参考项目 `项目分析文档/04-算法与采样专题/` 三篇(《ADC采集至数据使用全流程详解》《项目详细分析-交流采样与有效值计算》《傅氏算法详解》)与源码为准。 +> **硬件前提**:结论只针对 **V0.1 现板**;受 N-18(8 路电气量分属两片转换器)制约的项单独标注,V0.2 改版后解禁。 + +--- + +## 1. 一页结论 + +**已建成的是一条"保护链",还不是一台"能上送的测控装置"。** + +采集侧从 TIM3 1 kHz 节拍到全周傅氏、保护元件、SOE、104 上送,纵向打通并台架闭环;但横向的三条链**没有一条完整**: + +| 链 | 现状 | 缺什么 | +|---|---|---| +| **测量链(遥测)** | 104 每 100 ms 直接读相量瞬时值 | 工程量折算、谐波方和根、平均/死区/零漂、品质位 | +| **记录链(录波)** | 只有 64 B 定长 SOE 文本记录 | 波形数据面(4 kHz 过采样)、COMTRADE 文件、104 文件服务 | +| **就地闭环(开入开出)** | 固件完全没有 | 开入量采集与防抖、遥信变位、遥控出口、跳闸出口 | + +**四个阻断级短板**(不补则送检必挂): + +1. **工程量折算缺失**——遥测上送的是 ADC 原始码值(数千~数万),点表要求"短浮点、系数 = 1"的工程量;保护定值(A/V)也在跟码值比较,量纲不成立。 +2. **遥测链缺失**——没有 200 ms 测量轨:无谐波方和根、无 4 点平均、无死区确认、无零漂、无畸变率;死区做在 104 层(架构错位)。 +3. **运行参数段 0x8020~0x8058 缺失**——死区、变比、零漂门槛、三级负荷报警、录波投退与定值,主站读写全部回"未知地址"。 +4. **录波与 104 文件传输缺失**——点表明确要求"录波文件存储 ≤ 15 s""104 读文件目录/文件 ≤ 30 s"。 + +**建议顺序**:先做"数据可信"(1 + 2 + 3 + 频率点,纯软件、可主机单测),再做"精度与安全网"(等周波 + 削顶检测 + 派生量),最后单独立项"录波与文件"(最大单块)。开入开出与功率/电度需硬件与产品先拍板,软件先建接口不使能。 + +--- + +## 2. 对照基准:参考系统在采集与数据处理上有什么 + +按数据流动的七个环节对照,只列与本项目有差距的维度: + +| 环节 | 参考实现 | 本项目 | 差距 | +|---|---|---|---| +| **采样节拍** | 内总线 4 kHz(80 点/周波),保护取 1/4 → 1 kHz;交流板本地插值对齐 | TIM3 1 kHz 单节拍,无过采样通路 | 录波无数据源;等周波未闭环 | +| **预处理** | 码值 × 每通道系数(定点 2^10)→ 浮点工程量;自产零序 `3I0=Ia+Ib+Ic`;插值异常闭锁 | 码值直通(系数 = 1),无标定、无自产零序 | **量纲缺失**;零序只能靠外部通道 | +| **保护相量** | 全周傅氏 15 基波 + 3 二次 + 1 五次,每 1 ms 重算 | 5 实例(IA/UA/UN 基波 + IA 二/五次),每 1 ms 重算 | 实例数按 V0.1 有效通道裁剪(合理),但**无派生量层** | +| **测量遥测** | 15 通道 × k=1~9 DFT → 方和根 → 4 点平均 → 死区 2 点确认 → 零漂置零 → 微调 TLV10 → 变比;22 交流 + 2 直流 + 7 功率 | 无遥测链;104 直读相量瞬时值 | **整链缺失** | +| **派生量** | 线电压 / 负序 / 正序 / 零序 / 差分 / 直流 / 同期量(`Calf*Vec` 系列 + `CalfAnaDC/Dif`) | 无 | 整层缺失 | +| **录波** | 80 点/周波 × 8 周波,突变量启动,COMTRADE 输出(`Wave.c` + `WaveComtrade.c` 共 7 582 行) | 无 | **整链缺失** | +| **记录** | SOE / COS / 跳闸 / 遥测 / 冻结 / 异常(`RecUnit` + `HistoryFile`) | SOE + 动作记录(B9) | 缺 COS/遥测/冻结/异常 | +| **上送** | 101/103/104/61850/ModBus,含文件服务与电度 | 104 子集:M_SP/M_DP/M_SP_TB/M_ME_NC/C_SE/C_RD/C_IC/C_CS | 无文件服务、无电度、无定值区 | + +**规模感**:参考 `RelayUnit/` 有 45 个 `PRS_*.c`(分析文档口径 89 个模块),本项目 9 个元件实例。这个差距**不是**本项目的问题——V0.1 只有三路测量有效,硬凑元件数没有意义。真正该对标的不是"元件数量",而是**支撑元件的数据层厚度**:遥测链、派生量、录波、标定,这四层参考侧都是几千行量级,本项目基本为零。 + +--- + +## 3. 现状盘点 + +### 3.1 已闭环(有台架或单测证据) + +> 表内「复现规划 §N.M」= `docs/算法/继电保护功能复现规划.md` 的对应小节。 + +| 层 | 项 | 证据 | +|---|---|---| +| L1 | 1 kHz 硬件节拍、TPAFE 快照、ADC1 DMA 乒乓、语义映射 | `docs/算法/继电保护功能复现规划.md` §3.1 的 L1-1~L1-4 | +| L1 | 采样有效性(静默/丢帧/倒退/错误增量) | 复现规划 §3.1(L1-6);`docs/算法/采样有效性校验设计说明.md` | +| L1 | 谐波相量入口(IA 的 2/5 次) | 复现规划 §3.1(L1-9) | +| L2 | 全周傅氏 5 实例、双区原子切换、每拍重算 | 复现规划 §3.2(L2-1~L2-4/L2-6/L2-7) | +| L2.5 | 测频(自适应窗,45~55 Hz 最坏 0.0101 Hz) | 复现规划 §3.3(L3-5) | +| L3 | 9 元件(三段过流/过负荷/过压/欠压/零序过压/过频/低频) | 复现规划 §3.3(L3-1/L3-3~L3-6) | +| L4 | SOE + 动作记录(64 B 定长、CP56 时标、SPSC 环异步落盘) | 复现规划 §3.4(L4-4/L4-5) | +| L5 | 定值校验和 + 持久化 + 全局软压板 + 采样故障闭锁 | 复现规划 §3.5(L5-1/L5-4) | +| 上行 | 104 总召/变位/遥控/定值读写/时钟同步 | `docs/子系统设计/IEC104上行设计说明.md` | + +### 3.2 部分闭环 + +| 项 | 到什么程度 | 差什么 | +|---|---|---| +| 定值模型 | 40 项保护定值 + 4 项 PT/CT 额定 | PT/CT 额定**零消费点**;运行参数段整段未实现 | +| 频率 | 算法层 0.01 Hz 可用 | 未闭环调采样率;104 的 `0x401D` 仍硬编码为无效 | +| 遥测 | 9 个点号在册,4 个有效 | 值是原始码值;无平均/死区/品质细分 | +| 自检 | 定值 + 采样有效性 | 无 Flash CRC、无 RAM 扫描、无出口回路自检 | +| 就地显示 | 页面在册 | `ui_page_ac.c` 是硬编码占位数据("1.03" 等),不接相量 | + +### 3.3 完全空白 + +遥测链 · 派生量(线/序/差分/直流) · 录波与 COMTRADE · 104 文件服务 · 开入量采集 · 遥控出口 · 跳闸出口 · 功率与电度 · 同期 · 小电流选线 · 运行参数段 · 标定 · 等周波 · 削顶检测。 + +--- + +## 4. 阻断级短板 + +> 判据:**不补这一项,送检或现场投运必挂**。四项都是纯软件或纯软件为主,不依赖 V0.2 硬件。 + +### 4.1 工程量折算缺失(标定) + +**现状与证据** + +- `App/algo/adc_input.c` 的 `adc_input_raw()` 明确只搬原始码值、不做标定(见其头文件注释)。 +- `App/algo/phasor.c` 的系数表只含 √2/N 折算,**不含通道增益**——`fAmSQ` 的数值量纲是"码值",不是 V/A。 +- `App/algo/prot_elm.h` 与 `App/algo/freq.h` 均注明"工程量↔码值换算系数 = 1(L1-5 标定未实现)"。 +- `App/protocol/iec104/iec104_pts.c` 的遥测源直接返回 `p.fAmSQ`;死区 10.0 也是码值口径。 + +**参考做法**:`DataPre.c` 每拍做 `fValue = iVal * pfSamCoe[dwPinNo]`,每通道一个定点(2^10)系数,把码值换成二次侧工程量;再由 PT/CT 变比换一次值。 + +**不补的后果**(三条,逐条都足以挂验收) + +1. 主站收到的"1Ua"是 11 000 左右的整数——不是伏特。点表要求短浮点、**采集上传系数 = 1**,即设备必须自己送工程量。 +2. 保护定值(10.0 A / 120.0 V)在跟码值比较 → 实际动作门槛由前端增益和分压比偶然决定,**无法整定**,也无法解释。 +3. 精度指标(幅值误差 ≤ 1%)无从谈起,标准源注入验收必然不过。 + +**建议动作** + +- 新增 L1 后置标定层(建议 `App/algo/adc_cal.c/h`,零平台依赖便于主机单测):每通道 `k`/`b`(Q10 定点),对外只暴露"语义通道 → 工程量"。 +- 落点放在 `adc_input_raw()` 与 `sample_ring_push_frame()` 之间,**上层一行不改**——相量、元件、遥测、UI 自动拿到工程量。 +- 系数载体沿用 `prot_set_store` 的 blob 范式(magic + 版本 + 校验和 + 原子写),文件独立于定值档,避免标定与定值互相干扰。 +- PT/CT 变比(`PS_PT_PRI`/`PS_CT_PRI` 等 4 项已在册但零消费)在此层接上,输出"二次值"与"一次值"两套口径。 +- 规模:**M**(新模块 + 单测 + 标定流程文档 + 台架标准源注入)。 + +> ⚠ 顺序不可颠倒:**标定必须早于遥测链**。否则遥测链的平均/死区/零漂参数全部要按码值调一遍,标定落地后再按工程量调一遍。 + +### 4.2 遥测链(测量轨)缺失 + +**现状与证据** + +- 全库无 200 ms 测量任务,无谐波方和根、无 4 点平均、无死区确认、无零漂、无畸变率(按关键词扫描 `App/` 与 `Drivers/BSP/` 均无命中)。 +- `App/protocol/iec104/iec104_pts.c` 的 COV 比对在**协议层**做死区判定——遥测层不存在。 +- 遥测值 = 相量瞬时值,每 1 ms 变化一次。 + +**参考做法**:`CalfYcMea.c`(2 453 行)——中断内回溯一周波 20 点入私有缓冲,主循环每 200 ms:`YcJLFilter` 对 k=1~9 逐次 DFT → 方和根 `√(ΣHk²)` → 4 点平均 → 死区连续 2 点确认 → 零漂门槛置零 → 微调系数 → 变比。 + +**不补的后果** + +1. **有效值口径错**:保护要"基波有效值"(抗谐波误动),计量/遥测要"真有效值"(含 2~9 次谐波)。现在只有前者,且直接拿去上送。 +2. **数值抖动**:每 1 ms 变化的瞬时值直接进 COV,主站看到的是一条抖动的曲线,不是稳定读数。 +3. **死区语义错位**:死区做在 104 层,换协议(101/61850)就要重做一遍;它本质是测量层的属性。 +4. 畸变率、谐波监视、电度、越限报警全部依赖这条链,没有它这些功能都没有落脚点。 + +**建议动作** + +- 新增测量轨(建议 `App/algo/meas.c/h`):吃 `sample_ring` 的一周波窗,出"总有效值 + 各次谐波 + 畸变率 + 平均后工程值"。 +- 新增 200 ms 节拍消费者(`App/task/meas_task.c` 或并入 `protectTask` 的低优先级分支——**不建议**并入,测量链会拖长保护任务的最坏链)。 +- 把 104 的死区判定**上移**到测量层,104 只做"取值 + 打包"。这一步同时解决"换协议要重做"的问题。 +- 品质位同步细分:`IV`(无效)/`NT`(未就绪)/`OV`(越限)/`BL`(闭锁),当前只有前两个。 +- 规模:**L**(新模块 + 新任务 + 栈预算 + 运行参数接线 + 单测)。 + +### 4.3 运行参数段 0x8020~0x8058 缺失 + +**现状与证据** + +- `App/algo/prot_set.c` 的元数据表 40 项集中在 `0x8820` 定值段;运行参数段只"借用"了 `0x8027~0x802A` 四个地址做欠压/过压保护定值(与参考一致,不算错)。 +- 其余 `0x8020~0x8023`(死区)、`0x8026/0x8042/0x8045`(变比)、`0x8030~0x8032`(开入防抖、分合闸脉冲)、`0x8035~0x8038`(零漂门槛)、`0x8046~0x804B`(负荷越限/重载/过载三级)、`0x804C~0x8053`(录波投退与定值)、`0x8054~0x8056`(功率/电量变比、功率置负)**全部未实现**。 + +**参考做法**:`Const_CommPara.c` 的 `CommPara_ConfigTable` 是完整表(约 40 项),每项带名称、类型、长度、默认值。 + +**不补的后果** + +1. 主站按点表读写这些地址,一律回"未知 IOA"——送检会逐项对表。 +2. 死区、零漂、变比无法整定 → 4.1/4.2 的参数只能写死在代码里。 +3. 负荷三级报警(点表 `YX22` 重载 / `YX23` 过载)没有定值来源,`YX22` 至今无效。 +4. 录波投退与启动定值无处安放 → 4.4 的录波无法整定。 + +**建议动作** + +- 把现有 `prot_set` 扩成"参数模型"(定值段 + 运行参数段),或新增并列的 `run_par.c/h`——**推荐后者**:定值段有 sum32 封存/闭锁语义,运行参数是"可随时改的运行旋钮",混在一起会把闭锁语义搅乱。 +- 地址、类型、默认值以参考表为准逐项对照,**不要凭想象填**。 +- 规模:**M**(表驱动,机械但量大;104 侧 `set_read/set_write` 已是通用接口,不用改协议)。 + +### 4.4 录波与 104 文件传输缺失 + +**现状与证据** + +- 全库无录波、无 COMTRADE(关键词扫描零命中)。 +- 104 只实现 8 种 ASDU,**无文件传输类型**(120~122 及读文件目录扩展),无定值区类型。 +- 采样通路只有 1 kHz 一条,没有 4 倍过采样。 + +**参考做法**:`Wave.c`(2 061 行)+ `WaveComtrade.c`(5 521 行)——80 点/周波过采样区、突变量/开关变位/零序突变启动、8 周波 RAM 缓存、COMTRADE 文件生成与上传。 + +**不补的后果** + +1. 点表两条硬指标直接落空:录波文件存储 ≤ 15 s、104 读文件目录/文件 ≤ 30 s。 +2. 现场故障无波形可分析——保护动作了也说不清为什么动。 +3. 涌流制动、故障启动、小电流选线等后续功能全部依赖波形数据。 + +**建议动作**(分两步,可分期交付) + +- **数据面**:先做 1 kHz 录波(复用现有节拍,8 周波 RAM 环 + 突变量启动),跑通"触发 → 缓存 → 落盘"。这一版能满足"有波形",但谐波/暂态分析能力弱。 +- **采样率升级**:若要 80 点/周波,需把 TIM3 提到 4 kHz、保护环按 1/4 抽取、录波环全速。器件不是瓶颈(TPAFE 无过采样时 350 kSPS),瓶颈是 `adcTask` 的 CPU 与 4 倍 RAM——**先实测再定**,不要先改节拍。 +- **文件面**:COMTRADE 1999 生成 + 104 文件服务(读目录/读文件/召唤)。 +- 规模:**L**(数据面 M,文件面 M,采样率升级另算)。 + +--- + +## 5. 功能级短板 + +> 判据:不影响"数据可信",但产品面不完整,送检会作为功能项抽查。 + +### 5.1 开入量采集与遥信(33 点只实现 6 点) + +- **现状**:固件**完全没有开入/开出代码**(关键词扫描 `App/`、`Drivers/BSP/` 零命中)。硬件上子板桥 U18 有 `EXTKI×3`(PE2/PE3/PE4)与 `EXTKO1/2/3`、`RELAY_STO`,但未配置、未读取。 +- **缺口**:点表 33 点遥信中,`YX24~30` 外部遥信无来源,`YX1~4` 开关位置双点恒无效;开入防抖定值 `0x8030` 无处落地。 +- **建议**:先确认子板开入路数(3 路 `EXTKI` 远少于点表 7 路外部遥信,**这是硬件问题不是软件问题**);软件侧做 `ki.c`(防抖 + 变位检测),变位复用已有 SOE 框架(加一个记录类型即可)。 +- **规模**:S(软件)/ 依赖硬件确认。 + +### 5.2 遥控与出口(8 点遥控只 2 点转真) + +- **现状**:`YK11`(信号复归)、`YK12`(软压板)已转真;`YK1~4`、`YK13/14` 一律否定确认,因 V0.1 无出口硬件(复现规划 §9 的 R7 否定确认口径)。保护动作只出遥信 + 日志,无电气出口。 +- **建议**:硬件确认出口回路后,做 `ko.c` 抽象(脉冲宽度用 `0x8031/0x8032`)+ 出口自检。软件侧可先建接口不使能。 +- **规模**:M / 依赖硬件。 + +### 5.3 派生量(L2-5) + +- **现状**:只有 3 个基波实例 + 2 个谐波实例,无线电压、无负序/正序/零序合成、无差分、无直流分量。 +- **为什么现在做**:V0.1 受 N-18 限制,跨转换器合成**不成立**(`UA` 与 `UB` 无同一时刻性);但**代码与单测可以先就绪**,V0.2 只改映射表就能使能。参考侧 `CalfLineVec`/`CalfNegVec`/`CalfPosVec`/`CalfSeqVec`/`CalfZeroVec`/`CalfAnaDC`/`CalfAnaDif` 是七个小模块,逻辑清晰、天然可主机单测。 +- **建议**:按"吃实例下标、出合成相量"的接口建 `derived.c/h`,V0.1 标注"不使能",单测用合成正弦验证相位关系。 +- **规模**:M。 + +### 5.4 保护元件扩展 + +- **现状**:9 个元件。缺 PT 断线、CT 断线、涌流制动、母线接地、故障启动、无压/无流闭锁、零序过流(V0.2)、重合闸、后加速。 +- **优先做哪一个**:**PT 断线**。它不是"多一个元件",而是电压类保护的**安全前置**——PT 断线时 `UA` 跌落会直接触发欠压动作,这是现场最典型的误动来源。涌流制动要等三相(V0.2),其余随产品定义。 +- **建议**:PT 断线用"电压突变 + 负序/零序"判据(需派生量层,见 5.3);故障启动与录波启动共用一套突变量判据(见 4.4)。 +- **规模**:M(PT 断线)/ 其余随 V0.2。 + +### 5.5 功率与电度 + +- **现状**:零。点表 `4019~401c`(P/Q/S/PF)与电度上送缺失。 +- **关键判断**:V0.1 上**算不出来**(N-18 禁止跨转换器功率运算),产品口径是"取子板计量模块结果"(见 `docs/硬件平台/ADC通道映射说明.md` §1)。所以这不是"补算法",而是**先定数据来源**: + - 若子板计量有数字接口(RS-485/SPI)→ 这是 B2(RS-485 采集,已暂缓)的一部分; + - 若没有 → 等 V0.2 三相全上 TPAFE 后自算。 +- **建议**:**先拍板来源,再写代码**。现在写功率算法在 V0.1 上无法验证,属于无效工作。 +- **规模**:取决于来源。 + +--- + +## 6. 精度与数据质量 + +### 6.1 等周波采样未闭环(L1-7) + +- **现状**:TIM3 固定 1 kHz。`freq.c` 已能出 0.0101 Hz 的测频结果,但**没人用它调采样率**。 +- **后果**:频偏 ±2 Hz 时窗长偏离整周波,基波幅值误差 1~2%,相位误差更大;2 次/5 次谐波相量(涌流、选线)误差被放大。参考侧靠"测频 → 调 EHRPWM 周期"把窗长锁死在 20 点/周波。 +- **建议**:闭环 = `freq_get()` → 查表/PI → TIM3 ARR 微调(1 kHz ±2%)。注意三点:① 调 ARR 会同时改变 ADC1 触发与 TPAFE CONVST 节拍,要核算 ADC1 9 通道扫描(≈67 µs)与 TPAFE 转换时间在最短周期内仍有余量;② 先开环验证固定 50 Hz 精度,再上闭环;③ 调频期间相量窗会短暂不整周波,保护侧要有过渡处理(或仅在频率稳定时调)。 +- **规模**:M。 + +### 6.2 削顶/越界检测缺失(L5-2 残余) + +- **现状**:`adc_health` 只判"前进量"(静默/丢帧/倒退/错误增量),**不判数据合理性**。STM32 侧交流量负半周削顶(R5)在代码里无法被检出。 +- **后果**:V0.1 的 `UB/UC/IB/IC/IN` 读数"看起来有值",实际是削顶后的假值。现在靠"在点表里标 IV"规避——那是**配置**,不是**检测**。一旦有人把点表改回有效,或者 V0.2 上线后某一路前端失效,系统不会告警。 +- **建议**:加两条判据进 `adc_health`:① 码值触顶/触底比例(连续 N 点贴满量程 → 削顶位);② 直流偏置超限(一周波均值偏离中点)。两条都是纯算术,天然可单测。 +- **规模**:S。 + +### 6.3 就地显示实时值 + +- **现状**:`Drivers/BSP/UI/ui_page_ac.c` 是硬编码占位数据(`"1.03"` 等),不接相量/频率。 +- **后果**:现场无法就地读数,只能靠主站;产品需求的内容页要求显示实时值。 +- **建议**:走 UI 数据快照层(App 侧 `ui_data_feed` 推、BSP 侧 `ui_data` 存、页面只读),**不能**让页面直接 include `phasor.h` / `freq.h`——分层门禁禁止。方案见 `docs/UI设计/UI_数据供给设计说明.md`。**放在标定(§4.1)之后做**——没有工程量,显示出来也是码值。 +- **规模**:S。 + +--- + +## 7. 自检覆盖 + +| 项 | 参考 | 本项目 | +|---|---|---| +| 定值校验和 | ✅ | ✅ | +| 采样有效性 | ✅(插值异常、AD 自检) | ✅(部分,见 6.2) | +| Flash CRC | ✅ | ❌ | +| RAM 扫描 | ✅(`RamScan.c`) | ❌ | +| 出口回路自检 | ✅ | ❌(无出口硬件) | +| 电源/时钟监测 | ✅ | ❌(RTC 有诊断) | + +**建议**:Flash CRC(启动 + 周期)与 RAM 扫描成本低、价值高,且不依赖硬件,可与 4.x 并行做;出口自检随 5.2。 + +--- + +## 8. 建议的下一步 + +### 阶段一:数据可信(代码以纯软件为主,可主机单测) + +> 目标:**主站读到的每一个数都是工程量、稳定、可整定。** +> 除标定系数的**实际整定**需要标准源外,其余四项的代码与单测都不占台架。 + +1. **工程量折算**(4.1)——一切精度的前提。 +2. **遥测链**(4.2)——谐波方和根 + 平均 + 死区 + 零漂,死区从 104 层上移。 +3. **运行参数段**(4.3)——死区/变比/零漂/负荷报警/录波投退的落点。 +4. **顺手项**:`0x401D` 频率点绑定 `freq_get()`(现在是一行 `-1` 硬编码,`freq.c` 早就能出数);`YX22/YX23` 三级负荷报警接运行参数。 + +这四项合起来是**一次完整的"测量子系统"立项**,建议按一个波次做,因为它们共享同一批参数与同一条数据通路;拆开做会互相返工。 + +> **已立项(2026-10-23)**:本阶段 = **W8「数据可信」**,任务卡、事实基线与验收判据见 +> `docs/任务规划/W8-数据可信.md`。排序已由 `docs/任务规划/README.md` §2 接管,本文只保留成因分析。 + +### 阶段二:精度与安全网 + +5. **削顶/越界检测**(6.2)——小改动,先把安全网补上。 +6. **等周波闭环**(6.1)——需要台架与频率源,排在纯软件项之后。 +7. **派生量层**(5.3)——为 V0.2 与 PT 断线铺路。 +8. **PT 断线**(5.4)——依赖派生量。 + +### 阶段三:记录与文件(建议单独立项) + +9. **录波数据面**(4.4 前半)——1 kHz 起步,跑通触发与落盘。 +10. **COMTRADE + 104 文件服务**(4.4 后半)——送检硬指标。 + +### 并行:硬件与产品确认(不确认就无法开工) + +| # | 待确认 | 卡住什么 | +|---|---|---| +| 1 | 子板开入实际路数与电平(`EXTKI` 只有 3 路,点表要 7 路外部遥信) | 5.1 | +| 2 | 出口回路形态(`RELAY_STO`/`EXTKO`,有无回读) | 5.2、出口自检 | +| 3 | 功率/电度数据来源(子板计量有无数字接口) | 5.5 | +| 4 | 录波采样率要求(20 点/周波够不够,还是必须 80 点) | 4.4 的采样率升级决策 | +| 5 | 送检是否逐项核对 33 遥信 / 8 遥控 | 5.1/5.2 的优先级 | +| 6 | V0.2 硬件时间表 | 5.3/5.4/零序过流/三相过流的排期 | + +--- + +## 9. 不建议现在做 + +| 项 | 为什么不做 | +|---|---| +| 45 个保护元件全量移植 | V0.1 只有三路测量有效,多数元件无输入可验;移植了也只能"建接口不使能",价值低于补数据层 | +| 同期合闸、小电流接地选线 | 依赖三相/零序电流与出口,V0.1 均不具备;参考侧同期组件本身也被注释未启用 | +| IEC 61850 / GOOSE | 与单核 FreeRTOS 平台、当前产品定义都不匹配 | +| 双核拆分 / DSP 移植 | 平台不匹配;单核 168 MHz + FPU 目前余量够 | +| 在 V0.1 上写功率算法 | N-18 使相位关系不成立,写出来无法验证(见 5.5) | +| 先改 4 kHz 节拍再想录波 | 节拍一改,保护窗、CPU、RAM 全变;应先定"录波要不要 80 点"再动 | + +--- + +## 10. 本报告与既有登记的关系 + +本报告**不新增编号**,避免与既有登记重复。各短板的落点: + +| 短板 | 既有登记位置 | 本报告补充了什么 | +|---|---|---| +| 标定 | `docs/算法/继电保护功能复现规划.md` §3.1 的 L1-5(⬜) | 明确它是**遥测链的前置**,且给出落点(`adc_input_raw()` 与采样环之间) | +| 等周波 | 同 §3.1 的 L1-7(⬜) | 补三条实施约束(ARR 联动、开环先行、过渡处理) | +| 遥测链 | 复现规划 §3.2(L2-8,标"可选") | **建议从"可选"升为"必做"**——它是遥测、电度、越限、畸变率的共同底座 | +| 派生量 | 复现规划 §3.2(L2-5,V0.1 不适用) | 建议代码与单测先就绪,V0.2 只改映射 | +| 录波 | 复现规划 §3.4(L4-6,⬜) | 补"104 文件服务"这一半(原登记只写录波) | +| 运行参数段 | 未登记 | **新发现**,建议按语义标识登记("运行参数段 0x8020~0x8058") | +| 开入开出 | 未登记 | **新发现**,建议登记("开入量采集与遥信"、"遥控与出口") | +| 削顶检测 | 复现规划 §3.5(L5-2 残余,"码值越界待做") | 给出两条具体判据 | +| 频率点 | `docs/子系统设计/IEC104上行设计说明.md` §8 第 4 条 | 明确它现在就能做(算法已就绪,只差绑定) | + +--- + +## 附:参考侧能力清单(对照用) + +| 模块 | 行数 | 能力 | 本项目 | +|---|---|---|---| +| `DataPre.c` | 2 512 | 码值→工程量、自产零序、录波拷贝、插值异常闭锁 | 无(仅语义映射) | +| `CalFFTVecFull.c` | 418 | 全周傅氏 | ✅ 有(`phasor.c`) | +| `CalfYcMea.c` | 2 453 | 遥测全链(k=1~9 方和根/平均/死区/零漂/微调/变比/功率) | ❌ | +| `CalSoftFr.c` | 398 | 过零测频 + 调频闭环 | 🔶 测频有,闭环无 | +| `Wave.c` + `WaveComtrade.c` | 7 582 | 录波 + COMTRADE | ❌ | +| `GetZoreSamData.c` | 232 | 零序采样缓存(选线) | ❌ | +| `CalSynClose.c` | 1 114 | 同期合闸 | ❌(参考侧亦未启用) | +| `Calf*Vec` 系列 | ≈ 1 000 | 线/正/负/零序/差分/直流 | ❌ | +| `RamScan.c` / `SelfChk.c` | — | RAM 扫描 / 自检 | ❌ | +| `RelayUnit/PRS_*.c` | 45 个文件 | 45 类保护元件 | 9 个实例 | + +> 行数为源码实际统计(`wc -l`),供规模感参考,不代表移植工作量。