4. MMS协议基础:MMS是什么?它在IEC61850中扮演什么角色?

好,咱们今天聊聊MMS。很多刚接触IEC61850的朋友,一看到这三个字母就头大。说实话,我当年刚入行时也一样,翻了一堆资料,越看越迷糊。后来在变电站现场调了两年装置,才慢慢摸清楚它的脾气。

MMS的全称是制造报文规范(Manufacturing Message Specification)。名字挺长,但说白了,它就是一套工业设备之间互相通信的“普通话”。你想想看,一个变电站里有几十台智能电子设备(IED),有保护装置、测控装置、智能终端……它们来自不同厂家,怎么让它们互相理解?MMS就是干这个的。

核心一句话:MMS是IEC61850的“通信骨架”,它负责把变电站里那些复杂的电力数据(比如电压、电流、开关状态)打包成标准格式,在设备之间可靠地传来传去。

4.1 MMS在IEC61850中的角色定位

我习惯把IEC61850比作一个三层蛋糕:

  • 最底层:网络通信层(以太网、TCP/IP)——负责把数据比特流发出去
  • 中间层:MMS协议层——负责把数据“翻译”成双方都懂的格式
  • 最上层:应用功能层(GOOSE、SV、报告等)——负责具体业务逻辑

MMS就在中间,承上启下。没有它,上层那些花里胡哨的功能根本跑不起来。

我在项目中遇到过一件事:有个站调试时,保护装置和后台监控怎么都连不上。查了两天,最后发现是MMS的应用关联参数没配对。说白了,就是两边的“握手暗号”没对上。从那以后,我每次做系统集成,第一件事就是检查MMS的关联配置。

4.2 MMS到底干了哪些活?

MMS在IEC61850里主要干三件事:

  1. 读数据:客户端(比如后台监控)向服务器(比如保护装置)请求某个数据值。比如“请把A相电流值发给我”。
  2. 写数据:客户端修改服务器里的数据。比如“把保护定值从100A改成120A”。
  3. 报告数据:服务器主动把变化的数据推送给客户端。比如“开关跳闸了,我主动告诉你”。

嗯,这里要注意:报告是MMS里最常用的功能。变电站里那么多遥信、遥测,如果每个数据都要客户端去轮询问一遍,网络早就炸了。所以MMS设计了报告机制——数据变了才上报,没变就不报。这个设计非常聪明。

4.3 MMS的报文长什么样?

你可能好奇,MMS报文在网络上到底长什么样?我拆一个给你看。

MMS报文是封装在TCP/IP里面的。它的结构大致是:

以太网帧头 | IP头 | TCP头 | TPKT头 | OSI会话层 | OSI表示层 | MMS报文

看着复杂,但实际工作中你不需要记这么多层。你只需要知道:MMS报文的核心是“请求-响应”模式

举个例子,客户端想读保护装置的“A相电流”值:

客户端发送:MMS请求(读变量 "PROT1/MMXU1.A.phsA.cVal.mag.f")
服务器回复:MMS响应(值 = 523.4 A)

你看,MMS用的是面向对象的寻址方式。那个长长的字符串“PROT1/MMXU1.A.phsA.cVal.mag.f”就是IEC61850定义的数据路径。路径里的每一段都有含义:

  • PROT1:逻辑设备名(保护装置1)
  • MMXU1:逻辑节点(测量单元1)
  • A:数据对象(A相)
  • phsA:数据属性(A相电流)
  • cVal.mag.f:子属性(复数值的幅值,浮点数)

这种命名方式,说白了就是把电力系统的物理量映射成了计算机能理解的对象树。我第一次看到这个路径时也觉得啰嗦,但用久了发现,这种设计让数据定位非常精确,不会产生歧义。

4.4 MMS的避坑指南

我曾经踩过的坑:

  • 关联数限制:MMS服务器能同时处理的客户端连接数是有限的。有次我在一个站里接了20台后台,结果保护装置直接罢工了。后来查手册才发现,那台装置最多支持8个MMS关联。
  • 报文超时:MMS请求如果没收到响应,客户端会重发。但重发间隔和次数如果设置不当,会导致网络风暴。我建议把超时时间设在5-10秒,重试次数不超过3次。
  • 数据类型匹配:MMS支持多种数据类型(整数、浮点、布尔、字符串等)。读写数据时,两边的数据类型必须一致。我曾经遇到过把32位浮点数当16位整数读的情况,结果读出来的值完全不对。

4.5 MMS与GOOSE/SV的区别

很多新手会问:MMS和GOOSE、SV有什么区别?我简单说一下:

特性 MMS GOOSE SV
通信模式 客户端-服务器(请求/响应) 发布者-订阅者(多播) 发布者-订阅者(多播)
实时性 中等(毫秒级) 高(微秒级) 极高(微秒级)
典型用途 后台监控、定值读写、报告 跳闸信号、联闭锁 采样值传输(电流、电压波形)
可靠性机制 TCP重传、确认机制 重发机制(无确认) 重发机制(无确认)

说白了,MMS适合不要求极速但要求可靠的场景。比如后台监控读个遥测值,晚几百毫秒问题不大,但数据不能丢。而GOOSE和SV适合要求极速但可以容忍偶尔丢包的场景。比如跳闸信号,必须1毫秒内送到,丢一包没关系,下一包马上就到。

4.6 一张图看懂MMS在IEC61850中的位置

下面这张图是我自己画的,帮你理清MMS在整个协议栈里的位置:

IEC61850协议栈与MMS角色 应用功能层 GOOSE | SV | 报告 | 控制 | 定值读写 表示层(ASN.1编码) BER编码/解码 | 抽象语法标记 ★ MMS协议层(核心) 读/写/报告 | 变量访问 | 域管理 | 文件传输 OSI会话层 + 表示层 TCP/IP协议栈(RFC 1006) MMS报文 封装在此 MMS是IEC61850的“通信翻译官”,负责将电力数据标准化后通过TCP/IP传输

我的个人建议:学习MMS,不要一开始就扎进ASN.1编码细节里。先理解它的通信模型(客户端-服务器)和核心服务(读、写、报告)。等你把这两个概念吃透了,再去研究报文编码,会轻松很多。

好了,关于MMS的基础就聊到这里。记住一句话:MMS是IEC61850的“脊梁骨”,所有非实时性的数据交互,几乎都靠它完成。下一节我们会深入MMS的报文结构,手把手教你拆解一个真实的MMS报文。


公众号:蓝海资料掘金营,微信deep3321