一、为什么是 IEC61850 + 104 并发最头疼
这次试点的老站原配某进口 DPU,挂的是:
-
下行:35 台综保 + 20 台测控,走 IEC61850 MMS(带 Goose 简化版)
-
上行:地调、市调、集控三主站,走 IEC104 多主站并发
-
改造要求:DPU 整机 100% 国产化,龙芯系,不停电割接
换上去的是 中嵌 ECM-D228——8 路 RS485 凤凰端子(老仪表侧还能挂一波 Modbus RTU 兜底),龙芯 1.0GHz 工业级,512MB DDR4 + 8GB eMMC,出厂预置 IEC61850 MMS + IEC104 + Modbus S/M + OPC UA 这套栈。
二、IEC61850 MMS 这边的坑
坑 1:ICD 直接套原进口 DPU 的,报告刷爆
老站 ICD 是 5 年前进口厂家的,全量上送 brcb(Buffered Report Control)+ urcb(Unbuffered),触发条件全开(dchg / qchg / dupd都勾),周期 IntPr设的 500ms。
直接灌进 D228 的 61850 栈,现象是:
-
报告洪泛,每 5 秒一次全量 push
-
104 侧遥信变位跟着雪崩
-
CPU 软中断飙到 25%
调法:
-
ICD 里
brcb/urcb的IntPr改 2000ms,TrgOps只留dchg + qchg,砍掉dupd -
dataSet精简,只挂本间隔需要的 DO + DA,原 ICD 里跨间隔的全砍 -
BufTm(报告缓冲时间)从 20ms 提到 100ms,合并短时间抖动的重复变位
改完报告推送量掉了约 70%,104 侧雪崩消停。
坑 2:MMS 编解码线程跟 104 发包线程抢 CPU
D228 的 61850 栈默认 MMS 编解码 + 104 收发都是用户态 pthread,龙芯 1.0GHz 单核压力下,104 三主站突发总召唤时 MMS 报告有 30-50ms 抖动。
调法(在 BSP 层让厂家配合改的):
# 看 61850 / 104 相关线程 pid
ps -eLf | grep mms
ps -eLf | grep iec104
# 绑不同 core(龙芯多核型号上生效,单核型号跳过这步)
taskset -pc 1 <mms_pid>
taskset -pc 2 <iec104_pid>
单核 1.0GHz 型号上更实际的做法是:MMS MaxPrio降一档,104 收发线程提一档——保证三主站总召时 104 先不堵。
坑 3:Goose 简化版别开全
试点里老综保有 Goose 订阅(跳闸直跳),但 DPU 侧只做转发不坐控制。原 ICD 里 Goose 控制块全开着,D228 网口 15KV ESD 倒是扛得住,但Goose 重传 + 61850 报告 + 104 三主站三线一起压,内存抖动明显。
调法:DPU 侧 Goose 只留订阅、不发控制块;直跳链路走硬接线不动 DPU。这条是变电改造的通用经验——DPU 别抢 Goose 控制面的活。
三、IEC104 并发这边的坑
试点是地调 / 市调 / 集控三主站并发,D228 单台顶原来的"规约转换器 + 管理机"两台,104 这边踩了三个:
坑 4:三主站 TCP 端口冲突
进口 DPU 老方案是每台主站一个物理网口 + 一个 IP,D228 只有 2 个千兆 RJ45,得单 IP 多 TCP 连接复用。
老站配置里三主站都连 2404,D228 出厂 104 服务端支持多连接复用,但主站链路地址(ASDU Addr)要错开,不然遥信变位推重。
调法:
-
地调 ASDU
xxxx、市调xxxx+100、集控xxxx+200(按调度分配段) -
D228 104 配置里
k / w窗口调成k=12, w=8(默认k=6在总召时易 I 帧确认堆积)
坑 5:平衡传输超时 t1 / t2 / t3
老进口 DPU 的 104 参数是"厂家秘传"没动过,照搬过来 D228 上地调链路 4 小时一断。
根因:进口 DPU 默认 t1=15s, t2=10s, t3=20s,D228 的 104 栈在龙芯上调度粒度略粗,t1 15s 在链路微拥塞时 I 帧确认超时。
调法(实测稳的一组):
t1 = 20s # I 帧发送超时
t2 = 15s # 收 I 帧后发 S 帧延迟
t3 = 30s # 长链路无数据发测试帧周期
w = 8 # 收 w 个 I 帧发 S 确认
k = 12 # 发 k 个 I 帧等 S 确认
三主站跑 72 小时链路 0 断。
坑 6:遥测雪崩时 104 总召压 104 突发
变电改造老问题:早晚峰负荷跳变,遥测雪崩 + 三主站同时总召 = 104 队列堵。
D228 这边的缓解:
-
遥测
iv无效位提前标记(采样超时就标 iv,不硬推值) -
总召周期错开:地调 15min、市调 20min、集控 30min(跟调度协商)
-
104 侧
cycTi周期上送从 5s 改 10s,变位优先、周期次之
四、并发实测数据(72 小时,110kV 试点)
|
指标 |
进口 DPU(基线) |
D228(调优后) |
|---|---|---|
|
61850 报告平均延迟 |
12ms |
9ms |
|
104 三主站 I 帧抖动 |
±35ms |
±18ms |
|
104 链路 72h 断链次数 |
2(t1 超时) |
0 |
|
CPU 峰值占用(1.0GHz) |
68%(进口 x86) |
52% |
|
软中断 si% |
25% → 调优后 11% | |
|
遥信变位丢失 |
0 |
0 |
📌 龙芯 1.0GHz 这成绩,说明 DPU 场景下主频不是瓶颈,协议栈线程模型和参数才是。进口 x86 那台基线反而 CPU 占用更高——因为老厂家闭源栈没针对多主站并发做 104 k/w 调优。
五、给国产替换项目的 5 条建议
-
ICD 别原样搬:老进口 ICD 的
brcb/urcb触发条件 +IntPr基本都要砍一刀,不然报告洪泛 -
104 三主站
k / w / t1-t3必调:默认值多为单主站场景,并发下 I 帧堆积是通病 -
MMS 和 104 线程优先级错开:龙芯单核 1.0GHz 下尤其明显
-
Goose 控制面别往 DPU 上压:DPU 坐转发可以,直跳走硬接线
-
先测试柜跑两周:老站点表 + 三主站总召并发一起压,比看 datasheet 管用
进口 DPU 替换这事,硬件参数(龙芯 1.0GHz / -40~80℃ / 8 路凤凰端子)容易对齐,ICD 裁剪 + 104 并发参数 + 旧站割接才是真工期。
ECM-D228 在试点里顶住了 110kV 这台的活,下一步准备往 220kV 枢纽站推——那边 Goose 全量 + 采样值 9-2 会上,估计 MMS 线程模型还得再调一版,到时候另开一篇记。
&spm=1001.2101.3001.5002&articleId=162272998&d=1&t=3&u=5b18a04caec0499d9f89139e3d6ec2ce)

被折叠的 条评论
为什么被折叠?



