核心目标:掌握 IEC 61850 三种通信机制的原理、报文格式和适用场景,能读懂 Wireshark 抓包并理解协议交互过程。

前置知识:Part 2 的信息模型概念(LD/LN/DO/DA/DataSet),TCP/IP 基础知识。


3.1 通信架构总览

3.1.1 三驾马车的定位

IEC 61850 的通信架构在设计上区分了三种不同的通信需求,每种需求对实时性、可靠性和数据量的要求都不相同。

抽象层

变电站通信需求

MMS
读取/写入/报告/控制
~100ms-1s
TCP/IP
C/S 模式

GOOSE
跳闸/联锁/状态
<4ms
二层组播
Pub/Sub

SV
采样值传输
<0.02ms
二层组播
Pub/Sub

抽象层(ACSI)

3.1.2 协议栈对比

特性 MMS GOOSE SV
OSI 层级 7 层(应用层) 2 层(数据链路层)或 3 层 2 层或 3 层
传输方式 TCP 可靠连接 以太网组播(无连接) 以太网组播(无连接)
通信模式 Client → Server 请求/响应 Publisher → Subscriber 发布/订阅 Publisher → Subscriber 发布/订阅
典型延迟 100ms ~ 1s < 4ms(甚至 < 1ms) < 0.02ms(采样周期级)
服务类型 确认服务 + 非确认服务 非确认服务 非确认服务(连续流)
主要用途 监控数据采集、参数设置、控制命令 跳闸信号、状态联锁、保护启动 电流/电压波形采样
带宽占用 低(按需传输) 低(事件触发+心跳) 高(连续传输)
网络协议 TCP/IP + TPKT + COTP + MMS IEEE 802.3 + GOOSE APDU IEEE 802.3 + SV APDU
标准 IEC 61850-8-1 IEC 61850-8-1 IEC 61850-9-2
端口/协议标识 TCP 102(MMS 默认) EtherType 0x88B8 EtherType 0x88BA

3.1.3 三种协议在变电站中的协作场景

以一个典型的"保护跳闸"场景为例,三种协议协同工作:

监控后台 智能终端 (IT) 保护 IED 合并单元 (MU) 监控后台 智能终端 (IT) 保护 IED 合并单元 (MU) t0 ───────── t1 ───────── t2 ───────── t3 收到采样值 检测到故障 断路器分 SV(9-2) 发布采样值 (80样本/周波) GOOSE(8-1) 发布跳闸报文 MMS Report (状态变化/保护动作) MMS Read (确认状态)

3.2 MMS 协议深析

3.2.1 MMS 的起源与角色

MMS(Manufacturing Message Specification)并非 IEC 61850 独有的协议。它源于 ISO/IEC 9506 标准,最初是为制造业自动化设计的通用报文规范。IEC 61850 选择 MMS 作为站控层通信协议,利用其成熟的面向对象服务能力来承载 IEC 61850 的抽象服务。

简单理解:MMS = IEC 61850 信息模型的"传输载体"

3.2.2 MMS 协议栈

MMS 的协议栈在 TCP/IP 之上叠加了多层 ISO 协议:

MMS协议栈

IEC 61850 应用层
ACSI 服务(Read/Write/Report/Control)

MMS
ISO 9506 核心(Confirmed-Request/Response)

ISO Presentation Layer (ISO 8823)
BER/OER 编码抽象语法

ISO Session Layer (ISO 8327)
会话管理、连接同步

ISO COTP (ISO 8073)
TPKT Header / Transport Layer

TCP / Port 102

IP

Ethernet

编码方式:MMS 使用 ASN.1 BER(Basic Encoding Rules)进行编码。每个 MMS 报文由 TLV(Tag-Length-Value)三元组序列组成。

3.2.3 报文结构逐层解析

下面抓取一个典型的 MMS Read 请求和响应,从以太网帧开始逐层拆解:

以太网帧头(14 字节):

Destination MAC: 00:1a:xx:xx:xx:01
Source MAC:      00:1a:xx:xx:xx:02
EtherType:       0x0800 (IPv4)

IP 头(20 字节)
TCP 头(20 字节): 源端口 102(MMS 默认服务端端口)

TPKT 头(4 字节):

Byte 0-2: 版本标志 + 保留         (0x03 0x00)  
Byte 3:   包体长度                 (0x31 = 49 字节后续数据)

COTP 头(ISO 8073)—— 传输连接:

