首页 > 其他分享 >智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)

时间:2023-12-26 13:34:41浏览次数:45  
标签:协议 示例 make 变电站 MMS SV GOOSE



文章目录

  • 一、前言
  • 二、资料准备
  • 三、智能变电站自动化系统架构
  • 四、GOOSE、MMS、SV协议以及其他协议
  • 1、GOOSE(通用面向对象变电站事件)协议
  • 2、MMS(制造消息规范)协议
  • 3、采样值 (SV) 协议
  • 4、数字化变电站中使用的其他协议
  • 遗留协议
  • 五、IEC61580的开源C库GOOSE协议示例运行问题
  • 1、协议栈选择
  • 2、开源库编译及运行示例
  • 3、GOOSE示例运行问题(建议虚拟机下设置双网卡连接两个网卡环境进行比对测试)
  • 4、GOOSE协议抓包及报文分析
  • 5、交叉编译armv8l和aarch64环境下的库(补充)
  • 六、最后


一、前言

目前有一个新的研究,关于电网使用的GOOSE、SV、MMS协议,并使用相关库来做一下测试。由于goose、sv、mms等都属于IEC61850,因此,需要对IEC61850相关内容有一些了解,都是国际标准,属于电气自动化的一部分,对于自动化或者电气相关领域有接触的专业应该或多或少有一些了解。IEC61850目标是用于变电站自动化、分布式能源、水力和天然气发电厂、风力发电厂、电动汽车作为分布式能源等领域,目前似乎在变电站自动化方面的推广和使用更加广泛。

二、资料准备

IEC61850介绍:https://en.wikipedia.org/wiki/IEC_61850

https://en.wikipedia.org/wiki/List_of_IEC_standards
https://iec61850.dvl.iec.ch/GOOSE、SV、MMS在数字变电站中的作用:https://www.sgrwin.com/goose-mms-and-sv-protocols/IEC61850的C库:https://github.com/mz-automation/libiec61850

三、智能变电站自动化系统架构

其中GOOSE、SV、MMS在数字变电站中的作用一文详细描述了智能电子设备(IDE)与控制系统的协调和互操作性的协议,也就是GOOSE、SV、MMS,也帮助我们站在智能变电站自动化系统架构的视野上来了解GOOSE、SV、MMS协议。

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)_github


在配电过程中,数字化变电站包括三个级别(基于IEC 61850),每个级别使用不同的设备来服务于特定目的。

  • “过程层”包括一次配电设备,例如断路器、母线和变压器。
  • “间隔层”包括与主设备连接的辅助设备,例如 IED。IED 是基于微处理器的智能保护、控制和通信设备。它们收集传感器数据、分析数据并与系统上的其他设备进行通信。
  • 另一方面,“站层”由构成变电站控制系统的设备组成。它包括数据采集与监控系统(SCADA) 和人机界面 (HMI)。HMI 提供了变电站设备的简化视图,使操作员能够监视和控制设备。

连接这些设备的通信网络可以是基于以太网、由光纤电缆和 UTP 电缆组成的网络,也可以是无线通信系统。
数字化变电站是电力系统基础设施的游戏规则改变者。他们利用 IED 提供增强诊断、降低维护成本和提高自动化等优势。

四、GOOSE、MMS、SV协议以及其他协议

1、GOOSE(通用面向对象变电站事件)协议

通用面向对象变电站事件 (GOOSE) 协议是数字变电站中常用的实时事件交换通信协议。该协议旨在实现快速可靠的点对点通信,同时满足严格的电力系统控制和自动化要求。
GOOSE 利用发布者-订阅者模型,其中涉及一个 IED 作为发布者,将事件消息(称为 GOOSE 消息)传输到变电站网络内感兴趣的 IED。订阅者被称为接收者 IED。
GOOSE 的一个主要优点是能够快速可靠地传输信息。它通过利用基于组播的通信来实现这一点,该通信允许将单个 GOOSE 消息同时有效地传输到多个订阅者。
该协议还实现了高优先级、时间关键的交付机制。这种传送机制采用同步技术来确保整个网络的事件时间戳准确且同步。

2、MMS(制造消息规范)协议

制造消息规范协议促进 IED 和远程终端单元 (RTU) 等更高级别元件之间的标准化和安全信息交换。该协议提供的标准化框架允许来自不同制造商的设备的集成和互操作性。
MMS 使用通用信息模型 (CIM) 来定义变电站内使用的通用语言来表示系统信息。该模型由一组促进对数据的共同理解的元素、行为和属性组成。
安全通信是 MMS 提供的一项关键功能。该协议实现了加密算法、数字签名和其他安全机制,以确保变电站数据免受未经授权的访问或篡改。

3、采样值 (SV) 协议

