文章目录
- 一、前言
- 二、资料准备
- 三、智能变电站自动化系统架构
- 四、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协议。
在配电过程中,数字化变电站包括三个级别(基于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
编译成功如下:
3、GOOSE示例运行问题(建议虚拟机下设置双网卡连接两个网卡环境进行比对测试)
运行时像一些常规协议本地测试时发现订阅发布之后,订阅一直收不到内容,后续在issue上找到了答案,主要是下面这两点:
https://github.com/mz-automation/libiec61850/issues/313https://github.com/mz-automation/libiec61850/issues/61
- (1)本地localhost测试时pub和sub只能使用lo网卡接口,不能使用其它网卡接口,比如默认的eth0是不可以发布和订阅一起用的,一般需要跨设备去测试;
- (2)局域网下测试发布端和订阅端设备需要为同一路由下,跨路由应该不行(至少我自己尝试下来是这样),也就是说不能适用于局域网对公网这种情况,需要局域网部署;
4、GOOSE协议抓包及报文分析
针对报文的分析主要参考的这里:Goose报文在网络上传输时采用的是OSI模型,但只用到OSI网络模型七层中的四层,应用层、表示层、数据链路层和物理层,传输层和网络层为空。应用层定义协议数据单元PDU,经过表示层编码后,不采用TCP/IP协议,而是直接映射到数据链路层和物理层。这种映射方式的目的是避免通信堆栈造成传输延时,从而保证报文传输、处理的快速性。
#虚拟机安装wireshark
sudo apt install wireshark-qt
#运行wireahrk
sudo -s
wireshark
选择对应网卡,比如我这里 的goose通信的网卡为ens33:
过滤一下goose:
再具体一些,代码中设置的目的mac地址、appid等都可以看出来:
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协议示例并进行测试并简单分析。