TPDU Type: 0xf0 (DT - Data Transfer)
TPDU NR:   0x12
Last Data Unit: 0x00

Session/Presentation 层 —— 主要是 PDU 编码协商:

Session Identifier: ...
Presentation Context ID: 1 (MMS)

MMS 层(核心)—— Confirmed-Request PDU:

invokeID: 3               ← 请求 ID,用于匹配响应
service: read (0xa4)      ← 服务类型
  └─ variableAccessSpecification
       ├─ List of Variable
       ├─ variableSpecification: OBJECT_INSTANCE_NAME
       │    └─ domainSpecific
       │         ├─ domainId: "PROT"       ← LD 名称
       │         └─ itemId: "PTOC1$ST$Op$general" ← LN.DO.DA 路径
       │                                    ↑ MMS 使用 $ 作为分隔符!
       └─ ...

MMS 响应 —— Confirmed-Response PDU:

invokeID: 3               ← 匹配请求 ID
service: read (0xa4)
  └─ accessResult
       └─ success
            └─ data: BOOLEAN (true)   ← 返回值:true(动作已启动)

关键发现:IEC 61850 的对象引用路径在 MMS 中转换为以 $ 分隔的格式:

  • IEC 61850 路径:PROT/PTOC1.Op.general(FC=ST)
  • MMS 编码路径:PROT/PTOC1$ST$Op$general

路径映射规则:LD/LN$FC$DO$DA

3.2.4 MMS 核心 ACSI 服务映射

以下是 IEC 61850 ACSI 服务到 MMS 服务的映射关系:

ACSI 服务 对应的 MMS 服务 用途
GetServerDirectory identify + getNameList 获取 Server 信息及所有 LD 列表
GetLogicalDeviceDirectory getNameList 获取 LD 下所有 LN
GetLogicalNodeDirectory getNameList 获取 LN 下所有 DO
GetDataObjectDefinition getVariableAccessAttributes 获取 DO 的类型定义
Read read 读取 DA 的值
Write write 写入 DA 的值
GetDataSetValue read(数据集) 读取数据集中的所有值
SetDataSetValue write(数据集) 写入数据集中的所有值
CreateDataSet createNamedVariableList 动态创建数据集
DeleteDataSet deleteNamedVariableList 删除动态数据集
GetDataSetDirectory getNameList(数据集) 获取数据集的 FCDA 成员列表
Report (BRCB/URCB) informationReport 主动上报数据变化
Select write(ctlVal + 特定控制模式) 选择控制对象
SelectWithValue write(ctlVal + 控制值 + 控制模式) 带值选择控制对象
Cancel write(取消控制操作) 取消控制
Operate write(ctlVal + 操作值 + 控制模式) 执行控制操作
CommandTermination informationReport 控制执行完成通知
GetCBValues read(控制块参数) 读取控制块参数
SetCBValues write(控制块参数) 设置控制块参数

3.2.5 Report 机制详解

Report 是 MMS 中最核心的"主动推送"机制,在监控后台实时更新场景中至关重要。

Report 的交互过程:

Server (IED) Client (监控后台) Server (IED) Client (监控后台) (1) 订阅报告 (2) 使能报告 (3a) 事件触发 (dchg) (3b) 周期上报 (IntgPd) Write URCB.RptID = "xxx" Write URCB.TrgOps = ... Write URCB.IntgPd = 1000 Write URCB.Resv = true InformationReport {RptID, sqNum, 数据集合} InformationReport {RptID, sqNum, 数据集合}

报告触发条件(TrgOps):

触发标志 名称 含义 典型场景
dchg Data Change 数据值发生变化时触发 断路器位置变化、保护动作
qchg Quality Change 数据品质位变化时触发 数据从 good 变 invalid
dupd Data Update 数据被更新时触发(值可能未变) 周期性状态刷新
IntgPd Integrity Period 定时周期上报所有数据值 测量值定期刷新

BRCB(缓冲报告)vs URCB(非缓冲报告):

特性 BRCB(缓冲) URCB(非缓冲)
缓存机制 事件按序号缓存,确认前保留 不缓存,发送即丢弃
有序性 顺序严格保证(客户端必须 ACK) 不保证顺序
丢网络时 事件保留在缓存,恢复后补发 事件丢失
sqNum 变化 递增(客户端确认后) 递增(每包独立)
适用场景 保护动作事件(不可丢失) 测量值上报(可容忍丢包)