采样值 (SV) 协议是数字变电站中常用的关键协议,用于将高速、实时模拟和数字采样值从 IED 传播到变电站网络内的其他设备。
该协议通过传输带有时间戳的采样值,在维持变电站内设备间数据同步方面发挥着至关重要的作用。同步可确保来自不同设备的测量样本在时间上对齐并准确地表示同一时间点。
其高数据传输速率允许快速交换采样值,这对于以最小的延迟捕获和响应瞬态事件或故障至关重要。

4、数字化变电站中使用的其他协议

虽然 GOOSE、MMS 和 SV 是数字化变电站不可或缺的一部分,但通常还采用一些附加通信协议。

  • **IEC 60870-5-101/104:**该协议支持 IED 和控制中心之间的可靠通信,以支持变电站自动化。
  • DNP3(分布式网络协议): DNP3 为 SCADA 系统提供安全、高效且稳健的通信。它提供主站和分站之间的无缝数据交换,实现实时监测、控制和数据采集。
  • ICCP(控制中心间通信协议): ICCP 促进多个控制中心之间的安全可靠的通信。使用该协议,这些中心可以交换实时数据,例如系统状况、测量结果和控制命令。
遗留协议

虽然上述现代协议是数字化变电站的首选替代方案,但IEC 60870-5-104(通常称为 IEC 104)IEC 60870-5-101(通常称为 IEC 101)和 Modbus 等传统协议仍然很流行在行业中。
这些协议开发较早,可能缺乏现代协议的先进功能和安全机制。然而,由于现有基础设施、兼容性限制或成本考虑等问题,许多公司继续使用它们。
新协议和旧协议的共存带来了阻碍数字变电站有效集成和互操作性的挑战。这一挑战揭示了能够无缝处理多种传统和现代协议、确保跨各种设备和系统的高效通信和互操作性的解决方案的重要性。

五、IEC61580的开源C库GOOSE协议示例运行问题

1、协议栈选择

从这篇文章看不同国家使用的协议栈可能有一些区别:
https://zhuanlan.zhihu.com/p/402692108目前我自己研究是基于开源的libiec61850:https://github.com/mz-automation/libiec61850libiec61850 是实现 MMS、GOOSE 和 SV 协议的 IEC 61850 客户端和服务器库的开源 (GPLv3) 实现。它是用 C 语言实现的(根据 C99 标准)以提供最大的可移植性。它可用于在运行 Linux、Windows 和 MacOS 的嵌入式系统和 PC 上实施符合 IEC 61850 的客户端和服务器应用程序。其中包括一组简单的示例应用程序,可用作实现自己的 IEC 61850 兼容设备或与 IEC 61850 设备通信的起点。该库已成功应用于许多商业软件产品和设备。

2、开源库编译及运行示例

如下为下载及编译的过程,基本没有啥坑,主要是后续运行有一些坑:

#可以使用一些github加速网站去加速一下
git clone https://github.com/mz-automation/libiec61850.git
cd libiec61850/
#正常编译安装
sudo -s
mkdir build && cd build
cmake ..
make
make install

编译成功如下:

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)_v8_02

3、GOOSE示例运行问题(建议虚拟机下设置双网卡连接两个网卡环境进行比对测试)

运行时像一些常规协议本地测试时发现订阅发布之后,订阅一直收不到内容,后续在issue上找到了答案,主要是下面这两点:
https://github.com/mz-automation/libiec61850/issues/313https://github.com/mz-automation/libiec61850/issues/61

  • (1)本地localhost测试时pub和sub只能使用lo网卡接口,不能使用其它网卡接口,比如默认的eth0是不可以发布和订阅一起用的,一般需要跨设备去测试;

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)_linux_03

  • (2)局域网下测试发布端和订阅端设备需要为同一路由下,跨路由应该不行(至少我自己尝试下来是这样),也就是说不能适用于局域网对公网这种情况,需要局域网部署;

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)_github_04

4、GOOSE协议抓包及报文分析

针对报文的分析主要参考的这里:Goose报文在网络上传输时采用的是OSI模型,但只用到OSI网络模型七层中的四层,应用层、表示层、数据链路层和物理层,传输层和网络层为空。应用层定义协议数据单元PDU,经过表示层编码后,不采用TCP/IP协议,而是直接映射到数据链路层和物理层。这种映射方式的目的是避免通信堆栈造成传输延时,从而保证报文传输、处理的快速性。

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)_github_05

#虚拟机安装wireshark
sudo apt install wireshark-qt
#运行wireahrk
sudo -s
wireshark

选择对应网卡,比如我这里 的goose通信的网卡为ens33:

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)_智能变电站_06


过滤一下goose:

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)_电网协议_07


再具体一些,代码中设置的目的mac地址、appid等都可以看出来:

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)_linux_08

5、交叉编译armv8l和aarch64环境下的库(补充)

