手把手实现变电站61850模型MMS开发

时间:2024-02-17 10:37:28


智能变电站为什么非要用61850协议

在电力网络高速发展的过去这些年,我国兴建了大批智能变电站,而智能变电站的核心就是信息系统的标准化、统一化,以减少使用电缆和通过移动领域的劳动力把项目执行时间降至最低,由国际电工组织主编的IEC61850通信标准符合信息标准化的特点,且具有国际通用性,在智能变电站中大量推广(不排除个别站仍然使用104协议)。IEC61850规范化了系统和工程管理、功能描述及设备模型、通信要求、通信一致性要求等,对变电站内一次侧、二次侧的生产控制和信息管理有详尽的技术规范要求。

变电站通信架构

变电站中对系统进行了站控层、间隔层和过程层分层管理,在不同层级的61850通信模型也不一样,一般站控层使用MMS(Manufacturing Message Specification)、过程层与间隔层使用SV(Sampled Value Transmission IED设备采样值报文)和GOOSE(Generic Object Oriented Substation Event 面向通用对象的变电站事件报文,IED设备间通用报文),如下图所示。

 

61850协议

协议实现介绍

IEC61850标准中规范了描述一次系统主接线的 SSD(Substation Specification Description 变电站主接线描述)文件、一次主接线图纸和二次系统的 SCD(Substation Configuration Description 变电站配置描述)文件、二次网络中的 MMS报文、GOOSE 报文、SV 报文、ICD(IED Capacity Description 设备功能描述文件)以及CID(IED Configured Description IED 设备的配置描述),其中CID文件只是SCD文件的子集(CID内容可以在SCD中找到),CID文件就是IED设备创建的抽象模型,也是设备制造厂家需要向变电站提供的配置文件。

IED抽象模型ICD

SCD和ICD都是基于SCL(Substation Configuration Language)语言的XML文件,ICD只是SCD的子集,站控层在收到IED设备上报的数据和通过查询SCD表可以知道上报数据的物理意义。ICD文件中的内容简单介绍如下图(xml中的标签太多,太复杂,不做详细介绍)。

 

libiec61850开源库

libiec61850是github开源免费的c代码库,支持ICD文件的动态和静态生成,模型c代码转换,MMS(server和client)/SV/GOOSE消息报告,各种线程、网络socket封包,以及丰富的api接口可调用、丰富的example可参考,readme详细说明了在windows和linux平台生成可执行文件的具体方法。总之,很好很强大,谁用谁知道!

从0开始创建MMS模型SERVER

我们用c做一个完整windows10平台61850中MMS服务器端静态模型程序。

案例分析:某站变压器A相安装了电压测量IED装置,要求实时上传当前电压值指站端平台,此时控制室有厂家的数据集中器(服务器),由集中器统一上报电压值,那么厂家需要为安装的电压监测装置创建模型ICD,并将模型编译进服务器后端程序,站端得到ICD后可以查询服务器实时更新的电压值信息。

开发前环境准备(我的环境)

libiec61850源代码下载,https://github.com/mz-automation/libiec61850,放在本地D盘根目录,并在libiec61850根目录下创建一个build文件夹;

JRE安装,我的版本是10.0.1,https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html

VS2015安装,更高版本的VS需要改CMake的命令,可自行查询;

CMake安装,用于将源码生成VS工程,我的版本是3.16.2,https://cmake.org/download/,安装完成后运行cmd命令窗口,进入D盘的libiec61850文件夹中的build文件夹,输入命令cmake -G "Visual Studio 14 2015 Win64" ..,在build文件夹中生成VS2015的工程(注意命令后面的..不要漏掉了),用VS打开此工程就可以查看、编译所有源码了;

安装IEDScout,作为Client连接Server使用,官方提供有测试版本,我的版本是4.20,https://www.omicronenergy.com.cn/products/iedscout/

安装XMLSpy,编辑ICD使用,https://www.altova.com/xmlspy-xml-editor

创建模型

常用创建ICD的工具为XMLSpy,结合案例分析,我们创建1个与相别无关的测量逻辑节点,ICD文件命名为TestModel.icd,如下图所示,MMXN01即为监测A相电压的逻辑节点。

编译模型

拷贝ICD文件至文件夹D:\libiec61850-1.4\tools\model_generator中,启动cmd窗口,进入上述文件夹目录,执行命令java -jar genmodel.jar TestModel.icd,会生成static_model.c和static_model.h两个文件,本例子是基于源码中的server_example_simple例子更改的,所以需要将static_model.c和static_model.h拷贝到server_example_simple的工程文件夹中,并将D:\libiec61850-1.4\build\src\Debug里面的iec61850.dll拷贝至server_example_simple的debug文件夹中。好了,环境都配好了,开始编写业务代码!

模型SERVER端编业务代码

修改server_sample_simple.c文件中的代码,实现每间隔5秒更新一次电压值和时间,代码如下图所示。

编写完代码后,执行VS的build,找到exe启动server,启动后就是个黑框,什么都没有,接下来我们通过ICD去连接server,获取数据。

SERVER模型连接测试

双击我们的TestModel.icd文件,默认会使用IEDScout打开,点击Browser中的Online,连接成功后点击ReadAll,就可以看到读回来的数据了,Over!

结束语

61850在未来绝对是在线监测系统必备的通信协议,不带61850的系统被称为“黑户”,领导检查时系统会被“切掉”,导致监测中断,国网对数据的实时监测不断提高要求,数据进内网是厂家必须具备的基本功能。

转载请备注出处!!!!!!