# Conflicts: # docs/架构设计/软件架构与运行时规格.md
58 KiB
STM32F4-Base 参考产品复刻明细(CLS100)
文档定位:1:1 复刻口径下**「参考有什么 / 我们有什么 / 差额在哪 / 怎么算做完」**的 逐项明细权威——自
docs/产品需求/产品需求设计文档.mdv1.9 的「复刻基线」章与 原「复刻缺口明细」各节(v1.9 编号 2.5 与 9.49.13)拆出:本文 §1 = 复刻基线, 本文 §2§11 = 各专题逐项明细。 范围口径、缺口清单与排期(需求档 §3 / 需求档 §9.1~需求档 §9.3)仍在需求档;本档只放明细。 本档「需求档」=产品需求设计文档.md;「软件架构档」=../架构设计/软件架构与运行时规格.md;「硬件规格档」=../架构设计/硬件规格与能力边界.md。 判定纪律:所有参考能力数字一律从参考工程源码常量表实测 (Scatter_P_HV03.01_SV01.01),不做估计。
1. 复刻基线(参考源码能力清单)
判定口径:本节所有"参考能力"的数字,**一律从参考工程源 (实测已发现"89 个元件模块"实为 45 个、定值"约 260 项"实为 249 项两处偏差)。
1.1 复刻基线三要素
- 点表即契约:参考源码用常量表(
g_t*Tab[])定义点表、定值、事件、压板。 这些表就是"要复刻什么"的唯一清单——表有几行,目标就有几个点。 - 地址即接口:104 的 IOA 由
Rly_IEC104.h的基址宏划分段,段基址必须逐字对齐(需求档 §1.3)。 - 模块即元件:
RelayUnit/下一个.c对应一个保护元件,元件数 = 文件数(本文 §1.5)。
1.2 能力清单与复刻进度(源码实测)
| # | 能力 | 参考源码出处 | 参考数量 | 本产品现状 | 状态 |
|---|---|---|---|---|---|
| 1 | 定值项 | APP/EquipCfg/Const_Set.c g_tSetModelTab |
249 项 | 40 项(PS_ID_COUNT) |
🔶 |
| 2 | 定值单元 | APP/EquipCfg/Const_Set.h EN_SET_CELL_* |
23 个有项(枚举 28) | 5 组(短路/接地/过负荷/电压/频率) | 🔶 |
| 3 | 104 定值映射 | Comm/Pub/Const_CommSetPara.c g_tCommSetParaTab |
107 项,0x8820~0x8891 |
40 项(0x8820~0x8890 局部) |
🔶 |
| 4 | 遥测 YC | APP/EquipCfg/Const_Ana.c g_tYcIndexTab |
31 点 | 9 点(0x4011~0x4018 + 0x401D) |
🔶 |
| 5 | 遥测模型 | 同上 g_tAnaModelTab |
35 行 | 0 | ⬜ |
| 6 | 电度 YM | 同上 g_tYmIndexTab |
8 种 | 0 | ⬜ |
| 7 | 开入 KI | APP/EquipCfg/Const_IO.c g_tInputModelTab |
138 点 | 0(无硬件,X3) | ⬜ |
| 8 | 开出 KO | 同上 g_tOutputModelTab |
31 点 | 0(无硬件,X3) | ⬜ |
| 9 | 动作事件 | APP/EquipCfg/Const_Rec.c g_tActRecTab |
33 条(421~453) | 7 类记录(App/log/sys_log.h) |
🔶 |
| 10 | 录波测量通道 | 同上 g_tMeasureModelTab |
65 通道 | 8(本波口径,2026-10-29 代码面已交付;65 通道仍为 0,参考机口径未改) | 🔶 |
| 11 | 软压板 | APP/EquipCfg/Const_Soft.c g_tSoftTab |
9 面(表容量 32) | 1 面(PS_GLOBAL_EN) |
🔶 |
| 12 | 保护元件 | RelayUnit/*.c |
45 个模块 | 9 个实例 | 🔶 |
| 13 | 记录队列 | RecUnit/RecFile.c + GlobalDef/Const_Sys.h |
13 类(128/256 条) | 8 通道(7 文本 + SOE) | 🔶 |
| 14 | 自检类型 | GlobalUnit/SelfChk.c |
3 类型 + 2 闭锁 | 3 类 | ✅ |
| 15 | 故障录波 | APP/EquipCfg/Const_Wave.h |
3 类型 / 6 段 / RAM 16 个 | 0 | ⬜ |
| 16 | 采样节拍 | APP/EquipCfg/Const_VisEquip.h |
20 点/周波(50 Hz) | 20 点/周波(1000 Hz) | ✅ |
| 17 | 上行规约 | Comm/Pub/、Comm/Mon/ |
12 种 | 1 种(104) | 🔶 |
| 18 | 加密算法 | Comm/Ecc/ |
SM2 / SM3 / ECDSA | 0 | ⬜ |
| 19 | 双核分工 | CLS100_Arm/、CLS100_Dsp/ |
ARM + DSP | 单核(X1) | — |
| 20 | 远端屏与按键链路 | HMI/RemoeDisp/RemoDispBus.c、HMI/Dsp/Key.c、HMI/Dsp/Disp_Pub.c;屏板侧 DTU-LCD |
串口屏板通道(显存 3200 B + 状态灯 4 B 位掩码下行 / 键号上行)+ TCP 7003 镜像 | 7003 四命令已通;串口屏板通道整条缺失(协议已按屏板源码定版,见需求档 §5.16.2);INIT 应答 8 B(参考 29 B,其中 13 B 颜色信息不对齐)、无断点续传、无链路监视、缺 F1/F2 | 🔶 |
读法:🔶 / ⬜ 行全部是待办,逐条对应 需求档 §9.1;
—只出现在 X1~X4 不可移植项上。 本表是范围判定的唯一出处,需求档 §9 不再重复解释"为什么缺"。
1.3 104 地址空间(段基址逐字对齐)
| 段 | 基址 | 范围 | 容量 | 本产品使用 |
|---|---|---|---|---|
| 遥信 YX | 0x0001 |
0x0001~0x1000 |
4096 | 定义 1 |
| 保护 BH | 0x1001 |
0x1001~0x4000 |
12288 | 0 |
| 遥测 YC | 0x4001 |
0x4001~0x5000 |
4096 | 0x4011~0x4018、0x401D |
| 参数 PM | 0x5001 |
0x5001~0x6000 |
4096 | 0 |
| 遥控 YK | 0x6001 |
0x6001~0x6200 |
512 | 0x600A(信号复归)、0x600B(全局压板) |
| 设定 YS | 0x6201 |
0x6201~0x6400 |
512 | 0 |
| 电能 YM | 0x6401 |
0x6401~0x6600 |
512 | 0 |
| 步位置 STEP | 0x6601 |
0x6601~0x6700 |
256 | 0 |
⚠ 段基址是
0x4001/0x6001,不是0x4000/0x6000。参考源码Comm/Pub/Rly_IEC104.h的CONST_104_BASEADDR_YC/_YK明确 1 起编 (注释即写4001-5000H、6001-6200H)。本仓 v1.1 及更早文档按4000H+/6000H+描述 属笔误,以本表为准;需求档 §5.15、需求档 §6.8 已同步更正。
1.4 定值单元(23 个有项单元,合计 249 项)
| 单元 | 语义 | 项数 | 本产品 |
|---|---|---|---|
EN_SET_CELL_WatchDog |
看门狗功能 | 63 | ⬜ |
EN_SET_CELL_SYS3 |
系统参数 | 45 | 🔶 |
EN_SET_CELL_VolTimeRecv |
电压时间型自愈 | 17 | ⬜ |
EN_SET_CELL_AutoReCls |
重合闸 | 16 | ⬜ |
EN_SET_CELL_SYN |
同期元件(FTU 型) | 13 | ⬜ |
EN_SET_CELL_OverCurI0 |
接地告警 | 13 | 🔶 |
EN_SET_CELL_VolPro |
电压保护 | 13 | 🔶 |
EN_SET_CELL_WAVESTART |
录波启动 | 12 | ⬜ |
EN_SET_CELL_MeaLimit |
遥测越限 | 10 | ⬜ |
EN_SET_CELL_OverCurSpeed |
过流加速 | 8 | ⬜ |
EN_SET_CELL_SYS1 |
PT 参数 | 6 | 🔶 |
EN_SET_CELL_SYS2 |
CT 参数 | 4 | 🔶 |
EN_SET_CELL_Auto_FG |
自动分闸 | 4 | ⬜ |
EN_SET_CELL_Auto_HH |
自动合闸 | 4 | ⬜ |
EN_SET_CELL_InRush |
励磁涌流闭锁 | 3 | ⬜ |
EN_SET_CELL_OverCur |
短路告警 | 3 | 🔶 |
EN_SET_CELL_VolQuaRate |
电压合格率 | 3 | ⬜ |
EN_SET_CELL_FZDDL |
非遮断电流闭锁 | 3 | ⬜ |
EN_SET_CELL_BHKO |
保护出口展宽 | 2 | ⬜ |
EN_SET_CELL_MeaRecord |
遥测记录 | 2 | ⬜ |
EN_SET_CELL_PowerSet |
功率电压设置 | 2 | ⬜ |
EN_SET_CELL_PTBreak |
PT 断线告警 | 2 | ⬜ |
EN_SET_CELL_AutoCtrl |
自动控制(活化/复归) | 1 | ⬜ |
枚举中另有 4 个单元在参考源码表内无项(
EN_SET_CELL_YB_TY功能软压板、OnceCch一次重合闸、TwiceCch二次重合闸、OverLoad过负荷保护)——已被条件编译或注释掉, 因此 249 项分布在 23 个单元而非枚举的 28 个。另有 3 个单元(SYN/OverCurSpeed/VolTimeRecv)受CN_DEV_TYPE_FTU宏控制,属 FTU 型专属。104 定值地址编排:107 项占
0x8820~0x8891连续段中的 107 个地址,8 个空洞 (0x8822、0x8823、0x883E、0x883F、0x8842、0x8851、0x8852、0x8853) 对应参考源码中被注释掉的 4 条映射(ULTV_PARA_2、ULTV_Phase等)。
1.5 保护元件(45 个模块 → 覆盖 8 个模块 / 9 个实例)
按功能归类(RelayUnit/ 文件名去 PRS_ 前缀):
| 类别 | 元件模块 | 个数 | 本产品 |
|---|---|---|---|
| 过流类 | OverCurrent、OverCurrent_I0、OverCurrent_SpeedUp、OverCurrentI0_SpeedUp、FZDOverCur、OverCurWarn、OverCurWarn_I0、OverLoad |
8 | 🔶 过流 Ⅰ/Ⅱ/Ⅲ + 过负荷(4) |
| 电压类 | OverVol、OverVol_U0、LackVol、LineHaveVol、HaveVolCls、NoVolTrip、PTBreak、CTBreak |
8 | 🔶 过压 / 欠压 / 零序过压(3) |
| 频率类 | OverFr、LackFr |
2 | ✅ 过频 / 低频(2) |
| 重合闸 | AutoReCls、AutoReCls_JD、OnceCch、TwiceCch、ConnectBrkCls |
5 | ⬜ |
| 方向 / 功率 | DirCell、PowDirJudge、PowerSet、YcOverLimit |
4 | ⬜ |
| 涌流 / 故障 | InRushCur、FaultIsola、FaultRecov、BusEarthAlm、SgzAlarm |
5 | ⬜ |
| 自动控制 | AutoCtrlTrip、ManualTrip、MusterRecov、ExvRec、ExvRecGW |
5 | ⬜ |
| 记录类 | SOERecord、CORecord、FrzRecord、YcMeaRecord、YcMeaLimitRec、YcVolQuaRate |
6 | 🔶 SOE 落盘(1,非判据元件) |
| 录波 / 采样 | WaveQdCell、RlyCommSam |
2 | ⬜ |
判据结构对齐(以 PRS_OverCurrent.c 为样板,三段过流共用一个核):
M_GRly_OverRelay(&bRelay, fAmp, fSetStart, fSetRet) 越限 + 返回系数滞回
∧ bFyOpen ∧ bDirOpenX ∧ bNOVOpen 复压 / 方向 / 低压闭锁
GRly_TimeRelay(&bRelay, &tTimer, dwSetDelay, CN_T10MS) 定时限(10 ms 基准)
tTimer_KeepKI 电流保持(返回后仍延时保持)
tTimer_NoUI 无压无流判据(CN_T20MS / CN_T200MS)
本产品
prot_elm.c的"越限 + 返回系数滞回 + 定时限"三元核与上述结构同构; 差异在于本产品用每元件独立实例表替代参考的全局定时器数组——这是单核移植的必要调整, 不改变判据语义。逐元件复刻计划见docs/算法/继电保护功能复现规划.md。
1.6 上行规约全集(12 种 → 已复刻 1 种;加密算法另计)
| 方向 | 规约 | 参考源码 | 本产品 |
|---|---|---|---|
| 主站侧(对上) | IEC 60870-5-101 | Comm/Pub/Rly_IEC101.c、Rly_IEC101_B.c |
⬜ |
| IEC 60870-5-102(电度) | Comm/Pub/Rly_IEC102.c |
⬜ | |
| IEC 60870-5-103 | Comm/Pub/RLY_IEC103.c、RLY_IEC103-tcp.c、Rly_IEC103T.c |
⬜ | |
| IEC 60870-5-104 | Comm/Pub/Rly_IEC104.c |
✅ | |
| ModBus | Comm/Pub/Rly_ModBus.c |
⬜ | |
| CDT | Comm/Pub/Rly_Cdt.c |
⬜ | |
国标电度 Whm_GB |
Comm/Pub/Whm_GB.c |
⬜ | |
| IEC 61850(MMS / GOOSE / SV) | Comm/Pub/struct61850.h、GlobalUnit/SttnLvlGoose.c |
⬜ | |
| CAN | Comm/Pub/Rly_Can.h |
⬜ | |
| 子站侧(对下) | IEC 101(含 ABB / 西门子 / 无优先级变体) | Comm/Mon/Rtu_IEC101*.c |
⬜ |
| IEC 104(含调试 / RIS 变体) | Comm/Mon/Rtu_IEC104.c、Rtu_Dbg104.c、Rtu_RIS104.c |
⬜ | |
| BALA101 / ModBus | Comm/Mon/Rtu_BALA101*.c、Rtu_ModBus.c |
⬜ | |
| 加密 | SM2 / SM3 / ECDSA | Comm/Ecc/ |
⬜ |
排期判断:104 已对齐;对下 ModBus RTU 与 101 是"配网终端"的必要项(接一次开关 / FTU), 与 RS-485 簇同批解冻;61850 依赖以太网多播与 MMS 栈,单核 M4 资源上需单独评估,属最末批。
1.7 差异归因与结论
| 归因 | 涉及条目 | 解除方式 |
|---|---|---|
| 外部资源(标准源、端子变比) | 定值标定、保护判据解卡 | 两点标定(需求档 §9.2 第 4 步) |
| 硬件缺失(X3 / X4) | 开入 138、开出 31、电度 8、同期、三相通道 | V0.2 硬件 |
| 立项未排 | 多规约、SNTP、定值铺开 | 按需求档 §9.2 顺序。录波最小闭环已交付代码面(2026-10-29,卡片 docs/任务规划/故障录波.md、设计 docs/子系统设计/故障录波设计说明.md;1 kHz 起步与本文 80 点/周波口径的偏离在该设计文档 §2 显式登记);4 kHz 全速、多段、COMTRADE、104 文件传输仍未排,属二期范围 |
| 算力 / 形态(X1 / X2) | 双核分工、VxWorks | 不解除。屏板链路已从范围外项移入范围内(规格见需求档 §5.16,主机侧实现 docs/子系统设计/屏板链路设计说明.md;串口通道已实现,网络通道未做):主机侧链路与参考 1:1 同构,不属"替代方案" |
结论:本产品与参考产品的差距全部是"进度"而非"范围"——没有一项是"参考有而我们不做"。 已对齐的是软件骨架(采样节拍、相量算法、定值模型、104 上行、SOE 落盘、自检闭锁); 未对齐的是点表规模(249 / 31 / 138 / 31 / 33 / 65 vs 40 / 9 / 0 / 0 / 7 / 0) 与独立子系统(录波、电度、多规约)。因此需求档 §9 统一表述为"复刻进度",不再出现"不做"。
2. 定值复刻明细(参考 249 项 → 本产品 40 项)
参考定值表的每一行固定 21 个字段:标识 ×2 / 类型(数值 | 枚举)/ 所属单元 / 单位组 / 值类型 /
最小值 / 最大值 / 步长 / 两个标志 / 上下限原始值 ×3(0xAA / 0xAAAA / 0xFF)/ 104 地址 /
单位 ×2 / 小数位 / 长度 / 显示名 / 结束标记。
本产品对应物是 App/algo/prot_set.h 的 PS_* 枚举(PS_ID_COUNT = 40)。
40 项的去向必须能对上账,否则"还差多少"无从谈起:
| 去向 | 项数 |
|---|---|
| 覆盖参考定值项 | 35 |
| 本产品本地扩展项(参考无对应行) | 5(PS_RET_OVER / PS_RET_UNDER 返回系数,PS_RET_OF / PS_RET_UF 频率返回系数,PS_GLOBAL_EN 全局软压板) |
| 合计 | 40 |
因此定值差额 = 249 − 35 = 214 项。
2.1 23 个定值单元逐单元差额
| 单元 | 语义 | 参考项数 | 本产品覆盖 | 差额 |
|---|---|---|---|---|
WatchDog |
过流三段 / 零序三段 / 过负荷 / 重载 / 过载 / 过频 / 低频 | 63 | 22 | 41 |
SYS3 |
系统参数(零飘、死区、变比、防抖、脉宽、FA 模式…) | 45 | 0 | 45 |
VolTimeRecv |
电压时间型馈线自动化(失电分闸 / 得电合闸 / 联络) | 17 | 0 | 17 |
AutoReCls |
重合闸 | 16 | 0 | 16 |
SYN |
同期(FTU 型) | 13 | 0 | 13 |
OverCurI0 |
接地告警(小电流接地选线) | 13 | 0 | 13 |
VolPro |
电压保护(失压 / 过压 / 零序过压) | 13 | 9 | 4 |
WAVESTART |
录波启动 | 12 | 0 | 12 |
MeaLimit |
遥测越限 | 10 | 0 | 10 |
OverCurSpeed |
过流 / 零序后加速 | 8 | 0 | 8 |
SYS1 |
PT 参数 | 6 | 2 | 4 |
SYS2 |
CT 参数 | 4 | 2 | 2 |
Auto_FG |
延时自动分闸 | 4 | 0 | 4 |
Auto_HH |
延时自动合闸(电池活化) | 4 | 0 | 4 |
InRush |
励磁涌流闭锁 | 3 | 0 | 3 |
OverCur |
短路告警 | 3 | 0 | 3 |
VolQuaRate |
电压合格率 | 3 | 0 | 3 |
FZDDL |
非遮断电流闭锁 | 3 | 0 | 3 |
BHKO |
保护出口展宽 | 2 | 0 | 2 |
MeaRecord |
遥测记录周期 | 2 | 0 | 2 |
PowerSet |
功率电压组 | 2 | 0 | 2 |
PTBreak |
PT / 控回断线告警 | 2 | 0 | 2 |
AutoCtrl |
自动复归 | 1 | 0 | 1 |
| 合计 | 249 | 35 | 214 |
单元名
WatchDog有误导性:它装的是全部保护元件的动作定值(过流 / 零序 / 负荷 / 频率), 不是看门狗参数。移植时不要按名字去找"看门狗定值"。
2.2 已覆盖单元的逐项对照(35 项)
过流三段:参考 24 项,本产品 12 项(每段缺 4 项,共缺 12)
| 参考项(Ⅰ/Ⅱ/Ⅲ 段各一份) | 本产品 | 说明 |
|---|---|---|
| 过流 n 段投入 | PS_OCn_EN |
✅ |
| 过流 n 段跳闸投入 | PS_OCn_TRIP |
✅ 语义 = 0 告警 / 1 跳闸 |
| 过流 n 段定值 | PS_OCn_CUR |
✅ 二次值 A |
| 过流 n 段延时 | PS_OCn_DLY |
✅ ms(参考为 S,换算在整定入口) |
| 过流 n 段方向投入 | — | ❌ 无方向元件(DirCell / PowDirJudge 未复刻) |
| 过流 n 段低压投入 | — | ❌ 无复压闭锁(bNOVOpen 无来源) |
| 过流 n 段告警投入 | — | ❌ 参考把"告警投退"与"跳闸投退"拆成两项,本产品只有一项 |
| 过流 n 段低压定值 | — | ❌ 同上 |
这一处差额最容易被低估:本产品的三段过流是"简化版三段",参考的三段每段还带 方向 / 低压 / 告警 三个独立开关和一个低压定值。缺这四项时,三段过流只能做无方向、 无复压闭锁的纯过流保护——在环网或双电源线路上会误动。
零序过流三段:参考 18 项,本产品 0 项
参考在 WatchDog 内另有完整的零序三段(每段 6 项:投退 / 方向 / 告警投入 / 跳闸 / 定值 / 时限)。
本产品 PS_3U0_* 三项是零序过压(属 VolPro),不是零序过流——两者不可混为一谈:
零序过流看 3I0 幅值,零序过压看 3U0 幅值。因此零序过流保护目前完全没有定值载体,
OverCurrent_I0 元件也无从判据。
过负荷 / 重载 / 过载:参考 12 项,本产品 4 项
| 参考项组 | 本产品 | 差额 |
|---|---|---|
| 过负荷报警(投退 / 跳闸 / 定值 / 时限) | PS_OL_* 4 项 |
✅ 齐 |
| 重载报警(同上 4 项) | — | ❌ 缺 4 |
| 过载报警(同上 4 项) | — | ❌ 缺 4 |
参考把"过负荷 / 重载 / 过载"分成三级(默认 150 A / 70 A / 100 A 步长,时限 9000 s / 0 / 0), 对应事件 435 / 436 / 437。本产品只有一级过负荷。三级是同一判据不同门槛, 复刻成本低(元件框架已具备),但需先补
OverLoad的三个实例与三条事件映射。
过频 / 低频:参考 8 项,本产品 6 项 + 2 本地项
| 参考项 | 本产品 | 说明 |
|---|---|---|
| 过频 / 低频 保护投退 | PS_OF_EN / PS_UF_EN |
✅ |
| 过频 / 低频 保护定值 | PS_OF_HZ / PS_UF_HZ |
✅ 参考单位 HZ 存 5000~5500(0.01 Hz),本产品存 Hz 浮点 |
| 过频 / 低频 保护时限 | PS_OF_DLY / PS_UF_DLY |
✅ |
| 过频 / 低频 跳闸投退 | — | ❌ 缺 2:参考区分"保护投入"与"跳闸投入",本产品只有前者 |
电压保护:参考 13 项,本产品 9 项
| 参考项 | 本产品 | 说明 |
|---|---|---|
| 失压保护投退 / 定值 / 时限 | PS_UV_EN / PS_UV_VOL / PS_UV_DLY |
✅ |
| 过压保护投退 / 定值 / 时限 | PS_OV_EN / PS_OV_VOL / PS_OV_DLY |
✅ |
| 零序过压投退 / 定值 / 时限 | PS_3U0_EN / PS_3U0_VOL / PS_3U0_DLY |
✅ |
| 失压 / 过压 / 零压 跳闸投退(3 项) | — | ❌ 缺 3 |
| 零压 告警投退(1 项) | — | ❌ 缺 1 |
PT / CT 参数:参考 10 项,本产品 4 项
| 参考项 | 本产品 | 说明 |
|---|---|---|
| 母线一次额定(kV) | PS_PT_PRI |
✅ 本产品存 V |
| 母线二次额定(线)(V) | PS_PT_SEC |
✅ |
| 额定 TA 一次值(A) | PS_CT_PRI |
✅ |
| 额定 TA 二次值(A) | PS_CT_SEC |
✅ |
| 母线二次额定(相)(V) | — | ❌ 缺:线 / 相两种二次额定的换算关系需显式给出 |
| 零序一次额定(kV) | — | ❌ 缺 |
| 零序二次额定(V) | — | ❌ 缺 |
| 零序一次额定(A) | — | ❌ 缺 |
| 零序二次额定(A) | — | ❌ 缺 |
| PT 接入数目(1~3) | — | ❌ 缺:决定用线电压还是相电压作判据源 |
2.3 完全未覆盖单元逐项清单(163 项)
214 项差额中,51 项落在 需求档 §2.2 已部分覆盖的四个单元里(过流 12 / 零序 18 / 重载与过载 8 / 频率 2 / 电压 4 / PT·CT 6 / 备用控制字 1),余下 163 项落在下面这些一项都没有的单元里。 逐项列出以便排期时按"整单元"认领,不要拆散。
系统参数 SYS3(45 项)——零飘门槛 10 项:额定电压零飘门槛、额定电流零飘门槛、直流电压零飘、
功率零飘、频率零飘、功率因数零飘、相角零飘门槛、备用 ×4;死区 7 项:电流死区、电压死区、
直流电压死区、功率死区、频率死区、功率因数死区、相角死区;开入开出 4 项:开入防抖(1060000 ms)、
分闸脉宽、合闸脉宽、开入手动分合;变比 5 项:PT 变比、相 CT 变比、零序 CT 变比、功率变比、电量变比;
其余 19 项:开关类型、故障遥信保持时间、功率置负、单项接地选线投入、单相接地跳闸时间、FA 模式、
对时切换长延时、断线告警确认时间、事故总判小电流接地告警、加速段保护开放时间、
重合闸检有压等待时间、连续分闸时间、分闸次数、备用参数 0108。
本产品的死区落在运行参数段(
0x8030~0x8038九点,RAM 副本 + 104 可写), 变比落在prot_set的 PT/CT 四项。语义已覆盖、载体不同——复刻SYS3时是把这 两类合并进定值表,不是重新实现。
电压时间型自愈 VolTimeRecv(17 项):就地 FA 模式、LS(0/1,1 = 联络)、
失电分闸投退、失电分闸时限(0100000 s)、得电合闸投退、X 时间(1100 s,默认 7)、
故障电流检测、故障电流定值(110000 A)、Y 时间(1100 s,默认 5)、联络开关合闸、
联络充电时限(01800 s)、联络合闸时限(0300 s)、正方向选择、残压定值(0300 V)、
残压判定时限、停电时间(110 s)、人工闭锁。
这是馈线自动化(FA)的核心:失电分闸 → 得电合闸 → 联络转供。对应元件
NoVolTrip/HaveVolCls/ConnectBrkCls/FaultIsola/FaultRecov五个模块。 无开入(开关位置)与出口(分合闸)时无法闭环,属 X3 依赖项。
重合闸 AutoReCls(16 项):重合闸投退、充电时间(0100000 s)、重合闸次数(03)、
一次 / 二次 / 三次重合闸时间(060000 s)、重合闸闭锁时间(09900 s)、整组复归时间、
大电流闭锁投退、大电流闭锁定值、重合闸检同期、重合闸检无压、同期检无压定值(015000 V)、
同期检角差定值(130°)、过流禁止重合闸、零序禁止重合闸。
参考支持三次重合且每次时间独立可整定,充电时间与整组复归时间分离——这三项 是"重合闸能不能用"的关键(无充电时间 = 每次跳闸都立即重合,会连击)。 依赖出口(合闸)与开入(开关位置),属 X3 依赖项。
同期 SYN(13 项,FTU 型专属):检无压投退、检同期投退、频差 / 角差 / 压差 / 滑差闭锁投退
(4 项)、检无压定值(10009999 V)、检频差定值(0200,0.01 Hz)、检角差定值(1180°)、
检压差定值(09999 V)、检频率滑差值(0200 Hz/s)、开关合闸时限(0200 s)、整组复归时间。
需两路电压同刻(母线侧 + 线路侧)才能算角差与频差——本产品 V0.1 只有一个转换器的 电压通道,属 X3 / H1 依赖项。
录波启动 WAVESTART(12 项):电流启动投退 / 定值(010000 A)、低压启动投退 / 定值
(010000 V)、零压启动投退 / 定值(030000 V)、零流启动投退 / 定值(01000 A)、
零流突变投退 / 定值(0~1000 A)、录波启动延时、保护启动录波。
录波启动是独立于保护判据的触发源:即使保护不动作,只要越启动值也要录波。 本产品无录波子系统,这 12 项无处落地(见 需求档 §7)。
遥测越限 MeaLimit(10 项):有压鉴别投退 / 线路有压定值(0300 V)、无压鉴别投退 /
线路无压定值(0300 V)、线路有压时限(2100000 s)、电压越上限 / 越下限(0100000 V)、
电流越上限(0~10000 A)、越上限延时 / 越下限延时。
越限记录(
OVER队列,128 条)的判据来源。本产品无越限记录类,故这 10 项也无载体。
过流后加速 OverCurSpeed(8 项):后加速投退、线路 1 前加速投退、过流后加速电流值
(110000 A)、过流后加速时限(010000 s)、零序后加速投退、线路 1 前加速投退(重复项,
参考源码如此)、零序后加速电流值(1~1000 A)、零序后加速时限。
接地告警 OverCurI0(13 项):线路接地告警投退、零序电流反极性、零序电压反极性、
接地备用 02、接地告警投退、接地跳闸投退、接地方向投退、接地定值(010000 A)、接地时限、
接地跳闸时限(0600 s)、零压启动定值(1~10000 V)、接地重合投退、接地后加速投退。
反极性两项是现场接线纠错开关(CT / PT 装反时不必改线,改定值即可), 属"现场可维护性"需求,不是可选项。
其余小单元(合计 29 项):励磁涌流闭锁 3(闭锁投退、涌流制动系数 1100、闭锁复归时间);
短路告警 3(投退 / 时限 / 线路 01 短路电流定值);电压合格率 3(上限 / 下限定值 0200 %、周期类型 04);
非遮断电流闭锁 3(电流闭锁投退、停电跳闸投退、非遮断电流值 110000 A);
出口展宽 2(跳闸出口时间、合闸出口时间,1100000 ms);
遥测记录 2(遥测记录周期 02880、极值记录周期 0360);
功率电压组 2(14 组);PT 断线 2(断线告警、控回断线告警);自动复归 1(自动复归投退);
延时自动分闸 4(延时复归投退、2:时 1:分 0:秒、延时复归时限 ×2);
延时自动合闸 4(自动活化投退、2:分 1:时 0:日、自动活化周期 0360、自动活化时限 023000 s)。
3. 遥测复刻明细(参考 31 点 → 本产品 9 点)
参考 g_tYcIndexTab 的 31 点是按"两回线 × 三相 + 线电压 + 零序 + 功率"组织的完整电气量集。
本产品 9 点(0x4011~0x4018、0x401D)只覆盖第一回线的相量与频率。
| # | 参考遥测 | 参考枚举 | 本产品 | 差额原因 |
|---|---|---|---|---|
| 1 | 1 回 A 相电流 | EN_YCMEA_IA01 |
0x4015 ✅ |
|
| 2 | 1 回 B 相电流 | EN_YCMEA_IB01 |
0x4016 ✅ |
削顶 → 恒 IV |
| 3 | 1 回 C 相电流 | EN_YCMEA_IC01 |
0x4017 ✅ |
削顶 → 恒 IV |
| 4 | 2 回 A 相电流 | EN_YCMEA_IA02 |
— | ❌ 无第二回线 |
| 5 | 2 回 B 相电流 | EN_YCMEA_IB02 |
— | ❌ |
| 6 | 2 回 C 相电流 | EN_YCMEA_IC02 |
— | ❌ |
| 7 | 1 回 A 相电压 | EN_YCMEA_UA1 |
0x4011 ✅ |
|
| 8 | 1 回 B 相电压 | EN_YCMEA_UB1 |
0x4012 ✅ |
削顶 → 恒 IV |
| 9 | 1 回 C 相电压 | EN_YCMEA_UC1 |
0x4013 ✅ |
削顶 → 恒 IV |
| 10 | 2 回 A 相电压 | EN_YCMEA_UA2 |
— | ❌ |
| 11 | 2 回 B 相电压 | EN_YCMEA_UB2 |
— | ❌ |
| 12 | 2 回 C 相电压 | EN_YCMEA_UC2 |
— | ❌ |
| 13 | 1 回 AB 线电压 | EN_YCMEA_UAB1 |
— | ❌ 需两相相量之差 |
| 14 | 1 回 BC 线电压 | EN_YCMEA_UBC1 |
— | ❌ |
| 15 | 1 回 CA 线电压 | EN_YCMEA_UCA1 |
— | ❌ |
| 16 | 2 回 AB 线电压 | EN_YCMEA_UAB2 |
— | ❌ |
| 17 | 2 回 BC 线电压 | EN_YCMEA_UBC2 |
— | ❌ |
| 18 | 2 回 CA 线电压 | EN_YCMEA_UCA2 |
— | ❌ |
| 19 | 1 回零序电流 | EN_YCMEA_3I01 |
0x4018 ✅ |
近似对齐(本产品为外部零序通道) |
| 20 | 1 回零序电压 | EN_YCMEA_3U01 |
0x4014 ✅ |
近似对齐 |
| 21 | 2 回零序电压 | EN_YCMEA_3U02 |
— | ❌ |
| 22 | 频率 | EN_YCMEA_FR1 |
0x401D ✅ |
|
| 23 | 直流 1 | EN_YCMEA_DC_01 |
— | ❌ 无直流采样通道 |
| 24 | 直流 2 | EN_YCMEA_DC_02 |
— | ❌ |
| 25 | A 相有功 | EN_YCMEA_PA_1 |
— | ❌ 需跨转换器同刻(H1) |
| 26 | B 相有功 | EN_YCMEA_PB_1 |
— | ❌ |
| 27 | C 相有功 | EN_YCMEA_PC_1 |
— | ❌ |
| 28 | 总有功 | EN_YCMEA_P_1 |
— | ❌ |
| 29 | 总无功 | EN_YCMEA_Q_1 |
— | ❌ |
| 30 | 总视在 | EN_YCMEA_S_1 |
— | ❌ |
| 31 | 功率因数 | EN_YCMEA_COS_1 |
— | ❌ |
缺的 22 点按依赖分三批:
| 批次 | 点数 | 内容 | 依赖 |
|---|---|---|---|
| 线电压与功率 | 13 | 6 线电压 + 7 功率/功率因数 | H1:电压在 TPAFE、电流在 STM32 ADC1,无共同触发,功率的 U×I 需同刻 |
| 第二回线 | 7 | 2 回 6 相量 + 3U02 |
采样通道数(V0.2 硬件) |
| 直流 | 2 | DC_01 / DC_02 |
无直流采样通道 |
线电压本身不一定要等 H1:
Uab = Ua − Ub只需同一转换器内的两相相量, 若两相都落在 TPAFE 侧即可算。当前Ub/Uc削顶(在 STM32 侧),所以连带算不出。 先解决"三相电压全落 TPAFE"这一件事,能一次解锁 6 个线电压点。
遥测模型 g_tAnaModelTab(35 行):参考为每个遥测点定义死区、变比、系数、越限档等属性行,
是"点表 + 整定"的合体。本产品的对应物拆成了三处:iec104_pts.c 的 YC 表(地址 + 死区系数)、
run_par.c 的死区九点、adc_cal.c 的 k/b。复刻模型表 = 把这三处收敛成一张可整定的表。
电度 g_tYmIndexTab(8 种,本产品 0):正向有功 Pt1、正向无功 Qt1、Q1 象限、Q4 象限、
反向有功 Pt0、反向无功 Qt0、Q2 象限、Q3 象限。地址段 0x6401~0x6600。
电度 = 功率对时间积分,与功率同批解锁(同一 H1 依赖)。
4. 开入 / 开出复刻明细(138 + 31 → 本产品 0)
参考把"开入"分成四类,本产品一个都没有(无硬件,不可移植项 X3)。
开入 138 点的构成:
| 类别 | 点数 | 含义 |
|---|---|---|
软遥信 EN_KI_SOFTYX_* |
104 | 由保护元件/逻辑产生的内部状态,不占物理端子(如"过流Ⅰ段动作""重合闸充电完成""FA 投入") |
硬件开入 EN_KI_* / EN_KIA_* |
27 | 物理端子:开关合位 / 分位 / 未储能 / 就地远方 / 接地位置 / 隔离位置 / 停用重合闸 / 保护投入 / 检修压板 / 远方信号 / 就地 FTU 手合手分 / 电源输入 / 活化状态 / 电池欠压 / 活化投入 |
双点遥信 EN_KI_TWIN_YX_* |
6 | 开关位置用双点表达(00 中间态 / 01 分 / 10 合 / 11 无效) |
多态遥信 EN_KI_INT8U_* |
1 | 8 位状态量(如"设备状态"枚举) |
104 点 ≠ 104 个端子。真正要接线的是 27 个硬件开入;104 个软遥信是元件输出, 只要元件复刻出来就自然存在。这个区分决定了工作量估算:不是"买 138 路开入板", 而是"27 路端子 + 104 个元件状态映射"。
开出 31 点的构成:
| 类别 | 点数 | 明细 |
|---|---|---|
| 出口类 | 11 | 保跳 1(BH_TZ1)、保合 1(BH_HZ1)、遥分 1(YT01)、遥合 1(YH01)、遥分 2(YT02)、遥合 2(YH02)、电池活化(DCHH)、活化退出(DCHH_Esc)、信号复归(FG)、开入变位(KICHANGE)、录波启动(WAVE_START) |
| 信号类 | 20 | 事故信号 SignTV、运行 SignRun、通信中断 SignCOMM、硬件故障 SignHW、储能 SignCN、电池欠压 SignBatQY、失电 SignSD、过负荷 SignGL、接地 SignJD、闭锁 SignBM、备用 SignBS、自检 SignCHK、重合 SignCH、备用 3 个 SignBAK1~3、告警 SignALM、保护动作 SignPro、就地 FA SignJDFA、集中 FA SignJZFA |
本产品当前保护动作只体现为遥信 + SOE,没有任何物理出口。这在"保护测控装置"的 定义里是硬缺口:保护判据做得再准,不跳闸就等于没保护。X3 解除前,
YX里的 动作类遥信必须如实标 IV,不能让主站误以为已跳闸。
5. 动作事件复刻明细(参考 33 条 → 本产品 9 条)
参考 g_tActRecTab 的 33 条动作事件编号 421~453,是"保护动作 → 事件码 → 记录 → 上送"的
中间层。本产品用 App/log/sys_log.h 的七类记录 + SOE,没有事件码表。
| 事件码 | 参考事件 | 本产品 | 说明 |
|---|---|---|---|
| 421 | 线路励磁涌流闭锁 | ❌ | InRushCur 未复刻 |
| 422 | 线路Ⅰ段过流保护动作 | ✅ | PS_OC1_* |
| 423 | 线路Ⅱ段过流保护动作 | ✅ | PS_OC2_* |
| 424 | 线路Ⅲ段过流保护动作 | ✅ | PS_OC3_* |
| 425 | 线路零序Ⅰ段过流保护动作 | ❌ | 无零序过流定值载体 |
| 426 | 线路零序Ⅱ段过流保护动作 | ❌ | 同上 |
| 427 | 线路零序Ⅲ段过流保护动作 | ❌ | 同上 |
| 428 | 线路后加速保护动作(过流) | ❌ | OverCurrent_SpeedUp 未复刻 |
| 429 | 线路后加速保护动作(零序) | ❌ | OverCurrentI0_SpeedUp 未复刻 |
| 430 | 零序过压保护动作 | ✅ | PS_3U0_* |
| 431 | 线路欠压保护动作 | ✅ | PS_UV_* |
| 432 | 线路过压保护动作 | ✅ | PS_OV_* |
| 433 | 高频保护动作(过频) | ✅ | PS_OF_* |
| 434 | 低频保护动作 | ✅ | PS_UF_* |
| 435 | 线路过负荷保护动作 | ✅ | PS_OL_* |
| 436 | 线路重载保护动作 | ❌ | 三级负荷只做了一级 |
| 437 | 线路过载保护动作 | ❌ | 同上 |
| 438 | 线路接地保护动作 | ❌ | OverCurI0 未复刻 |
| 439 | 一次重合动作 | ❌ | 重合闸未复刻 |
| 440 | 二次重合动作 | ❌ | 同上 |
| 441 | 三次重合动作 | ❌ | 同上 |
| 442 | 接地重合动作 | ❌ | 同上 |
| 443 | 接地后加速动作 | ❌ | 同上 |
| 444 | 失电分闸动作 | ❌ | NoVolTrip 未复刻 |
| 445 | 得电合闸动作 | ❌ | HaveVolCls 未复刻 |
| 446 | 闭锁合闸动作 | ❌ | 需开入(闭锁压板) |
| 447 | 闭锁分闸动作 | ❌ | 同上 |
| 448 | 联络开关合闸动作 | ❌ | ConnectBrkCls 未复刻 |
| 449 | 联络开关分闸动作 | ❌ | 同上 |
| 450 | 保护动作备用 02 | — | 参考即备用 |
| 451 | A 相故障 | ❌ | 需分相判别(三相全接) |
| 452 | B 相故障 | ❌ | 同上 |
| 453 | C 相故障 | ❌ | 同上 |
本产品覆盖 9 / 33 条。注意 428 与 429 在参考源码里同名(都叫"线路后加速保护动作"), 靠事件码区分过流与零序——移植时不能按名字去重。
事件码缺失的连带后果:事故报告(
CN_NUM_QUE_REC_RPT队列)无法生成。 参考的事故报告是按事件码索引动作时序的,没有事件码表就没有"保护动作报告"这一页。
6. 保护元件复刻明细(参考 45 个模块 → 本产品 8 个)
模块级口径:参考 RelayUnit/ 45 个 .c 文件 = 45 个元件模块。本产品覆盖 8 个模块
(7 个判据模块 + 1 个记录模块),以 9 个实例落地(OverCurrent 一个模块出三段实例)。
| 类别 | 参考模块 | 本产品 | 缺 |
|---|---|---|---|
| 过流类 | 8 | 2(OverCurrent、OverLoad) |
6 |
| 电压类 | 8 | 3(OverVol、OverVol_U0、LackVol) |
5 |
| 频率类 | 2 | 2(OverFr、LackFr) |
0 |
| 重合闸 | 5 | 0 | 5 |
| 方向 / 功率 | 4 | 0 | 4 |
| 涌流 / 故障 | 5 | 0 | 5 |
| 自动控制 | 5 | 0 | 5 |
| 记录类 | 6 | 1(SOERecord) |
5 |
| 录波 / 采样 | 2 | 0 | 2 |
| 合计 | 45 | 8 | 37 |
缺的 37 个模块,逐个给出"缺它意味着什么":
| 模块 | 类别 | 判据要点 | 缺它的后果 | 依赖 |
|---|---|---|---|---|
OverCurrent_I0 |
过流 | 零序电流三段 + 方向 | 接地故障无保护 | 定值载体(零序 18 项) |
OverCurrent_SpeedUp |
过流 | 后加速:重合后短延时无选择跳闸 | 重合于故障时靠 Ⅰ 段延时切除,慢一拍 | 重合闸 |
OverCurrentI0_SpeedUp |
过流 | 零序后加速 | 同上(接地) | 重合闸 |
FZDOverCur |
过流 | 非遮断电流闭锁(负荷电流以下不允许跳闸) | 小电流跳闸可能拉弧不熄 | 定值 3 项 |
OverCurWarn |
过流 | 过流告警(只告警不跳闸) | 过流只能跳不能告警 | 定值(告警投入) |
OverCurWarn_I0 |
过流 | 零序过流告警 | 同上 | 定值 |
LineHaveVol |
电压 | 线路有压鉴别 | 无法区分"有压合闸"与"无压合闸" | 定值(MeaLimit 有压鉴别) |
HaveVolCls |
电压 | 得电合闸 | FA 的"来电自动合闸"缺失 | 开入 + 出口 |
NoVolTrip |
电压 | 失电分闸 | FA 的"失电自动分闸"缺失 | 开入 + 出口 |
PTBreak |
电压 | PT 断线(电压消失但电流正常) | 断线时电压类保护可能误动/拒动 | 定值 2 项 |
CTBreak |
电压 | CT 断线 | 同上(电流侧) | 定值 |
AutoReCls |
重合闸 | 充电 → 跳闸 → 延时重合 → 整组复归 | 瞬时故障必须人工合闸 | 开入 + 出口 + 16 项定值 |
AutoReCls_JD |
重合闸 | 接地故障重合 | 同上(接地) | 同上 |
OnceCch |
重合闸 | 一次重合(表内无定值,条件编译) | — | 同上 |
TwiceCch |
重合闸 | 二次重合(表内无定值,条件编译) | — | 同上 |
ConnectBrkCls |
重合闸 | 联络开关合闸(转供) | 环网无法转供 | 开入 + 出口 + 17 项定值 |
DirCell |
方向 / 功率 | 方向元件(功率方向判别) | 双电源/环网会反送电误动 | 三相电压 + 三相电流同刻(H1) |
PowDirJudge |
方向 / 功率 | 功率方向(有功/无功象限) | 同上 | 同上 |
PowerSet |
方向 / 功率 | 功率电压组切换(1~4 组) | 多组 PT/CT 变比无法切换 | 定值 2 项 |
YcOverLimit |
方向 / 功率 | 遥测越限判据 | 越限记录无来源 | 定值(MeaLimit 10 项) |
InRushCur |
涌流 / 故障 | 二次谐波制动(励磁涌流闭锁) | 变压器空投时过流误动 | 谐波算法(见需求档 §9.1.2「遥测增强」) |
FaultIsola |
涌流 / 故障 | 故障隔离 | FA 无法定位故障区段 | 开入 + 出口 |
FaultRecov |
涌流 / 故障 | 故障恢复供电 | 同上 | 同上 |
BusEarthAlm |
涌流 / 故障 | 母线接地告警 | 母线接地无告警 | 零序电压 |
SgzAlarm |
涌流 / 故障 | 事故总告警 | 事故总信号缺失 | 事件码表 |
AutoCtrlTrip |
自动控制 | 自动控制跳闸(电池活化等) | 活化流程无法跳闸 | 出口 |
ManualTrip |
自动控制 | 手动跳闸 | 就地手动分闸缺失 | 开入 + 出口 |
MusterRecov |
自动控制 | 总复归(复归所有保持态) | 动作态只能靠重启清 | 无(可先做) |
ExvRec |
自动控制 | 事故记录 | 事故报告缺失 | 事件码表 |
ExvRecGW |
自动控制 | 事故记录(网关侧) | 同上 | 同上 |
CORecord |
记录 | COS 变位记录 | 开入变位无记录 | 开入 |
FrzRecord |
记录 | 冻结记录(整点冻结电量) | 电度无冻结 | 电度 |
YcMeaRecord |
记录 | 遥测定时记录 | 无遥测历史 | 定值 2 项 |
YcMeaLimitRec |
记录 | 遥测越限记录 | 无越限记录 | 越限判据 |
YcVolQuaRate |
记录 | 电压合格率统计 | 无合格率 | 定值 3 项 |
WaveQdCell |
录波 / 采样 | 录波启动判据 | 录波无触发源 | 录波子系统 |
RlyCommSam |
录波 / 采样 | 保护通信采样(跨装置采样同步) | 多装置差动类保护不可能 | 通信 + 对时 |
唯一"现在就能做"的是
MusterRecov(总复归):它不依赖任何硬件,只把各元件的 保持态与出口标志清一遍。本产品已有prot_elm_request_reset单字请求标志(软件架构档 §5), 接上即可。其余 36 个模块都至少依赖定值载体、开入、出口、事件码四者之一。
7. 故障录波子系统规格(本产品 0)
录波是唯一一个"完全独立的子系统"级缺口:它不在保护链路上,但有独立的采样率、 独立的存储格式、独立的文件传输通道。参考实现的硬指标如下,可直接作为复刻验收判据。
| 指标 | 参考值(APP/EquipCfg/Const_Wave.h) |
说明 |
|---|---|---|
| 录波采样率 | CN_SAM_RATE × CN_WAVE_RATIO = 20 × 4 = 80 点/周波(50 Hz 下 4000 Hz) |
保护计算用 20 点/周波,录波要 4 倍过采样才能看清波形。偏离登记:本装置先按 1 kHz(20 点/周波)立项,理由与二期不返工的结构约束见 docs/子系统设计/故障录波设计说明.md §2 与 §2.1 |
| 录波段数 | CN_WAVE_SECT_NUM = 6 段 |
每段独立缓冲,支持连续多次录波 |
| 启动前缓冲 | CN_WAVE_CYCLE_SUM_REFRE_BUF = 5 周波(100 ms) |
循环刷新,保证故障前有数据 |
| 动作后 | CN_WAVE_CYCLE_SUM_ACTED = 10 周波(200 ms) |
|
| 返回段 | CN_WAVE_CYCLE_SUM_RET = 2 周波 |
返回过程也要录 |
| 手动录波 | CN_WAVE_CYCLE_SUM_HAND = 6 周波 |
|
| 单次最长 | CN_WAVE_MAX_TIME = 9000 ms |
超长故障(如持续性接地)按此截断 |
| RAM 录波个数 | CN_WAVE_RAM_NUM = 16 |
RAM 里最多同时存 16 份,满了转存文件 |
| COMTRADE 保存数 | 动作 64 / 启动 64 / 手动 16 | 三类独立配额,满了循环覆盖 |
| 单份最大开关变位 | CN_WAVE_MAX_RECSWI = 64 |
|
| 布尔量通道 | CN_WAVE_NUM_BOOLFLG = 320 |
全局布尔变量按位录波 |
| 模拟量通道 | 原始 + 计算 = CN_WAVE_ALL_ANA_NUM |
本产品对应 65 通道(g_tMeasureModelTab) |
| 录波类型 | 动作 TYPE_ACT=1 / 启动 TYPE_START=2 / 手动 TYPE_HAND=3 |
|
| 文件格式 | COMTRADE(.cfg + .dat) |
主站侧通用格式,非私有 |
| 上送方式 | 104 文件传输(F_FR_NA_1 目录 / F_SR_NA_1 读文件) |
本产品 104 未实现文件传输 |
复刻所需的四件东西(缺一不可):
- 4 倍过采样缓冲:当前
adcTask以 1000 Hz 出样本,录波要 4000 Hz。要么提高采样率 再抽取给保护(改变整条链节拍),要么在 TPAFE 侧单独开一条 4 倍速通路(改驱动)。 - 环形缓冲 + 触发点定位:5 周波前缓冲 + 10 周波后缓冲,触发时刻要能反算出缓冲内偏移。
- COMTRADE 编码器:
.cfg(通道定义、采样率、时标)+.dat(二进制采样值)+.hdr。 - 文件存储与配额管理:SPI NAND 上按 64/64/16 配额循环覆盖,需与现有 FatFs + dhara 层对接。
排期判断:录波不是"加个功能",是新增一条 4 倍速采样通路 + 一套文件格式 + 一个配额管理器。 它排在定值/元件铺开之后,因为录波通道表(65 路)本身依赖元件输出。
8. 记录体系复刻明细(参考 13 类 → 本产品 8 类)
参考用 13 个定长队列分类存记录,容量按类分配(GlobalDef/Const_Sys.h):
| 参考队列 | 容量 | 语义 | 本产品 |
|---|---|---|---|
REC_ACT |
128 | 动作记录(保护动作) | ✅ 事故记录 /log/accid.log |
REC_ALM |
128 | 告警记录 | ✅ 保护告警 /log/alarm.log |
REC_OVER |
128 | 越限记录 | ❌ |
REC_START |
128 | 启动记录(元件启动但未动作) | ✅ 保护启动 /log/start.log |
REC_LOCK |
128 | 闭锁记录(保护被闭锁) | ❌ |
REC_SOE |
256 | SOE(带时标的开入变位) | ✅ soe_store(SPSC 深度 8 → 落盘) |
REC_COS |
256 | COS(无时标的状态变位) | ❌ |
REC_CHK |
128 | 自检记录 | ✅ /log/selftest.log |
REC_RUN |
128 | 运行记录(上电/重启) | ✅ /log/run.log |
REC_OPT |
128 | 操作记录(复归/对时/定值保存) | ✅ /log/oper.log |
REC_YK |
128 | 遥控记录 | ✅ /log/yk.log |
REC_SC |
128 | 顺控记录 | ❌ |
REC_SCSTEPINFO |
128 | 顺控执行明细 | ❌ |
缺的 5 类及其依赖:
| 缺的队列 | 依赖 | 能否先做 |
|---|---|---|
| 越限记录 | 越限判据(MeaLimit 10 项定值 + YcOverLimit 元件) |
可先做判据、后做记录 |
| 闭锁记录 | 闭锁源已具备(四源闭锁,需求档 §5.12),只缺记录落点 | ✅ 最该先补——现在闭锁发生了但无记录,现场排障靠猜 |
| COS 记录 | 开入(X3) | ❌ |
| 顺控记录 / 顺控执行明细 | 顺控功能(参考 YKRly.c 63 KB 的顺控执行引擎) |
❌ 整功能未立项 |
闭锁记录是本表里性价比最高的一项:闭锁源(未标定 / 采样故障 / 定值校验和 / 软压板退出) 已经全部实现,但闭锁的发生与解除都没有留痕。加一个
REC_LOCK等价队列, 只需在protect_task的闭锁判定处加一条写入,不依赖任何硬件。
格式差异:参考是二进制定长记录 + 独立队列 + 循环覆盖;本产品是文本行(64 B 定长)+ 文件。 文本行的优点是 FTP 直接可读、现场排障友好;缺点是容量利用率低、无结构化解码。 复刻时建议保留文本格式(本产品优势),只补队列分类与配额。
9. 规约栈复刻明细(参考 12 种 → 本产品 1 种)
| 规约 | 参考源码 | 链路 | 用途 | 工作量特征 |
|---|---|---|---|---|
| IEC 60870-5-104 | Comm/Pub/Rly_IEC104.c |
TCP | 主站接入(本产品已实现) | ✅ 已完成 |
| IEC 60870-5-101 | Rly_IEC101.c、Rly_IEC101_B.c |
串口 | 主站接入(老站) | 与 104 共享 ASDU 层,只换链路层(平衡/非平衡链路、可变帧长) |
| IEC 60870-5-102 | Rly_IEC102.c |
串口 | 电度采集 | 独立 ASDU(电度专用类型),依赖电度 |
| IEC 60870-5-103 | RLY_IEC103.c、RLY_IEC103-tcp.c、Rly_IEC103T.c |
串口 / TCP | 保护装置信息接口 | 三种变体(串口 / TCP / T 型),ASDU 与 101/104 不同族 |
| ModBus | Rly_ModBus.c |
串口 / TCP | 通用工业设备 | 简单,对下采集首选 |
| CDT | Rly_Cdt.c |
串口 | 循环式远动(老国标) | 帧结构简单,无确认机制 |
Whm_GB |
Whm_GB.c |
串口 | 国标电度 | 依赖电度 |
| IEC 61850 | struct61850.h、GlobalUnit/SttnLvlGoose.c |
以太网多播 | MMS / GOOSE / SV | 最大工作量:需 MMS 栈 + ASN.1 + 多播组管理 |
| CAN | Rly_Can.h |
CAN 总线 | 内部总线 | 依赖 CAN 硬件 |
| 子站 IEC 101 | Comm/Mon/Rtu_IEC101*.c(含 ABB / 西门子 / 无优先级变体) |
串口 | 对下接 FTU / 开关 | 对下主站侧,与对上从站侧是不同角色 |
| 子站 IEC 104 | Rtu_IEC104.c、Rtu_Dbg104.c、Rtu_RIS104.c |
TCP | 对下 | 含调试与 RIS 变体 |
| BALA101 / ModBus | Rtu_BALA101*.c、Rtu_ModBus.c |
串口 | 对下 | 与 RS-485 簇同批 |
| 加密 | Comm/Ecc/(SM2 / SM3 / ECDSA) |
— | 安全加固 | 国密算法库,纯软件可移植 |
排期分层:
| 层 | 规约 | 理由 |
|---|---|---|
| 先做 | ModBus(对上 + 对下)、IEC 101 | 与 104 共享 ASDU 或结构简单;对下采集是配网终端必备 |
| 次做 | IEC 103、CDT、BALA101 | 老设备兼容,结构清晰 |
| 后做 | IEC 102、Whm_GB |
依赖电度(H1) |
| 末做 | IEC 61850 | 需 MMS/ASN.1/多播,单核 M4 资源需专项评估 |
| 并行 | SM2 / SM3 / ECDSA | 纯软件,无硬件依赖,可随时插入 |
一个容易漏的点:参考同时有对上(
Comm/Pub,本机作从站)与对下(Comm/Mon,本机作主站) 两套规约。本产品只有对上 104。做"配网终端"时对下那套(101/104/ModBus 主站侧) 是必须的——否则接不了一次开关。
10. 复刻完成判据(逐缺口可验证)
每一条缺口给出"怎么算做完了",避免"实现了但没验收"。
| 缺口 | 完成判据 |
|---|---|
| 定值铺开 | PS_ID_COUNT = 249(或按单元分批:每批新增项在 104 上可读写、跨复位保持、校验和正确);check 脚本比对参考表逐项一致 |
| 104 定值映射 | 107 个地址(0x8820~0x8891 含 8 空洞)全部可读可写;空洞地址返回"未知信息体地址" |
| 元件铺开 | 45 个模块对应 45 个实例;每个实例有:定值项齐全、启动/动作/返回三态可观测、事件码正确、单测覆盖判据边界 |
| 遥测铺开 | 31 点全部非 IV(除物理不可达点明确标 IV);线电压与相量满足 Uab = Ua − Ub 误差 ≤ 0.5 % |
| 开入开出 | 27 路硬件开入可读、31 路开出可驱动;开入防抖可整定;双点遥信四态正确(00/01/10/11) |
| 录波 | **(二期口径;本波按 1 kHz / 8 路 / 单段 / 无 COMTRADE,对照表见 需求档 §9.1 第 10 行)**4000 Hz 采样;三类录波各生成一份 COMTRADE 且被第三方工具打开;配额 64/64/16 循环覆盖正确 |
| 记录体系 | 13 类队列各有落点;每类容量达标;断电不丢已确认记录 |
| 多规约 | 每种规约与对应主站/子站工具完成一次完整交互(连接 / 总召 / 变位 / 遥控 / 断链重连) |
| 国密 | SM2 签名验签、SM3 摘要与标准测试向量一致 |
| 软压板 | 9 面全部可投退且行为可观测(投退后对应功能确实停走/恢复) |
| 出口与开入 | 保护动作 → 出口继电器动作 → 开入回读确认,全链路 ≤ 120 ms |
| 标定解卡 | 8 通道两点标定后 ADC_CAL_F_VALID 全置位;注入标准源,保护动作值与定值误差 ≤ 3 % |
| 屏板链路 | 串口通道:屏板 280 ms 召唤、主机 ≤200 ms 内发完 4208 B(整帧无 2 个字符时间以上的间隙),连续 10 min 主机侧零超时、零 CRC 错帧;显存 3200 B 与 g_ui_fbuf 逐字节一致;7 个物理键(1/2/3/4/7/8/9)动作正确;状态灯位掩码逐位一致、LED 0 恒亮;屏板 ≈5000 s 自复位不误判离线;LOGO 下发出局(不实现);网络通道:INIT 应答 16 B 逐字段一致且无颜色字段、LCDMEM 偏移 0 得 3204 B、重复召唤无应答、偏移 ≥3200 无应答、KEEPLIVE 无应答且 1 分钟不掉链、8 键(含 F1|ENT 组合)动作正确(需求档 §5.16.10 十四条,第 15 条 LOGO 出局) |
11. 屏板链路复刻任务规划
口径:条目一律用语义短语(编号规范 P-8),执行序即表序。 改动范围只含本产品固件与
DTU-RemoteLCD客户端;屏板固件不在本仓库, 其行为以需求档 §5.16 为契约做黑盒验收。两种部署形态,两条通道都要:① 串口直连屏板(参考的形态,第 10
15 条)——屏板直接挂在设备 串口上,无需任何网络设备;② 串口服务器透传 / 网络镜像(第 29 条)——屏板或调试软件经以太网连 7003。 现场用串口服务器把屏板接到网上时,两种形态等价,但固件侧不能只实现后者: 只有 7003 时,设备离开网络就没有任何本地显示,与参考产品不等价。方向相反,别写错:网络通道是"客户端召唤、设备应答";串口通道是"屏板召唤、设备应答"。 两条通道共用同一份显存快照,但帧格式、校验、时序完全不同(网络用
0xAA/0xBB+ XOR, 串口用裸二进制 + CRC-16/MODBUS),不能共用组帧代码。实现事实另立:主机侧的接线、串口配置、协议实现口径、验证状态与未闭环项在
docs/子系统设计/屏板链路设计说明.md;本节只保留需求视角的缺口与顺序,不复制实现细节。
| 序 | 任务 | 改动点 | 判据 | 跨端 |
|---|---|---|---|---|
| 1 | 报文口径定版 | 本节 + 需求档 §5.16 + 需求档 §6.2 按参考源码成文 | 文档门禁全绿(已完成) | — |
| 2 | INIT 应答补足 16 字节 | ui_net_sink.c 的 remo_send_init() 组帧由 8 B 扩到 16 B:补 8 B 键值表;不加颜色位与 RGB(单色屏不对齐多色协议,需求档 §5.16.5) |
16 B 逐字节比对通过,且报文内无颜色字段 | 是 |
| 3 | 键值表补 F1 / F2 | ui_net_sink.h 键值宏补 0x04 / 0x80;ui_net_sink_inject_key() 映射;UI 键处理接受组合键 |
下发 0x04 / 0x80 / 0x24 界面响应正确 |
否 |
| 4 | 显存断点续传 | CMD_LCDMEM 分支去掉"仅偏移 0"限制:按偏移取 g_ui_fbuf + off,长度 min(9800, 3200 − off) |
off=1600 得 4+1600 B,内容与整帧尾部逐字节一致 |
否 |
| 5 | 召唤拒绝握手 | 新增"帧代次 + 已上送"等价状态:新图未就绪时重复召唤不应答;偏移 ≥3200 不应答 | 需求档 §5.16.10 第 2、3 条通过 | 是 |
| 6 | 链路监视 | 1 分钟通信中断计时(收到帧 / 发送成功即重置);超时置状态位并落一行日志 | 断链 60 s 有明确日志与状态;重连后自动恢复推流 | 否 |
| 7 | KEEPLIVE 静默 | 去掉空帧回显,改为仅重置计时 | 需求档 §5.16.10 第 4 条通过 | 是 |
| 8 | 发送重试评估 | 对比参考"BUSY + 200 ms 放弃"与现有 net_send 阻塞模型,出结论并回填需求档 §5.16.9 第 7 行 |
结论有实测数据支撑(实现 / 明确不实现) | 否 |
| 9 | 客户端一致性回归 | DTU-RemoteLCD 按 16 B 解析;把需求档 §5.16.10 第 1~7 条做成自动化用例 |
七条判据全 PASS | 是 |
| 10 | 串口物理层落地 | 按需求档 §5.16.2 定版:700000 8N1、BRR = 0x0078(USART1,APB2 84 MHz)、无 DE(TTL 直连,不走收发器)、RX 缓冲 16 B + 空闲中断断帧、发送走 DMA 一次性发完(禁逐块阻塞;主机侧 TX 用 DMA2_Stream7,RX 走 IDLE 中断、不用 RX DMA) |
环回 + 示波器实测 700 kbaud 分频零误差;屏板能收到帧 A 并回帧 B | 否 |
| 11 | 帧 A 解析 / 帧 B 组帧 | 新增屏板通道模块:识别 6 B 请求(01 03 type key CRC_L CRC_H)、校验 CRC-16/MODBUS(低字节在前,口径见需求档 §5.16.2);组 4208 B 帧 B(3200 显存 + 4 B LED + 4 B info 保留 + 998 B 填充 + 2 B CRC) |
屏板出图与 g_ui_fbuf 逐字节一致;info[0..3] 与下发的 LED 掩码一致 |
否 |
| 12 | 状态灯位映射表 | 定义"业务状态 → 屏板 LED 位"映射(参考源码无此表,须自定);info[0..3] 按 32 位小端填,bit0 恒 0、bit20~31 恒 0 |
需求档 §5.16.10 第 11 条通过 | 否 |
| 13 | 串口上行按键 | 帧 A 的 key 字节按屏板 KEY_TYPE 解释——实际可达值只有 1/2/3/4/7/8/9(5/6/10 无物理入口);映射为逻辑键值后与 7003 注入同一入口合并 |
需求档 §5.16.10 第 10 条通过;9/10 语义按需求档 §5.16.3 ② 处置 |
否 |
| 14 | 双通道并发 + 自复位容忍 | 两出口各自独立发送上下文;串口 4208 B 阻塞不拖 7003;链路监视按"连续 ≥10 s 无应答"判离线,忽略屏板 ≈5000 s 周期自复位 | 需求档 §5.16.10 第 12、13、14 条通过 | 否 |
| 15 | LOGO 下发流程(出局,不实现) | 主机不提供 LOGO 帧,总线上不会出现 info[4..5] = 0x89 0x45 |
—(不参与验收) | 否 |
| 16 | 日志口迁移(USART1 → RS-232 通道) | ① console_log.c 的 huart1、USART1_IRQn、__HAL_RCC_USART1_CLK_*、MX_USART1_UART_Init() 收口成一处端口宏,指向 RS232#1(huart5 / UART5);② 不动 UART4 的 g_rs485 绑定 |
日志在 RS-232 侧(CN1)可读且内容与迁移前一致;USART1 完全空出;连续 10 分钟无 [ERR] |
否 |
批次划分:
| 批 | 任务 | 理由 |
|---|---|---|
| 第一批(无跨端风险,可独立发版) | 3、6、8 | 只动本端,旧客户端不受影响 |
| 第二批(跨端,须与客户端同步发版) | 2、4、5、7、9 | 报文口径变更,两端必须同版本 |
| 第三批(独立立项,不随 RS-485 冻结) | 16、10、11、12、13、14 | 屏板串口通道是独立需求,与 需求档 §5.10 冻结的"对下采集簇"不是一回事。第 16 条排在 10 之前:日志先腾出 USART1,屏板链路才能独占这条通道 |
⚠ 唯一破坏性变更:第 2 条把 INIT 应答从 8 B 改成 16 B。旧客户端会把 16 B 的前 8 B 当全部、 把后 8 B 当作下一帧的 TAG 去找,解析状态机会被这 8 B 拖住直到超时——表现为"连上了但不出图"。 因此第 2、5、7、9 条必须同批发布,且发版说明中明确"客户端需升级"。
⚠ 16 B 与参考的 29 B 不可互换:删掉 13 B 颜色字段后,偏移 4 之后全部前移—— 参考的"显存大小在偏移 5、键值表在偏移 21"在本产品变成"偏移 4、偏移 8"。 客户端不得复用参考的 29 B 解析器再截前 16 B(会读出颜色位当显存高位)。
屏板固件边界:本表不覆盖屏板侧固件(帧解析 / 显存写入 / 按键扫描 / 状态灯驱动)。 屏板固件工程在
D:\Code\DTU Code\DTU-LCD,不在本仓库,其契约已按源码逐字节成文(需求档 §5.16.2 / 需求档 §5.16.3)。 本产品只要满足 需求档 §5.16.10 的十四条判据即为兼容(第 15 条 LOGO 出局)。第三批状态:串口通道(第 10
14、16 条)主机侧已实现并经台架与真屏板验收,屏板实物已上台架; 帧长已固化 4208 B(代码实参为准,屏板 readme 的 3208 B 不作数——真屏板出图为端到端证据)。 未闭环项(2 h 长稳、仪器项等)见9 条)未开工**。docs/子系统设计/屏板链路设计说明.md§9.2;**网络通道(第 2一条物理前置(已完成 2026-10-29)+ 一条实现纪律: ① 台架串口线已挪位——日志口迁到 RS-232 侧后,台架那根线改接 CN1 的 RS232#1 端子 (
CN1.10接适配器 TXD、CN1.12接适配器 RXD、CN1.7或CN1.8接 GND),台架日志口 因此由COM6变为COM3,.serialtest/config.json的portName已同步,/serial-boot-test与serial-assistant不必再手工指端口。这些端子是 RS-232 电平,TTL 的 CH340 直连不了, 用的是 USB 转 RS-232 适配器;接法与端子出处见docs/子系统设计/屏板链路设计说明.md§3.2。 这条要在第 16 条动代码之前完成。 ② RX 要真的读、ORE 要真的清——PA10 一直是接线的(需求档 §5.16.2), 但"RX 使能却不读DR"本身就足以让 ORE 永久锁存。第 11 条实现时必须在HAL_UART_ErrorCallback里清 ORE 并重挂接收,否则一次噪声就永久静默。