4. MMS 报文与联调操作

在变电站保护测控装置的通信联调中,MMS(Manufacturing Message Specification,制造报文规范)是站控层与间隔层之间最核心的应用层协议。IEC 61850 将 MMS 作为抽象通信服务接口(ACSI)到具体报文的映射载体,装置上送的遥测、遥信、告警,以及后台下发的遥控、定值读写、报告订阅,最终都落在 MMS 的请求/响应与报告报文上。理解 MMS 的连接建立、读写服务、报告订阅和异常中断排查,是联调从"能通"走向"可信"的关键。

一、MMS 连接建立:从 TCP 到关联

MMS 运行在 TCP/IP 之上,默认端口 102。联调时,后台(客户端)与装置(服务端)之间要经过三层握手:TCP 三次握手建立传输通道;随后进行 ISO 会话/表示层的协商;最后通过 Initiate-Request / Initiate-Response 完成 MMS 关联(Association)建立。关联建立时双方会交换 AP Title、AE Qualifier、协议版本、服务支持列表以及最大 PDU 长度等参数。

实际联调中,若后台显示"装置离线",第一步不是急着改配置,而是分层定位:先用 ping 确认 IP 可达,再用 telnet 装置IP 102 或 nc -vz 装置IP 102 确认 102 端口开放。若 TCP 能通但关联失败,常见原因是 AP Title 或 AE Qualifier 与装置 ICD 模型不一致、装置未使能该客户端的访问权限、或最大 PDU 协商失败。此时抓包会看到 Initiate-Request 后紧跟 Abort 或 Initiate-Error,而不是正常的 Initiate-Response。

二、读写服务:GetNameList、Read、Write

关联建立后,后台通常先发 GetNameList 获取逻辑设备(LD)、逻辑节点(LN)和数据对象列表,用于构建点表。随后用 Read 读取数据属性值,用 Write 写入定值、压板等可写对象。MMS 的 Read/Write 以对象引用(Object Reference)定位,例如 IED1PROT/LLN0.Mod.stVal、IED1PROT/PTOC1.StrVal.setMag.f。

联调中读写服务最容易出问题的是"能读不能写"。原因通常有三类:一是对象本身为只读(如 stVal、mag 等测量值),二是写操作需要先通过 Select 选择再 Operate 执行(遥控类),三是装置侧对写权限做了 SBO(Select Before Operate)或增强安全校验。排查时应先确认对象 FC(功能约束)是 ST、MX 还是 CO、SP,再核对装置的点表权限定义。

三、报告订阅:BRCB 与 URCB

报告(Report)是 MMS 联调中数据上送的主要方式,分为缓存报告控制块 BRCB 和非缓存报告控制块 URCB。BRCB 用于遥信变位、保护动作等不允许丢失的数据,URCB 用于遥测等周期性数据。订阅流程为:后台读取 RCB 的 RptEna、DatSet、TrgOps、OptFlds、BufTm 等属性,写入 DatSet 指向数据集,再写 RptEna = TRUE 使能报告。

联调时若"报告不上送",要依次检查:数据集是否已定义且成员正确、TrgOps 是否包含所需的触发条件(dchg 数据变化、qchg 品质变化、dupd 数据更新、integrity 周期)、BufTm 是否过大导致合并延迟、以及 BRCB 的 EntryID 是否因缓存溢出而需要重新使能。抓包中正常的报告是 InformationReport,若只看到 Write RptEna 的响应而没有后续报告,多半是数据集或触发条件配置不当。

MMS 联调报文交互与异常定位 后台 / 客户端 TCP 102 AP Title / AE Qual GetNameList Read / Write Select / Operate Write RptEna InformationReport Abort / Release 保护测控装置 MMS 服务端 LD / LN / DO 数据集 DataSet BRCB / URCB TrgOps / BufTm EntryID 缓存 SBO 权限校验 FC: ST/MX/CO/SP ① TCP 握手 + Initiate-Request Initiate-Response(关联建立) ② GetNameList / Read / Write Read-Response / Write-Response ③ Write RptEna=TRUE / DatSet InformationReport(dchg/qchg) ④ 异常:Abort / 无响应 / 报告中断 异常定位顺序: ping → 102 端口 → Initiate 参数 → 对象引用/FC → 数据集/TrgOps → EntryID/缓存 → SBO 权限 抓包关键:Initiate-Response 是否出现、InformationReport 是否持续、Abort 的 reason 字段

四、异常中断排查:从现象到根因

MMS 联调中的异常中断大致分四类:连接类、服务类、报告类和资源类。连接类表现为关联建立失败或运行中 Abort,常见于网络抖动、装置重启、AP Title 不匹配;服务类表现为 Read/Write 返回 ServiceError 或 AccessError,多因对象引用错误、FC 不匹配或权限不足;报告类表现为报告停止上送或 EntryID 失效,需检查 BRCB 缓存是否溢出、数据集是否被重新绑定;资源类表现为装置 CPU 或通信负载过高导致响应超时,需核对报告数量与 BufTm 设置。

排查时建议按"抓包—分层—对照模型"三步走。抓包工具推荐 Wireshark,过滤表达式可用 mms 或 tcp.port == 102。看到 Initiate-Request 后没有 Initiate-Response,说明关联层被拒;看到 Read-Request 后返回 Error,说明对象或权限有问题;看到 Write RptEna 成功但无 InformationReport,说明数据集或触发条件配置不当。对照 ICD/SCD 模型逐项核对对象引用、FC、数据集成员,是定位根因最可靠的方法。

联调小技巧:在装置侧开启 MMS 报文日志或使用后台的"通信诊断"功能,可以同时看到请求与响应的时间戳,便于判断是网络延迟、装置处理慢还是客户端未发请求。

五、联调检查要点

阶段关键检查项正常判据
连接建立IP 可达、102 端口、AP Title、AE Qualifier收到 Initiate-Response,关联状态为已连接
读写服务对象引用、FC、SBO 权限Read 返回有效值,Write 返回成功
报告订阅DatSet、TrgOps、BufTm、RptEna变化时持续收到 InformationReport
异常中断Abort reason、EntryID、缓存溢出无异常 Abort,报告不丢失

MMS 联调的本质,是把抽象的服务模型落到具体的报文交互上。只有把连接、读写、报告、异常四条线都走通,并能在抓包中准确识别每一步的请求与响应,才能真正判断装置通信是否可信。联调不是"点一下能通就行",而是要在异常出现时,能沿着报文链路快速定位到具体环节。