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

相关文章

利用c++判断水仙花数并输出示例代码

《利用c++判断水仙花数并输出示例代码》水仙花数是指一个三位数,其各位数字的立方和恰好等于该数本身,:本文主要介绍利用c++判断水仙花数并输出的相关资料,文中通过代码介绍的非常详细,需要的朋友可以... 以下是使用C++实现的相同逻辑代码:#include <IOStream>#include <vec

SQL Server 中的表进行行转列场景示例

《SQLServer中的表进行行转列场景示例》本文详细介绍了SQLServer行转列(Pivot)的三种常用写法,包括固定列名、条件聚合和动态列名,文章还提供了实际示例、动态列数处理、性能优化建议... 目录一、常见场景示例二、写法 1:PIVOT(固定列名)三、写法 2:条件聚合(CASE WHEN)四、

Java 接口定义变量的示例代码

《Java接口定义变量的示例代码》文章介绍了Java接口中的变量和方法,接口中的变量必须是publicstaticfinal的,用于定义常量,而方法默认是publicabstract的,必须由实现类... 在 Java 中,接口是一种抽象类型,用于定义类必须实现的方法。接口可以包含常量和方法,但不能包含实例

JAVA Calendar设置上个月时,日期不存在或错误提示问题及解决

《JAVACalendar设置上个月时,日期不存在或错误提示问题及解决》在使用Java的Calendar类设置上个月的日期时,如果遇到不存在的日期(如4月31日),默认会自动调整到下个月的相应日期(... 目录Java Calendar设置上个月时,日期不存在或错误提示java进行日期计算时如果出现不存在的

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

Nginx错误拦截转发 error_page的问题解决

《Nginx错误拦截转发error_page的问题解决》Nginx通过配置错误页面和请求处理机制,可以在请求失败时展示自定义错误页面,提升用户体验,下面就来介绍一下Nginx错误拦截转发error_... 目录1. 准备自定义错误页面2. 配置 Nginx 错误页面基础配置示例:3. 关键配置说明4. 生效

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

Mybatis的mapper文件中#和$的区别示例解析

《Mybatis的mapper文件中#和$的区别示例解析》MyBatis的mapper文件中,#{}和${}是两种参数占位符,核心差异在于参数解析方式、SQL注入风险、适用场景,以下从底层原理、使用场... 目录MyBATis 中 mapper 文件里 #{} 与 ${} 的核心区别一、核心区别对比表二、底

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格