Files
STM32F4-Base/docs/问题记录/采集与数据处理短板评测.md
T
wandering1 593c5d0c84 refactor(编号): 采集链分层 L1/L1.5/L2/L2.5/L3/L4/L5 → 语义名(批次 1)
用户裁定(2026-10-28):L1/L1.5/L2/L2.5/L3 这套层号「谁能看懂」,改用语义名。
映射(同一批定稿,含 L4/L5):
  L1   → 语义取数与有效性
  L1.5 → 标定折算
  L2   → 全周傅氏相量
  L2.5 → 测频与遥测快照
  L3   → 保护判据
  L4   → 出口与记录
  L5   → 动作留痕

实测规模:384 站点 / 62 文件(App/algo、App/task、test/host 六个套件、docs/算法、
产品需求、架构总览、启动顺序、ADC 采样节拍、IEC104 上行、采集短板评测、内存管理、
AGENTS.md、README.md、docs/README.md、.pre-commit-config.yaml 与 scripts 里的注释)。

改法(不是全局替换,逐模式有上下文规则):
- 先吃同位语再落裸词:L1 有效性校验 → 语义取数与有效性校验、L2 相量层 → 全周傅氏
  相量层、L3 保护 → 保护判据、L2.5 遥测快照 → 测频与遥测快照,避免「保护判据保护判据」
  这类重复(第一版就是这么坏掉的,已整体回滚重做)。
- .c/.h 只改注释:先把字符串字面量切出去(引号数为奇数的跨行注释按整行处理),
  C 字符串里的 L2-in ring 之类原样保留——AGENTS 铁律「字符串字面量必须纯 ASCII」。
- 层内条目号(L1-3 / L2-3 这类)**本批不动**,属批次 2;另外三族(UI 菜单层级
  L0~L3、链路延迟分段 L1~L8、CubeMX 防丢失三层)也不动,属批次 3。
- 顺手修的措辞:范围写法 L1~L3 → 「分层(语义取数与有效性 → 保护判据)」、
  CI 段「不含 L1/L2/L3」→「不含采集链分层」、目录地图里同一处并列表述。

验证:@build 0 错 0 警(Code=236456,与改前逐字节同尺寸——纯注释改动);
内存布局配图已按新脚本重生成(自检通过);doc-links --all --sections-strict 通过
(195 文档);mojibake / bom-guard / coding-standard / 新编号门禁自查 全 rc=0;
git diff --check 干净。
2026-10-28 13:04:02 +08:00

26 KiB
Raw Blame History

采集与数据处理短板评测(2026-10-23)

定位:以参考项目 CLS100(Scatter_P_HV03.01_SV01.01)的"采样 → 预处理 → 相量 → 遥测 → 录波 → 上送"全链路为对照,评测本项目在电力采集与数据处理上的完成度,指出下一步该补的短板与顺序。 不是待办登记簿:排序权威仍是 docs/任务规划/README.md §2;本文只出评测结论与建议,条目落地时按语义标识登记进 docs/任务规划/登记簿.md。 对照口径:项目内以 docs/算法/继电保护功能复现规划.md §3 的 语义取数与有效性~动作留痕清单为准;参考侧以参考项目 项目分析文档/04-算法与采样专题/ 三篇(《ADC采集至数据使用全流程详解》《项目详细分析-交流采样与有效值计算》《傅氏算法详解》)与源码为准。 硬件前提:结论只针对 V0.1 现板;受「双转换器无共同采样触发」(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 的对应小节。

层 项 证据
语义取数与有效性 1 kHz 硬件节拍、TPAFE 快照、ADC1 DMA 乒乓、语义映射 docs/算法/继电保护功能复现规划.md §3.1 的「周期 CONVST 重触发」~「通道语义映射」
语义取数与有效性 采样有效性(静默/丢帧/倒退/错误增量) 复现规划 §3.1(「采样有效性校验」);docs/算法/采样有效性校验设计说明.md
语义取数与有效性 谐波相量入口(IA 的 2/5 次) 复现规划 §3.1(「二次谐波/五次谐波提取入口」)
全周傅氏相量 全周傅氏 5 实例、双区原子切换、每拍重算 复现规划 §3.2(「全周傅氏系数表」~「相位输出」)
测频与遥测快照 测频(自适应窗,45~55 Hz 最坏 0.0101 Hz) 复现规划 §3.3(「过频 / 低频」)
保护判据 9 元件(三段过流/过负荷/过压/欠压/零序过压/过频/低频) 复现规划 §3.3(「三段式相间过流」~「零序过压」)
出口与记录 SOE + 动作记录(64 B 定长、CP56 时标、SPSC 环异步落盘) 复现规划 §3.4(「SOE 记录」)
动作留痕 定值校验和 + 持久化 + 全局软压板 + 采样故障闭锁 复现规划 §3.5(「定值校验和」)
上行 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(「通道标定(一次系数 + 零漂)」标定未实现)"。
  • 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%)无从谈起,标准源注入验收必然不过。