缓冲报告确认流程:

Server Client Server Client 客户端确认收到 1 和 2 得知 sqNum=2 之前已确认 可丢弃缓存 Report (sqNum=1) Report (sqNum=2) ACK (sqNum=1,2) Report (sqNum=3)

如果网络断开后恢复:

Server Client Server Client Server 缓存了 3,4,5 [网络断开] [网络恢复] 客户端完整收到所有事件 Report (sqNum=3,4,5) ACK (sqNum=5)

3.2.6 控制模型详解

IEC 61850 定义了五种控制模型,安全级别由低到高:

控制模型 编码 含义 安全性级别 典型应用
Status Only 0 只读状态,不执行控制 仅监视的控制点
Direct-with-normal-security 1 直接操作,无安全校验 简单遥调
SBO-with-normal-security 2 先选后操,无安全校验 普通遥控
Direct-with-enhanced-security 3 直接操作,带安全校验 带身份验证的控制
SBO-with-enhanced-security 4 先选后操,带安全校验 最高 保护/安全相关的控制

SBO 控制完整交互时序(最常用模式):

Server (IED) Client (监控后台) Server (IED) Client (监控后台) Select Select 后 IED 进入"选中"状态 超时时钟启动 (sboTimeout) 其他客户端无法操作 Operate CommandTermination Write CSWI1.Pos.ctlVal=true (ctlModel = SBO-with-enhanced) Select Response (成功/失败) Write CSWI1.Pos.ctlVal=true (同一操作值,须与Select一致) Operate Response (成功/失败) InformationReport (断路器动作完成通知,含最终状态)

安全注意:SBO-with-enhanced-security 要求:

  1. 每次操作必须由具有适当权限的 Client 发起(身份验证)
  2. Operate 的值必须与 Select 时的值严格一致(防止篡改)
  3. 操作必须在 sboTimeout 内完成(超时自动取消选中状态)

3.3 GOOSE 协议深析

3.3.1 GOOSE 的原理

GOOSE(Generic Object Oriented Substation Event)是 IEC 61850 中最重要的实时通信机制,用于在同一网络的设备之间快速交换状态和命令信息。

GOOSE 的核心特性:

  • 基于组播:一个设备发布,多个设备可同时接收
  • 无连接:不依赖 TCP 握手,直接工作在以太网层
  • 自动重传:事件发生后按指数退避策略重复发送
  • 心跳机制:无事件时周期性发送心跳,用于通信监视

3.3.2 GOOSE 报文结构

GOOSE 报文直接封装在以太网帧中(不经过 IP 和 TCP/UDP),EtherType 为 0x88B8

② GOOSE APDU (ASN.1 BER 编码)

数据

numDatSetEntries
4

allData[0]
true

allData[1]
false

allData[2]
false

allData[3]
false

时间与序号

t
2026-05-05 10:30:00

stNum
3

sqNum
0

控制参数

ttl
4000ms

confRev
1

ndsCom
false

test
false

标识

gocbRef
PROT/LLN0.gocbTrip

goID
PROT/LLN0.gocbTrip

datSet
PROT/LLN0.dsTrip

① 以太网帧头 (14 Bytes)

目的MAC
01:0C:CD:01:00:01
(6B)

源MAC
00:1A:XX:XX:XX:01
(6B)

VLAN Tag
0x8100 VID=100 P=4
(4B)

EtherType
0x88B8
(2B)

③ CRC 校验码
(4B)

3.3.3 GOOSE 关键字段详解

字段 类型 含义 说明
gocbRef VisibleString GOOSE 控制块引用 唯一标识,格式:LD/LN.GOCB名称
timeAllowedToLive INTEGER (ms) 允许存活时间 接收端用此值判断 GOOSE 是否超时,通常为 4 倍心跳间隔
datSet VisibleString 数据集引用 指向 LLN0 下的 DataSet 定义
goID VisibleString GOOSE 标识 可选的人类可读标识
t UTC Time 时间戳 当前事件的 UTC 时间(纳秒精度)
stNum INTEGER 状态变更序号 每次数据值变化时递增(事件发生后 sqNum=0)
sqNum INTEGER 重传序号 同一 stNum 内重传次数,每次重传递增
test BOOLEAN 测试模式 true 时接收端不应执行实际操作(用于调试)
confRev INTEGER 配置版本号 GOOSE 控制块配置变更时递增,接收端应检查
ndsCom BOOLEAN 需要重新配置 true 表示发布端配置无效,需要重新配置
numDatSetEntries INTEGER 数据集条目数 allData 数组的长度
allData SEQUENCE OF Data 数据值列表 按数据集定义的顺序排列的实际数据值

