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

本文主要是介绍智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、前言
    • 二、资料准备
    • 三、智能变电站自动化系统架构
    • 四、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协议。
image.png
在配电过程中,数字化变电站包括三个级别(基于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/libiec61850
libiec61850 是实现 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

编译成功如下:
image.png

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

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

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

image.png

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

image.png

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

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

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

选择对应网卡,比如我这里 的goose通信的网卡为ens33:
image.png
过滤一下goose:
image.png
再具体一些,代码中设置的目的mac地址、appid等都可以看出来:
image.png

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 installcd build
cmake -DCMAKE_TOOLCHAIN_FILE=../aarch64_linux_setup.cmake -DCMAKE_INSTALL_PREFIX=~/workdir/aarch64/libiec61850 ..
make clean && make && make install

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

#!/bin/bashcd build
cmake ..
make clean && make && make installcmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake -DCMAKE_INSTALL_PREFIX=~/workdir/arm/libiec61850 ..
make clean && make && make installcmake -DCMAKE_TOOLCHAIN_FILE=../aarch64_linux_setup.cmake -DCMAKE_INSTALL_PREFIX=~/workdir/aarch64/libiec61850 ..
make clean && make && make install

六、最后

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

这篇关于智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/529585

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方