arm_linux_setup.cmake:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(tools /usr/local/gcc-linaro-7.5.0-2019.12-x86_64_armv8l-linux-gnueabihf)
set(CMAKE_C_COMPILER ${tools}/bin/armv8l-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/armv8l-linux-gnueabihf-g++)

aarch64_linux_setup.cmake:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(tools /usr/local/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu)
set(CMAKE_C_COMPILER ${tools}/bin/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/aarch64-linux-gnu-g++)

命令行编译:

cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake -DCMAKE_INSTALL_PREFIX=~/workdir/arm/libiec61850 ..
make clean && make && make install

cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../aarch64_linux_setup.cmake -DCMAKE_INSTALL_PREFIX=~/workdir/aarch64/libiec61850 ..
make clean && make && make install

可以写成简单的build.sh从而一键编译安装全平台:

#!/bin/bash

cd build
cmake ..
make clean && make && make install

cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake -DCMAKE_INSTALL_PREFIX=~/workdir/arm/libiec61850 ..
make clean && make && make install

cmake -DCMAKE_TOOLCHAIN_FILE=../aarch64_linux_setup.cmake -DCMAKE_INSTALL_PREFIX=~/workdir/aarch64/libiec61850 ..
make clean && make && make install

六、最后

从目前接触GOOSE协议来看,存在基于UDP以及TCP协议的GOOSE协议方案,使其具备基于5G传输控制的可行性,接下来来运行SV协议示例并进行测试并简单分析。


标签:协议,示例,make,变电站,MMS,SV,GOOSE
From: https://blog.51cto.com/xiaoyaoyou10/8981894

相关文章

  • 【flink番外篇】6、flink的WaterMark(介绍、基本使用、kafka的水印以及超出最大允许延
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • Halcon 5分钟学会9点标定 带图片示例、示例源码
    9点标定应用流程如果没有9个点,其实只需要一个点就可以,移动机械手,只需将这个点在视野内不同坐标即可,前置条件,相机焦距,视野固定高度和角度,光源光强度固定。移动机械手,使用螺丝批头,在视野范围内的白纸上,点九个点,记录每个点位的位置,每个点位的顺序要和图像上获取的圆心数组顺序一致,此时......
  • C# IOC注入示例
    文章目录主函数`常规注入``属性注入``方法注入`主函数usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingUnity;namespaceIOCTest{internalclassProgram{staticvoidMain(......
  • 数据库 Mysql 多表查询,left join联合两个sql示例
    SELECTt1.RowID,t1.UserID,t1.CreateDate,t1.BatchState,t2.InputDataCount,t1.QtyFROM(SELECT@curRow:=@curRow+1ASRowID,`UserID`,DATE_FORMAT(CreateDate,'%Y-%m-%d')ASCreateDate,......
  • 【flink番外篇】5、flink的window(介绍、分类、函数及Tumbling、Sliding、session窗口
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • 利用Prompt学习更多示例,提高大模型性能
    随着人工智能技术的不断发展,大型语言模型(如GPT-3、BERT等)在自然语言处理领域的应用越来越广泛。然而,这些模型通常需要大量的训练数据才能达到较高的性能。为了解决这个问题,一种有效的方法是使用prompt学习,即通过向模型提供示例来引导其生成输出。在prompt学习中,关键在于如何选择和......
  • FineReport 11.0参数查询入门示例操作记录
    参数的主要作用是实现用户与数据的实时交互,即进行数据的过滤。我们可以在很多情况下使用参数,比如在单元格中引用参数来实现动态标题、根据参数值的不同显示不同值等等。如下图所示:links:https://help.fanruan.com/finereport/doc-view-166.html?source=0&from=base......
  • 【Python常用模块之logging模块】---日志输出功能(示例代码)
    title:【Python常用模块之logging模块】---日志输出功能(示例代码)date:2023-12-2420:14:06updated:2023-12-2420:23:00description:【Python常用模块之logging模块】---日志输出功能(示例代码)cover:https://pythonjishu.com/tdcgatffvrvdoop/2023年6月......
  • 【flink番外篇】4、flink的sink(内置、mysql、kafka、redis、clickhouse、分布式缓存、
    文章目录Flink系列文章一、maven依赖二、Jdbc/mysql示例1、maven依赖2、实现1)、userbean2)、内部匿名类实现3)、lambda实现4)、普通继承RichSinkFunction实现5)、完整代码3、验证本文介绍了Flink将数据sink到mysql中,其实是通过jdbc来将数据sink到rmdb中,mysql是一个常见的数据库,故......
  • AntDesignBlazor示例——Modal表单
    本示例是AntDesignBlazor的入门示例,在学习的同时分享出来,以供新手参考。示例代码仓库:https://gitee.com/known/BlazorDemo1.学习目标创建Modal表单编辑数据创建Table操作列2.创建Modal表单1)新增按钮和Modal组件打开天气页面Weather.razor文件,按照如下步骤添加新增按钮......