3.3.4 GOOSE 发布机制

GOOSE 的一个关键设计是事件触发的重传机制。当数据变化时,GOOSE 以极快的速度连续发送多帧,然后逐渐降低重传频率,直到恢复心跳周期。

事件2重传

事件1重传

心跳阶段

心跳
sqN:0 stN:1
T=2s

心跳
sqN:1 stN:1
T=2s

心跳
sqN:2 stN:1
T=2s

事件触发!
sqN:0 stN:2
T=4ms

重传1
sqN:1 stN:2
T=8ms

重传2
sqN:2 stN:2
T=16ms

重传3
sqN:3 stN:2
T=32ms

恢复心跳
sqN:... stN:2
T~2s

事件触发!
sqN:0 stN:3
T=4ms

重传1
sqN:1 stN:3
T=8ms

重传2
sqN:2 stN:3
T=16ms

重传时间序列(指数退避):

MaxRetransmissionTime = 2000msMinRetransmissionTime = 4ms 为例:

重传次数 等待时间 发送时刻(ms)
0(事件) 0
1 4ms 4
2 8ms 12
3 16ms 28
4 32ms 60
5 64ms 124
6 128ms 252
7 256ms 508
8 512ms 1020
9 1024ms 2044
10 2000ms 4044(进入心跳稳定阶段)

设计目的:在事件发生后的最初阶段以最高频率重传,确保哪怕丢失几帧,接收端也能在极短时间内收到有效数据,既满足实时性要求,又不至于永远高频广播占用带宽。

3.3.5 GOOSE 订阅机制

接收端需要做的几件事:

  1. 组播过滤:监听目标组播 MAC 地址(基于 APPID 映射),或者接收所有 GOOSE 帧后按 APPID 过滤
  2. 订阅解码:解析 APDU,提取数据
  3. 状态机跟踪:跟踪 stNum/sqNum 的变化(防止重复处理)
  4. 超时检测:如果超过「timeAllowedToLive」时间未收到新帧,认为发布端丢失,进入 “GOOSE 丢失” 告警状态

GOOSE 接收状态机(简化):

收到第一帧

新帧 (stNum 变)

超时未收到

收到新帧

初始状态

运行正常

等待新帧

处理新数据

更新输出

重置超时计时器

GOOSE丢失

置品质位为invalid

stNum/sqNum 的处理规则:

场景 stNum 变化 sqNum 变化 接收端行为
首次接收 接受数据,记录 stNum/sqNum
心跳包(无变化) 不变 递增 仅重置超时计时器,不处理数据
事件发生 递增 0 处理新数据值,重置计时器
事件重传 不变 递增 忽略重复数据(已处理过)
stNum 回退 变小 忽略,IED 可能重启过(需要输出告警)

3.3.6 VLAN 与优先级

GOOSE 报文在实际网络中通常使用 VLAN Tagging 来确保 QoS:

VLAN Tag (IEEE 802.1Q):
├── TPID: 0x8100 (VLAN 标识)
├── PCP: 4 (Priority Code Point, 0-7, 4 = 优先转发)
├── DEI: 0 (Drop Eligible Indicator)
└── VID: 100 (VLAN ID, 0-4094)

GOOSE 的组播 MAC 地址生成规则:

组播 MAC = 01:0C:CD:01:00:00 + APPID 的低 12 位

例如 APPID = 0x1001 → MAC = 01:0C:CD:01:00:01
     APPID = 0x1002 → MAC = 01:0C:CD:01:00:02

IEC 61850 保留了 01:0C:CD:01:00:00 ~ 01:0C:CD:01:FF:FF 范围(共 4096 个)用于 GOOSE 组播。


3.4 SV 协议深析

3.4.1 SV 的定位

SV(Sampled Values)用于传输电流/电压互感器的原始采样数据,是过程层通信的核心。SV 协议定义在 IEC 61850-9-2(及 9-2 LE Light Edition),EtherType 为 0x88BA

SV 与 GOOSE 的关键区别:

