智能变电站协议系列-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/529584

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作