4. 具体通信服务映射(SCSM):MMS、GOOSE、SV三种报文的映射关系与区别
好,咱们今天聊点硬核的。SCSM,全称是 Specific Communication Service Mapping,翻译过来就是“具体通信服务映射”。
说白了,它就是一套规则。告诉IEC 61850这个抽象的大框架,到底该用哪种“方言”去跟设备说话。
我个人习惯把SCSM理解成“翻译官”。抽象的数据模型是“想法”,SCSM就是把这个想法变成实实在在能在网线上跑的“字节流”。
在变电站自动化里,最常用的三种“方言”就是:MMS、GOOSE 和 SV。它们仨各有各的脾气,也各有各的活儿。今天我就把它们的映射关系和区别给你掰扯清楚。
4.1 三种报文的基本定位
先给个总览。你想想看,一个变电站里,信息流大概分三类:
- 控制与监视类:比如后台要读个遥测值,或者下发个遥控命令。这类数据量不大,但对完整性要求高,丢了得重传。
- 跳闸与信号类:比如保护动作了,要告诉断路器赶紧跳。这类数据要求极快,毫秒级甚至微秒级,绝对不能等重传。
- 采样值类:比如合并单元把CT/PT的电压电流值发出去。这类数据量大,实时性要求最高,而且是周期性发送。
嗯,这三种需求,正好对应了三种报文:
- MMS:面向连接的、客户端/服务器模式。用于后台与IED之间的读写操作。
- GOOSE:面向无连接的、发布者/订阅者模式。用于设备间的快速状态交换和跳闸命令。
- SV:也是发布者/订阅者模式。专门用于传输采样值,比如9-2LE。
核心区别一句话总结:
MMS是“打电话”,有问有答,确保信息完整;GOOSE是“广播喊话”,一呼百应,追求速度;SV是“定时播报”,周期性地把采样数据甩到网上。
4.2 MMS:面向连接的“老大哥”
MMS,全称制造报文规范。它是最早用在工业控制里的协议,IEC 61850把它拿过来,作为站控层通信的主力。
我在项目中遇到过,很多刚接触61850的工程师,总觉得MMS就是“读个值”那么简单。其实不然。MMS的映射非常复杂,它把61850的抽象数据模型(比如逻辑节点、数据对象)映射成了MMS的虚拟制造设备(VMD)。
举个例子:你后台要读一个断路器的位置。在61850模型里,它叫 XCBR1.Pos.stVal。MMS会把这个路径映射成一个MMS的命名变量。然后通过 read 或 write 服务来操作。
// 抽象模型:XCBR1.Pos.stVal
// MMS映射:Domain = "XCBR1", VariableName = "Pos$stVal"
// 实际报文:MMS Confirmed-Request (read)
// 对象:DomainSpecific
// 变量名:XCBR1.Pos$stVal
这里有个坑,我提醒你一下。MMS的变量名里,路径分隔符用的是 $ 而不是 .。很多人在配置ICD文件时,容易搞混这个符号。我曾经因为这个,在联调时查了半天,最后发现是IED的配置文件里路径写错了。
个人经验:
MMS报文在Wireshark里抓包时,你会看到大量的ASN.1编码。看着很头疼。我建议你重点关注 confirmed-request 和 confirmed-response 这两个服务。只要看到它们成对出现,就说明通信是正常的。
4.3 GOOSE:面向无连接的“快枪手”
GOOSE,全称通用面向对象变电站事件。它跟MMS完全不同。
MMS是“你问我答”,GOOSE是“我主动告诉你”。而且它不建立连接,直接往以太网里发多播报文。速度极快,通常在4毫秒以内。
为什么会这么快?因为它跳过了TCP/IP那套复杂的握手和重传机制。GOOSE直接映射到以太网数据链路层,用的是ISO/IEC 8802-3帧。
// GOOSE报文结构(简化)
// 以太网头部:目的MAC(多播地址)
// 优先级标签:VLAN Priority (通常为4)
// EtherType:0x88B8
// GOOSE PDU:
// gocbRef: "IED1/LLN0$GO$GoCB1"
// timeAllowedtoLive: 4000 (ms)
// datSet: "IED1/LLN0$GooseDataSet1"
// goID: "IED1/GOOSE1"
// t: 当前时间戳
// stNum: 状态序列号
// sqNum: 事件序列号
// simulation: False
// data: [布尔值, 浮点数, ...]
注意看 stNum 和 sqNum。这是GOOSE的重传机制核心。当有事件发生时(比如保护动作),stNum 加1,然后以最快速度连续发几帧(比如间隔1ms、2ms、4ms...)。之后进入稳态,sqNum 递增,发送间隔逐渐拉长到 timeAllowedtoLive。
嗯,这里有个避坑指南。我曾经在现场遇到过,某个智能终端老是误动。查了半天,发现是GOOSE报文的 timeAllowedtoLive 设置得太短,而网络又有点拥塞,导致接收方认为链路中断,进入了“安全状态”。所以,这个参数一定要根据网络实际情况来配,别照抄别人的模板。
注意:
GOOSE没有确认机制。发送方发完就不管了。接收方必须自己判断数据是否有效。判断依据就是:如果在 timeAllowedtoLive 时间内没收到新报文,就认为通信断了,然后执行预设的“安全逻辑”(比如跳闸或报警)。
4.4 SV:面向采样的“数据搬运工”
SV,全称采样值。它跟GOOSE很像,也是发布者/订阅者模式,也是直接映射到以太网链路层。但它的用途非常专一:传输采样值。
我记得在数字化变电站刚兴起那会儿,SV报文是最大的流量来源。一个合并单元,每秒钟要发4000帧(80点/周波)甚至4800帧(96点/周波)。如果全站有几十个合并单元,那网络压力是相当大的。
// SV报文结构(9-2LE标准)
// 以太网头部:目的MAC(多播地址)
// 优先级标签:VLAN Priority (通常为4)
// EtherType:0x88BA
// SV PDU:
// svID: "MU1/LLN0$MSVCB01$SmpV"
// smpCnt: 采样计数器 (0-3999)
// confRev: 配置版本号
// smpSynch: 同步状态
// seqData:
// - 电流A相: 0x1234
// - 电流B相: 0x5678
// - 电流C相: 0x9ABC
// - 电压A相: 0xDEF0
// - ...
SV报文最大的特点是:周期性。它不像GOOSE那样有“事件触发”和“稳态心跳”两种模式。SV就是一直发,每秒钟发固定数量的帧。而且,SV报文里没有 stNum 和 sqNum,它靠 smpCnt 来保证数据的连续性。
你想想看,如果 smpCnt 从100直接跳到了102,中间缺了一帧。那接收方(比如保护装置)就知道丢数据了。这时候,保护装置通常会闭锁一段时间,或者用插值算法补一个值。但如果是跳闸逻辑,丢数据可能导致误判。
映射关系对比表:
| 特性 | MMS | GOOSE | SV |
|---|---|---|---|
| 通信模式 | 客户端/服务器 | 发布者/订阅者 | 发布者/订阅者 |
| 传输层 | TCP/IP | 直接映射到以太网 | 直接映射到以太网 |
| EtherType | 0x0800 (IP) | 0x88B8 | 0x88BA |
| 实时性 | 秒级 | 毫秒级 | 微秒级 |
| 重传机制 | TCP确认重传 | 快速重传+心跳 | 无重传,周期性发送 |
| 典型应用 | 后台监控、定值读写 | 跳闸、联锁、状态交换 | 采样值传输 |
| 数据量 | 小 | 中 | 大 |
4.5 三种报文的协同工作
在实际的变电站里,这三种报文不是孤立的。它们协同工作,构成了一个完整的自动化系统。
我画个图给你看看,它们之间的关系:
你看这个图,层次非常清楚:
- 站控层:后台通过MMS跟间隔层的保护测控装置通信。读数据、写定值、看波形,都走MMS。
- 间隔层:保护装置之间、保护与智能终端之间,用GOOSE交换状态和命令。比如A套保护动作了,通过GOOSE告诉B套保护,同时告诉智能终端跳闸。
- 过程层:合并单元把CT/PT的采样值,通过SV报文发给间隔层的保护装置。保护装置收到SV后,进行计算,判断是否要动作。
嗯,这里有个关键点。你想想看,保护装置既要收SV(采样值),又要收GOOSE(状态),还要发GOOSE(跳闸)。它怎么保证实时性?
答案是:硬件优先级。在交换机和网卡里,SV和GOOSE报文通常被标记为高优先级(VLAN Priority=4或5),而MMS是低优先级(通常为0)。这样,当网络拥塞时,交换机会优先转发SV和GOOSE,保证保护功能不受影响。
我的建议:
在做网络规划时,一定要把SV、GOOSE、MMS划分到不同的VLAN里。或者至少用优先级标签把它们区分开。我曾经见过一个项目,因为没做VLAN划分,结果MMS的大文件传输把网络堵了,导致GOOSE跳闸报文延迟了十几毫秒。这在电力系统里是绝对不能接受的。
4.6 总结一下
好了,三种报文的核心区别,我基本讲完了。最后给你一个速记口诀:
- MMS:有连接,有确认,适合后台读写。
- GOOSE:无连接,快重传,适合跳闸联锁。
- SV:无连接,周期发,适合采样传输。
记住这三句话,你在配置SCD文件时,就不会搞混该用哪种报文了。
公众号:蓝海资料掘金营,微信deep3321