特性 GOOSE SV
数据性质 离散事件(跳闸/状态) 连续流采样数据
发送方式 事件触发 + 心跳 持续周期发送(每个采样点一帧或一个 ASDU 多帧聚合)
实时性 < 4ms 采样周期级别(~0.02ms 对应 80 点/周波@50Hz)
数据量 小(几十字节) 大(每个 ASDU 带多通道采样值)
时间同步 可选 必须(IEEE 1588 PTP)

3.4.2 SV 报文结构

② SV APDU (ASN.1 BER 编码)

seqData 通道数据

ch[1] I_A
-3264

ch[2] I_B
+1421

ch[3] I_C
+1844

ch[4] V_A
+29520

ch[5] V_B
-14760

ch[6] V_C
-14760

savPdu

帧头参数

noASDU
1

security
NONE

ASDU[1]

svID
MU1_9-2LE

smpCnt
34

confRev
1

smpSynch
true

smpRate
80

① 以太网帧头 (14 Bytes)

目的MAC
01:0C:CD:04:00:01
(6B)

源MAC
00:1A:XX:XX:XX:02
(6B)

VLAN Tag
0x8100 VID=101 P=6
(4B)

EtherType
0x88BA
(2B)

③ FCS CRC-32
(4B)

3.4.3 采样率配置

IEC 61850-9-2 LE 定义了两种最常见的采样率:

保护应用 计量/电能质量应用
80 样本/工频周波 256 样本/工频周波
50Hz: 4000 样本/秒 50Hz: 12800 样本/秒
60Hz: 4800 样本/秒 60Hz: 15360 样本/秒
1 个 ASDU 每帧 1 个 ASDU 每帧 或 8 个 ASDU 聚合每帧

对应采样间隔:

  • 80 点/周波(50Hz):间隔 = 20ms / 80 = 250μs → 帧率 = 4000 帧/秒
  • 256 点/周波(50Hz):间隔 = 20ms / 256 = 78.125μs → 帧率 = 12800 帧/秒

3.4.4 时间同步要求

SV 的关键是所有合并单元必须严格同步采样时序,否则保护装置计算的差动电流、向量和将出现严重误差。

PTP (IEEE 1588)

PTP (IEEE 1588)

PTP (IEEE 1588)

SV 组播

SV 组播

SV 组播

Grandmaster Clock (GM)
GPS / BDS 时钟源

MU #1
合并单元 (Slave Clock)
SV 发布

MU #2
合并单元 (Slave Clock)
SV 发布

MU #3
合并单元 (Slave Clock)
SV 发布

保护 IED
订阅 SV
收到多个 MU 的同步采样数据

smpCnt(采样计数)同步:

smpCnt 是 SV 帧中的重要字段,它标识当前帧在整个工频周期中的位置,用于接收端对齐来自不同 MU 的采样数据。

smpCnt 循环(80 点/周波 @ 50Hz):
  0 → 1 → 2 → ... → 79 → 0 → 1 → ... (每 20ms 循环一次)
                                  ↑
                            smpSynch=true 脉冲

smpCnt 的连续性检查:
  正常:  ... → smpCnt=33 → smpCnt=34 → smpCnt=35 → ...
  丢帧:  ... → smpCnt=33 → smpCnt=35 → ...        (34 丢失!)
  不同步: ... → smpCnt=33 → smpCnt=33 → ...      (相同计数重复出现)

3.5 控制模型详解

3.5.1 五种控制模型

在 3.2.6 节中我们简要介绍了五种控制模型,这里从更深层的角度分析它们的设计意图:

Status-only (ctlModel = 0):

  • 该控制对象只读,不能执行任何控制操作
  • 适用于作为状态监视点而非可操作点的 DO

Direct-with-normal-security (ctlModel = 1):

  • 一次 Operate 即完成控制,无需先 Select
  • 没有时序上的安全保证(任何 Client 任何时候都能操作)
  • 使用简单,但缺少防冲突机制

SBO-with-normal-security (ctlModel = 2):

  • Select → Operate 两阶段流程
  • Select 锁定控制对象,其他 Client 无法操作
  • 需要 sboTimeout 超时自动释放
  • 满足大多数控制场景

Direct-with-enhanced-security (ctlModel = 3):

  • 单次操作,但增加了安全校验和身份认证
  • 在 Operate 中包含 origin(操作源)、ctlNum(操作序号)等信息
  • 适用于需要追溯操作源的场景

SBO-with-enhanced-security (ctlModel = 4):

  • Select + Operate + 安全校验 + 身份认证
  • 最高安全等级的保护控制
  • 要求 Operate 时 ctlVal 与 Select 时保持一致
  • 通常用于保护跳闸、断路器控制等关键操作