建议动作

  • 新增 语义取数与有效性后置标定层(建议 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 派生量(「线/负序/零序合成」)

  • 现状:只有 3 个基波实例 + 2 个谐波实例,无线电压、无负序/正序/零序合成、无差分、无直流分量。
  • 为什么现在做:V0.1 受双转换器无共同采样触发限制,跨转换器合成不成立(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 上算不出来(双转换器无共同采样触发 → 禁止跨转换器功率运算),产品口径是"取子板计量模块结果"(见 docs/硬件平台/ADC通道映射说明.md §1)。所以这不是"补算法",而是先定数据来源:
    • 若子板计量有数字接口(RS-485/SPI)→ 这是 B2(RS-485 采集,已暂缓)的一部分;
    • 若没有 → 等 V0.2 三相全上 TPAFE 后自算。
  • 建议:先拍板来源,再写代码。现在写功率算法在 V0.1 上无法验证,属于无效工作。
  • 规模:取决于来源。

6. 精度与数据质量

6.1 等周波采样未闭环(「等周波采样(软件测频 + 调频闭环)」)

  • 现状: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 削顶/越界检测缺失(「采样通道自检」残余)

  • 现状: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):本阶段 = 「数据可信」,任务卡、事实基线与验收判据见 docs/任务规划/数据可信.md。排序已由 docs/任务规划/README.md §2 接管,本文只保留成因分析。

阶段二:精度与安全网

  1. 削顶/越界检测(6.2)——小改动,先把安全网补上。
  2. 等周波闭环(6.1)——需要台架与频率源,排在纯软件项之后。
  3. 派生量层(5.3)——为 V0.2 与 PT 断线铺路。
  4. PT 断线(5.4)——依赖派生量。

阶段三:记录与文件(建议单独立项)

  1. 录波数据面(4.4 前半)——1 kHz 起步,跑通触发与落盘。
  2. 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 上写功率算法 双转换器无共同采样触发使相位关系不成立,写出来无法验证(见 5.5)
先改 4 kHz 节拍再想录波 节拍一改,保护窗、CPU、RAM 全变;应先定"录波要不要 80 点"再动

10. 本报告与既有登记的关系

本报告不新增编号,避免与既有登记重复。各短板的落点:

短板 既有登记位置 本报告补充了什么
标定 docs/算法/继电保护功能复现规划.md §3.1 的「通道标定(一次系数 + 零漂)」(⬜) 明确它是遥测链的前置,且给出落点(adc_input_raw() 与采样环之间)
等周波 同 §3.1 的「等周波采样(软件测频 + 调频闭环)」(⬜) 补三条实施约束(ARR 联动、开环先行、过渡处理)
遥测链 复现规划 §3.2(「遥测谐波轨(可选)」,标"可选") 建议从"可选"升为"必做"——它是遥测、电度、越限、畸变率的共同底座
派生量 复现规划 §3.2(「线/负序/零序合成」,V0.1 不适用) 建议代码与单测先就绪,V0.2 只改映射
录波 复现规划 §3.4(「故障录波(可选)」,⬜) 补"104 文件服务"这一半(原登记只写录波)
运行参数段 未登记 新发现,建议按语义标识登记("运行参数段 0x8020~0x8058")
开入开出 未登记 新发现,建议登记("开入量采集与遥信"、"遥控与出口")
削顶检测 复现规划 §3.5(「采样通道自检」残余,"码值越界待做") 给出两条具体判据
频率点 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),供规模感参考,不代表移植工作量。