Files
STM32F4-Base/docs/产品需求/参考产品复刻明细.md
T
wandering1 aed842e1f2 Merge branch 'v2-on-ui' into task/archsplit-sw-hw
# Conflicts:
#	docs/架构设计/软件架构与运行时规格.md
2026-10-30 13:32:52 +08:00

58 KiB
Raw Blame History

STM32F4-Base 参考产品复刻明细(CLS100)

文档定位:1:1 复刻口径下**「参考有什么 / 我们有什么 / 差额在哪 / 怎么算做完」**的 逐项明细权威——自 docs/产品需求/产品需求设计文档.md v1.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 复刻基线三要素

  1. 点表即契约:参考源码用常量表(g_t*Tab[])定义点表、定值、事件、压板。 这些表就是"要复刻什么"的唯一清单——表有几行,目标就有几个点。
  2. 地址即接口:104 的 IOA 由 Rly_IEC104.h 的基址宏划分段,段基址必须逐字对齐(需求档 §1.3)。
  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 定义 131,有效 6(YX1518/23/31)
保护 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 未实现文件传输

复刻所需的四件东西(缺一不可):

  1. 4 倍过采样缓冲:当前 adcTask 以 1000 Hz 出样本,录波要 4000 Hz。要么提高采样率 再抽取给保护(改变整条链节拍),要么在 TPAFE 侧单独开一条 4 倍速通路(改驱动)。
  2. 环形缓冲 + 触发点定位:5 周波前缓冲 + 10 周波后缓冲,触发时刻要能反算出缓冲内偏移。
  3. COMTRADE 编码器:.cfg(通道定义、采样率、时标)+ .dat(二进制采样值)+ .hdr。
  4. 文件存储与配额管理: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 为契约做黑盒验收。

两种部署形态,两条通道都要:① 串口直连屏板(参考的形态,第 1015 条)——屏板直接挂在设备 串口上,无需任何网络设备;② 串口服务器透传 / 网络镜像(第 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 出局)。

第三批状态:串口通道(第 1014、16 条)主机侧已实现并经台架与真屏板验收,屏板实物已上台架; 帧长已固化 4208 B(代码实参为准,屏板 readme 的 3208 B 不作数——真屏板出图为端到端证据)。 未闭环项(2 h 长稳、仪器项等)见 docs/子系统设计/屏板链路设计说明.md §9.2;**网络通道(第 29 条)未开工**。

一条物理前置(已完成 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 并重挂接收,否则一次噪声就永久静默。