3.5.2 控制服务参数详解

Select 服务参数:

Select Request:
├── ctlVal: BOOLEAN  ← 要控制的期望值(合=1/分=0)
├── origin:                     ← 操作源
│   ├── orCat: {0=远程控制, 1=就地控制, 2=远方继电保护, 3=自动}
│   └── orIdent: "SCADA_01"    ← 操作者标识
├── ctlNum: INTEGER  ← 操作序号(防止重放攻击)
├── T: Timestamp     ← 操作时间戳
├── test: BOOLEAN    ← 测试模式标志
└── Check: SBO ──→ ctlModel = 2/4 时有效

Operate 服务参数:

Operate Request:
├── ctlVal: BOOLEAN  ← 必须与 Select 的值完全一致!
├── origin: {orCat, orIdent}
├── ctlNum: INTEGER  ← 同一控制序列中与 Select 的 ctlNum 相同
├── T: Timestamp
├── test: BOOLEAN
└── Check:
    ├── synchrocheck: BOOLEAN  ← 是否需做同期检查
    └── interlockCheck: BOOLEAN ← 是否需做联锁检查

3.5.3 联锁与同期检查

联锁(Interlocking)—— CILO LN:

联锁逻辑确保不满足安全条件时,控制操作会被拒绝。

典型的联锁规则示例(隔离开关操作):
1. XSWI(隔离开关)只能在 XCBR(断路器)断开时分合
2. 接地刀闸只能在相应隔离开关断开时操作
3. 母线隔离开关不能在有负荷的情况下操作

CILO 的输出 DO:
├── EneRel:  使能/禁止操作的逻辑条件
├── OpOpn:   允许分闸的条件
└── OpCls:   允许合闸的条件

同期检查(Synchrocheck)—— RSYN LN:

当断路器合闸时,需要检查两侧(母线侧和线路侧)是否满足同期条件:

RSYN 检查的典型条件:
├── ΔV < V_max         ← 电压差阈值
├── ΔF < F_max         ← 频率差阈值
├── ΔΦ < Φ_max         ← 相角差阈值
└── DEAD_BUS_CHECK      ← 是否允许"死母线"合闸(母线无电压时)

3.6 Wireshark 报文分析实战

3.6.1 配置 Wireshark

在 Wireshark 中成功解析 IEC 61850 协议需要以下配置:

  1. 安装解析器:Wireshark 3.x 以上版本自带 MMS/GOOSE/SV 解析器
  2. 配置 GOOSE APPID 过滤
    Display Filter: goose
    Capture Filter: ether proto 0x88B8
    
  3. 配置 SV 过滤
    Display Filter: sv
    Capture Filter: ether proto 0x88BA
    
  4. MMS 过滤(默认在 TCP 102 端口):
    Display Filter: mms
    

3.6.2 典型报文分析

场景:抓取 GOOSE 布跳闸报文

Frame 367: 72 bytes on wire (576 bits)
├── Ethernet II
│   ├── Destination: 01:0c:cd:01:00:01   (GOOSE 组播)
│   ├── Source:      00:1a:xx:xx:xx:01
│   ├── Type:        0x8100 (802.1Q Tag)
│   │   ├── .000 0100 0000 0000 = VLAN ID: 100
│   │   └── 100. .... .... .... = Priority: 4
│   └── Type:        0x88B8 (GOOSE)
│
├── GOOSE (IEC 61850-8-1)
│   ├── gocbRef: "PROT/LLN0.gocbTrip"
│   ├── timeAllowedToLive: 5000
│   ├── datSet: "PROT/LLN0.dsTrip"
│   ├── goID: "GOOSE_prot_trip"
│   ├── t: May  5, 2026 10:30:00.123456 UTC
│   ├── stNum: 47
│   ├── sqNum: 0              ← 第一次重传(stNum 刚变化)
│   ├── test: False
│   ├── confRev: 2
│   ├── ndsCom: False
│   ├── numDatSetEntries: 4
│   └── allData: BOOLEAN[4]
│       ├── BOOLEAN: True   (PTOC1.Op.general = 过流I段动作!)
│       ├── BOOLEAN: False
│       └── BOOLEAN: False
└── Padding: ...

