用户指令(2026-10-30):确认录波任务完成度,把除实际操作之外的所有 步骤做完,然后删除规划文件,避免已完成的工作被误读为未做。 审计结论:代码面确已全部收口——wave_read.py --selftest 92/92、 三套主机单测 113/170/110 复跑全 rc=0、bench 自抓与 PC 读段脚本在仓、 数据可信/复刻明细/短板评测/UI 两处回写均已做过。**唯一未跑的是 板级台架那一轮(实际操作)**,判据不得丢,故先迁后删: - 设计说明 §9 承接落盘道失败留痕名全清单(13+1 条,打印点现值 default_task.c:816/:831 实测核对) - 设计说明 §10 承接原卡 2/卡 3 的板级段(触发来路一行、回放页 一行)与本波执行顺序图(mermaid,原规划 §3 逐字迁) - §4/§11 头部定位、§11 尾注、§14 关系行改属主口径 - 全库 32 处引用改挂设计说明 §10/§9(18 文件):任务规划 README 独立行(顺带订正单测数 100→113 为实测)、登记簿、数据可信 ×2、 复刻明细、产品需求 ×2、ADC 注入 ×3、短板评测 ×2、页面补齐规划、 App/algo README、配图生成器注释、录波三套单测注释 ×6 - git rm docs 该规划文件;人类索引任务规划 6→5 个文件(沿革注照 屏板链路先例走裸句,不留反引号死引用) 验证:残留两形态(任务规划/故障录波、裸文件名)全树扫描 0; mermaid 预检新发 0;doc-links 11 个被改文件逐文件 PASS;生成器 注释改动重跑产物逐字节不变(svg 60a0dd39e4);三套单测与 wave_read selftest 复跑全绿;18 文件 BOM/CR/U+FFFD 全零。 本笔不含固件编译单元(test/host 仅注释行与文档),构建留待合并 轮统一跑;板级轮启动判据与顺序见设计说明 §10。
28 KiB
采集与数据处理短板评测(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 直接读相量瞬时值 | 工程量折算、谐波方和根、平均/死区/零漂、品质位 |
| 记录链(录波) | SOE 文本记录(64 B 定长)加上录波段文件:1 kHz / 8 路原始码值 / 单段 320 点、/wave 下轮转、PC 侧读段脚本与现场单通道回放页——代码面 2026-10-29 已交付,板级判据一轮未跑(docs/子系统设计/故障录波设计说明.md §10) |
COMTRADE 文件、104 文件服务;以及 4 kHz 全速与 80 点/周波——本波按 1 kHz 起步,该偏离已按 docs/子系统设计/故障录波设计说明.md §2 显式登记,不是已补齐 |
| 就地闭环(开入开出) | 固件完全没有 | 开入量采集与防抖、遥信变位、遥控出口、跳闸出口 |
四个阻断级短板(不补则送检必挂):
- 工程量折算缺失——遥测上送的是 ADC 原始码值(数千~数万),点表要求"短浮点、系数 = 1"的工程量;保护定值(A/V)也在跟码值比较,量纲不成立。
- 遥测链缺失——没有 200 ms 测量轨:无谐波方和根、无 4 点平均、无死区确认、无零漂、无畸变率;死区做在 104 层(架构错位)。
- 运行参数段 0x8020~0x8058 缺失——死区、变比、零漂门槛、三级负荷报警、录波投退与定值,主站读写全部回"未知地址"。
- 录波已按 1 kHz 口径落地(2026-10-29 代码面),104 文件传输仍缺——点表明确要求"录波文件存储 ≤ 15 s"(该时限未测,见 §4.4)与"104 读文件目录/文件 ≤ 30 s"(未做)。
建议顺序:先做"数据可信"(1 + 2 + 3 + 频率点,纯软件、可主机单测),再做"精度与安全网"(等周波 + 削顶检测 + 派生量),最后单独立项"录波与文件"(最大单块)。开入开出与功率/电度需硬件与产品先拍板,软件先建接口不使能。
2. 对照基准:参考系统在采集与数据处理上有什么
按数据流动的七个环节对照,只列与本项目有差距的维度:
| 环节 | 参考实现 | 本项目 | 差距 |
|---|---|---|---|
| 采样节拍 | 内总线 4 kHz(80 点/周波),保护取 1/4 → 1 kHz;交流板本地插值对齐 | TIM3 1 kHz 单节拍,无过采样通路 | 录波已有 1 kHz 数据源(2026-10-29 交付代码面,见 docs/子系统设计/故障录波设计说明.md §2),但仍无 4 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 行) |
1 kHz × 8 路原始码值单段(2026-10-29 代码面交付,含段文件与 PC 侧读段工具) | 部分补齐:口径偏离(无过采样、无突变量启动、无 COMTRADE),见 docs/子系统设计/故障录波设计说明.md §2 与 §13 |
| 记录 | 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 文件服务(录波本身已于 2026-10-29 落地 1 kHz 口径)· 开入量采集 · 遥控出口 · 跳闸出口 · 功率与电度 · 同期 · 小电流选线 · 运行参数段 · 标定 · 等周波 · 削顶检测。
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 变比换一次值。
不补的后果(三条,逐条都足以挂验收)
- 主站收到的"1Ua"是 11 000 左右的整数——不是伏特。点表要求短浮点、采集上传系数 = 1,即设备必须自己送工程量。
- 保护定值(10.0 A / 120.0 V)在跟码值比较 → 实际动作门槛由前端增益和分压比偶然决定,无法整定,也无法解释。
- 精度指标(幅值误差 ≤ 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 点确认 → 零漂门槛置零 → 微调系数 → 变比。
不补的后果
- 有效值口径错:保护要"基波有效值"(抗谐波误动),计量/遥测要"真有效值"(含 2~9 次谐波)。现在只有前者,且直接拿去上送。
- 数值抖动:每 1 ms 变化的瞬时值直接进 COV,主站看到的是一条抖动的曲线,不是稳定读数。
- 死区语义错位:死区做在 104 层,换协议(101/61850)就要重做一遍;它本质是测量层的属性。
- 畸变率、谐波监视、电度、越限报警全部依赖这条链,没有它这些功能都没有落脚点。
建议动作
- 新增测量轨(建议
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 项),每项带名称、类型、长度、默认值。
不补的后果
- 主站按点表读写这些地址,一律回"未知 IOA"——送检会逐项对表。
- 死区、零漂、变比无法整定 → 4.1/4.2 的参数只能写死在代码里。
- 负荷三级报警(点表
YX22重载 /YX23过载)没有定值来源,YX22至今无效。 - 录波投退与启动定值无处安放 → 4.4 的录波无法整定。
建议动作
- 把现有
prot_set扩成"参数模型"(定值段 + 运行参数段),或新增并列的run_par.c/h——推荐后者:定值段有 sum32 封存/闭锁语义,运行参数是"可随时改的运行旋钮",混在一起会把闭锁语义搅乱。 - 地址、类型、默认值以参考表为准逐项对照,不要凭想象填。
- 规模:M(表驱动,机械但量大;104 侧
set_read/set_write已是通用接口,不用改协议)。
4.4 录波已按 1 kHz 口径落地,COMTRADE 与 104 文件传输仍缺失
现状与证据
- 录波已于 2026-10-29 落地(1 kHz / 8 路 / 段文件:
App/algo/wave_ring.c与App/algo/wave_store.c);COMTRADE 与 104 文件传输仍零命中(本波不做,见 docs/子系统设计/故障录波设计说明.md §13)。本节原写「全库无录波(关键词扫描零命中)」是落地前的现状句,下面几条里 4 kHz 过采样与文件面的差距仍然成立。 - 104 只实现 8 种 ASDU,无文件传输类型(120~122 及读文件目录扩展),无定值区类型。
- 采样通路只有 1 kHz 一条,没有 4 倍过采样。
参考做法:Wave.c(2 061 行)+ WaveComtrade.c(5 521 行)——80 点/周波过采样区、突变量/开关变位/零序突变启动、8 周波 RAM 缓存、COMTRADE 文件生成与上传。
不补的后果
- 点表两条硬指标直接落空:录波文件存储 ≤ 15 s、104 读文件目录/文件 ≤ 30 s。
- 现场故障无波形可分析——保护动作了也说不清为什么动。
- 涌流制动、故障启动、小电流选线等后续功能全部依赖波形数据。
建议动作(分两步,可分期交付)
- 数据面:先做 1 kHz 录波(复用现有节拍,8 周波 RAM 环 + 突变量启动),跑通"触发 → 缓存 → 落盘"。这一版能满足"有波形",但谐波/暂态分析能力弱。已按本条立项(2026-10-29;判据与顺序见 docs/子系统设计/故障录波设计说明.md §10):采样率与通道集已裁定,突变量启动留二期,触发先做手动与保护启动两路。
- 采样率升级:若要 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存、页面只读),不能让页面直接 includephasor.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. 建议的下一步
阶段一:数据可信(代码以纯软件为主,可主机单测)
目标:主站读到的每一个数都是工程量、稳定、可整定。 除标定系数的实际整定需要标准源外,其余四项的代码与单测都不占台架。
- 工程量折算(4.1)——一切精度的前提。
- 遥测链(4.2)——谐波方和根 + 平均 + 死区 + 零漂,死区从 104 层上移。
- 运行参数段(4.3)——死区/变比/零漂/负荷报警/录波投退的落点。
- 顺手项:
0x401D频率点绑定freq_get()(现在是一行-1硬编码,freq.c早就能出数);YX22/YX23三级负荷报警接运行参数。
这四项合起来是一次完整的"测量子系统"立项,建议按一个波次做,因为它们共享同一批参数与同一条数据通路;拆开做会互相返工。
已立项(2026-10-23):本阶段 = 「数据可信」,任务卡、事实基线与验收判据见
docs/任务规划/数据可信.md。排序已由docs/任务规划/README.md§2 接管,本文只保留成因分析。
阶段二:精度与安全网
- 削顶/越界检测(6.2)——小改动,先把安全网补上。
- 等周波闭环(6.1)——需要台架与频率源,排在纯软件项之后。
- 派生量层(5.3)——为 V0.2 与 PT 断线铺路。
- PT 断线(5.4)——依赖派生量。
阶段三:记录与文件(建议单独立项)
- 录波数据面(4.4 前半)——1 kHz 起步,跑通触发与落盘。
- 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(「故障录波(可选)」,⬜;2026-10-29 已按 1 kHz 落地代码面,4 kHz 与 COMTRADE 仍 ⬜) | 补"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),供规模感参考,不代表移植工作量。