Wireshark 分析要点:

  1. 检查 stNum 是否在之前的帧基础上递增了 1——确认数据确实发生了变化
  2. 检查 sqNum = 0 —— 这是事件发生后的第一帧,最重要
  3. 检查 allData 中的值——过流 I 段动作了
  4. 检查 timeAllowedToLive = 5000ms —— 5 秒内收不到新帧则认为通信丢失

3.6.3 常见异常场景

场景1:GOOSE 丢帧

收到帧序列:
  stNum=1, sqNum=0  → stNum=1, sqNum=1  → stNum=1, sqNum=3
                                              ↑ sqNum 跳跃了!
                                            中间有 sqNum=2 丢失

分析:sqNum 为连续序号,中间出现跳跃说明存在丢帧。
     如果丢帧持续累积,且总接收间隔 > timeAllowedToLive,
     接收端应置品质为 invalid。

场景2:SV 采样不同步

MU#1 的 smpCnt:  ... → 33 → 34 → 35 → 36 → ...
MU#2 的 smpCnt:  ... → 33 → 35 → 36 → ...  
                                 ↑ MU#2 的 34 号样本丢失!

分析:smpCnt 出现跳跃说明 MU#2 发生了采样丢失。
     接收端(保护 IED)需要检测并处理此类异常,可能
     导致差动保护闭锁或报警。

场景3:MMS 连接失败

TCP 三次握手成功(SYN/SYN-ACK/ACK)
COTP 连接请求成功(CR/CC)
MMS Initiate 请求/响应成功

然后 Read 请求 → 但响应包含 negative response (service error)
  ├─ service-error: object-access-denied
  └─ 尝试访问的数据对象的读取权限未授予该客户端

分析:不是网络问题,是权限问题——需要检查 SCL 中
     对应 FCDA 的访问权限配置。

3.7 三种协议部署对比总结

方面 MMS GOOSE SV
网络层 TCP/IP 网络,路由可达 通常限制在二层交换网络 通常限制在二层交换网络
端口/协议 TCP 102 以太网帧 0x88B8 以太网帧 0x88BA
冗余 TCP 重传 + 应用层冗余连接 双网冗余(PRP/HSR) 双网冗余(PRP/HSR)
QoS 要求 低(尽力而为) 中(VLAN PCP 4) 高(VLAN PCP 6)
带宽要求 低(按需) 低(事件+心跳) 高(连续采样流)
时间同步 NTP 即可 PTP 可选 PTP 强制
配置方式 SCL 定义 + 运行时动态 SCL 定义 + 预配置 SCL 定义 + 预配置
故障排查 Wireshark 按 TCP 流追踪 Wireshark 分析 stNum/sqNum Wireshark 分析 smpCnt 连续性

3.8 小结

本期是 IEC 61850 系列中篇幅最长、内容最深的一篇,我们全面贯通了三大协议的原理与细节:

  1. MMS —— 站控层协议,基于 TCP/IP,面向请求-响应的数据访问与报告推送
  2. GOOSE —— 过程层实时信号,二层组播,事件触发 + 指数退避重传
  3. SV —— 过程层采样值,周期组播,依赖 PTP 同步
  4. 控制模型 —— 五种控制模型的原理与 SBO 完整交互流程
  5. 报文分析 —— Wireshark 实战,常见异常场景

这三者在变电站中构成一个完整的通信生态——MMS 负责"慢但全面"的监控数据,GOOSE 负责"快但精简"的信号传递,SV 负责"连续且海量"的采样数据传输。

下期预告

[Part 4:SCL 配置工程] 将详解 IEC 61850 的配置语言:

  • ICD、SSD、SCD、CID、SED 五种文件的完整体系
  • SCL 文件的 XML 结构逐层解析
  • 通信参数、GOOSE/SV 控制块、Report 控制块的配置方法
  • 从零编写一个完整的 ICD 文件

参考标准

  • IEC 61850-8-1: Specific communication service mapping (SCSM) - Mappings to MMS
  • IEC 61850-9-2: Specific communication service mapping (SCSM) - Sampled Values over ISO/IEC 8802-3
  • IEC 61850-7-2: ACSI

推荐工具

  • Wireshark + 完整 IEC 61850 解析插件(必备工具)
  • Linux 下的 tshark 命令行工具(批量报文分析)
  • IEC 61850 IED Scout(商业,功能完善的 MMS 客户端调试工具)
  • libIEC61850 goose_subscribergoose_publisher 示例(开源,适合学习源码级 GOOSE 处理)
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