接上上文,板上运行提示缺少某些库,可能是因为交叉编译工具版本太高了。后续使用vitis自带的交叉编译工具编译,然后放入Xilinx开发板运行成功。

EMS,即能源管理系统,是储能“3s”之一。设计和制造一个储能EMS系统需要考虑包括系统架构设计、功能需求、软件开发、硬件选型等多个方面:

  1. 需求分析:确定系统的功能需求和性能指标,包括对储能系统的监测、控制、优化等方面的需求,同时考虑系统的可扩展性和适应性;
  2. 架构设计:设计系统的整体架构,包括前端数据采集、后端数据处理、控制算法、用户界面等部分的组成结构,确定系统各模块之间的交互和通信方式;
  3. 软件开发:开发系统的软件部分,包括数据采集、数据处理、控制算法、用户界面等功能模块的开发;
  4. 硬件选型:选择合适的硬件设备,包括传感器、控制器、通信设备等,确保硬件设备能够满足系统的性能和功能要求,并与软件系统相兼容;
  5. 测试部署:验证系统的功能和性能是否符合设计要求,确保各个模块之间的协调运行和数据的准确性,再部署到实际的储能系统中,进行现场调试和优化。

目前行业内做EMS开发的公司有杭州高特、杭州协能、山东德联和研华等公司。博主本人是做嵌入式开发出身,莫名其妙进入储能行业后第一个项目就是EMS。在第一步时就十分懵逼:以前都是实现某项功能、完成某个成果才算工作量,不理解为什么这类工作搜集材料整理个需求文档就算完成工作了?挣扎了大半年之后好像对这种解决方案类的工作有一些理解了,努力尝试“以系统的整体架构入手去思考问题”。

第一步需求分析,这一步要做的工作就是根据电站设计的指标和需求整理一堆excel和Visio文档,一般是要有多年经验的老员工才能干,半转行的应届生一般干不了。

第二步架构设计,以一个五层结构的EMS系统为例,从下到上可以是:硬件层(PC)、操作系统层(Linux,Windows)、支撑平台层(数据库、网络通信)、数学建模层(预测模型、系统模型等)及应用软件层(SCADA、应用软件)。需要完成全系统的功能分解及信息流规划,模块间通信协议、接口及线缆种类、规格等。

前端数据采集,包括光伏、风力、储能电芯、电网及负荷、PCS等模块的数据。采集后实时显示在用户界面,并使用这些数据进行系统状态估计、控制保护及实现所需其他功能(如自动发电控制、负荷预测、发电预测与经济调度等)。

模块内的通信方式以串行通信(IIC\SPI)和CAN通信为主,模块之间则以61850,modbus,104等协议为主。

第三步软件开发的工作量十分庞大,一般由专业的EMS完成底层代码开发,用户进行二次开发。

第四步类似一、二步,需要对整个系统以及常用的硬件设备非常熟悉才能干的了。

最后一步,整体测试验证、项目落地运行。

以上这些啰啰嗦嗦,讲了一堆宏观的内容,但是到了实际工作分配后,却不知道第一步要干什么。以前是做嵌入式的,实在不想去搞项目管理,还是想把工作内容与软件开发结合起来。考虑到现实情况能做的实在太少,上网查了几篇论文,看了几篇博客,发现有个开源的通信工程代码libiec61850,还有详细的文档介绍。于是下载了源码学习了一下,顺便移植到Xilinx开发板上运行,与上位机联调。

IEC61850

登录网站libiec61850.com,下载源码到本地。

工程可以在Windows、Linux下运行,包括x86及ARM架构,可以和IEDScout通信。网站上有介绍文档和API说明。在Linux虚拟机内编译后,选择client_example2和server_example_goose。进入.c文件后,修改网络接口名称、IP地址和mac地址,保存编译,然后以sudo运行server和client。可以看到服务端与客户端分别输出如下:



可以看到服务端和客户端正常运行。客户端展示了如何访问一个未知设备上的数据模型,这个数据模型在服务端文件夹内的cid文件中。这是61850的IED 模型配置文件,下面来仔细解读一下这个文件。

cid文件

读懂这个文件需要一定的XML语法知识,可以参考61850-6文档。打开文件,将其分为三部分解读。

1、通信配置

第5~36行communication部分是文件的通信配置部分。communication下是子网和接入点部分,其中接入点处定义了IED名称和接入点名称,在后面部分会用到。

接入点下的address设置IP地址、子网掩码和网关。

OSI-TSEL:表示 OSI 模型中的 TSEL(Transport Service Access Point Selector)为 0001,用于在传输层标识服务访问点。

OSI-PSEL:表示 OSI 模型中的 PSEL(Presentation Service Access Point Selector)为 00000001,用于在表示层标识服务访问点。

OSI-SSEL:表示 OSI 模型中的 SSEL(Session Service Access Point Selector)为 0001,用于在会话层标识服务访问点。

GSE表示 GSE 实例的 ldInst 为 "GenericIO",cbName 为 "gcbEvents",分别指定了逻辑设备名称和控制块名称。Address为地址信息,MinTime和MaxTime一般为毫秒。

2、IED

Services部分描述了服务端IED实例支持的服务。

AccessPoint是通信配置部分出现过的接入点,里面包含来一个LDevice逻辑设备GenericIO,逻辑设备内部有三个逻辑节点,分别是LN0、LPHD和GGIO。

LN0内部定义了四个数据集DataSet,两个报告控制块ReportControl,两个GSEControl和一个数据对象DO。

DataSet(数据集):用于定义一组数据对象,这些数据对象通常包含监测点、测量值、状态等信息。可用于定义需要传输的数据集合,以便在电力系统中进行监测、控制和管理。

ReportControl(报告控制):用于定义报告生成和传输的控制参数,包括报告生成周期、报告传输方式、报告对象等。可以用于配置系统生成和传输报告的行为,以便及时获取系统状态和事件信息。

GSEControl(GSE控制):用于控制 GSE(Generic Substation Events)数据的生成和传输,包括 GSE 数据的采集周期、传输方式、优先级等。可以用于配置 GSE 数据的采集和传输参数,以便及时获取系统中的事件信息。

GGIO内部定义了一个Mod和四个SPCSO。SPCSO代表generic single point controllable status output是否使能,ctlModel均为direct-with-normal-security。关于这个值的具体含义可以参考61850-7-2。

3、数据类型模板

最后一部分是DataTypeTemplates,在这里定义的模板才能被第二部分使用。包括了逻辑节点、数据对象、数据属性和枚举类型。

Xilinx开发板测试

最后来在Xilinx开发板上运行代码,与电脑虚拟机之间使用61850协议互相通信。连接开发板需要用到电源线、网线和串口线(也可以用ssh协议,这样就不用串口)。

首先需要安装交叉编译环境,可参考前几节文章内容,在ARM官网下载,或者直接使用vitis自带的交叉编译工具链。如果报错command not found,运行以下命令:

apt-get install gcc-arm-linux-gnueabi

sudo apt-get install gcc-arm*

安装完成后,安装libiec61850官网说明,make时附带参数TARGET=LINUX-ARM,即可编译完成ARM格式的可执行文件。使用file命令校验:

可以看到文件无误。虚拟机运行服务端程序server_example_goose,客户端仍然选择client_example2,使用ssh命令传输到开发板上运行,输出结果如下:

看到输出结果与虚拟机内输出相同,程序运行无误。

同时也可以使用wireshark观察交互的数据包:

后续可以把Xilinx开发板换成BMS,电脑换成EMS、工控机,多尝试使用几个61850服务,感受协议在电力系统中的使用方式。

能源管理系统EMS与IEC61850的更多相关文章

  1. 京准GPS北斗卫星时钟同步系统投运国电内蒙古晶阳能源有限公司

    京准GPS北斗卫星时钟同步系统投运国电内蒙古晶阳能源有限公司  2020年1月初期,我京准科技生产研发的GPS北斗卫星时钟同步系统投运国电内蒙古晶阳能源有限公司,为该单位的能源管理系统及其他各业务子系 ...

  2. 什么是时序时空数据库TSDB

    时序时空数据库(Time Series & Spatial Temporal Database,简称 TSDB)是一种高性能.低成本.稳定可靠的在线时序时空数据库服务,提供高效读写.高压缩比存 ...

  3. 网络功能虚拟化(NFV)

    你造什么是网络功能虚拟化(NFV)吗? NFV将网络功能整合到行业标准的服务器.交换机和存储硬件上,提供了优化的虚拟化数据平面,NFV通过服务器上运行的软件让管理员取代传统物理网络设备,并降低成本.能 ...

  4. linux 关闭显示器命令

    首先要解释下DPMS的意思,dpms可以认为是一个显示能源管理系统,一般用于计算机功耗的管理.在linux中有几个选项:To control Energy Star (DPMS) features:  ...

  5. 『安全工具』Nmap 强悍的端口扫描工具

    作为时下流行的端口扫描工具,Nmap有因其扫描的隐密性有“端口扫描之王”之称 上图是黑客帝国(The Matrix)中崔妮蒂用Nmap入侵核发电站的能源管理系统 0x 01 Nmap介绍 Nmap是一 ...

  6. 电子器件行业ERP实施案例

    XX有限公司是一家致力于能源需求侧管理,为工业,建筑,交通等终端能耗领域提供系统高效的能源管理解决方案的中港合资企业,作为最早从事电力计量与采集的省级高新技术企业,自2001年成立以来,专注于用户侧智 ...

  7. MyEclipse Java基础使用笔记

    一.Java开发平台 JavaSE  标准版 Java应用程序 application  五子棋.计算器.qq JavaEE  企业版  Java企业级应用 JavaME 微型版  小型设备    A ...

  8. PON

    PON(Passive Optical Network:无源光纤网络). PON(无源光网络)是指(光配线网中)不含有任何电子器件及电子电源,ODN全部由光分路器(Splitter)等无源器件组成,不 ...

  9. RootKit

    类型0:藏在人群中,干扰人工肉眼检查 类型1 2:篡改系统内部的数据结构和调用表,破坏自动化检测工具,这项数据结构和调用表是检测工具和KootKit共用的 类型3:跳出束缚,由rootkit实现本该宿 ...

  10. Python之NMAP详解

    一.NMAP简介 NMap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包. nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务运行在哪些连 ...

随机推荐

  1. openstack-Train部署文档

    部署参考资料:1,环境准备https://blog.csdn.net/m0_61777116/article/details/123702147阿里yum源https://blog.csdn.net/ ...

  2. MCP 实践系列:看热点、蹭热点,创作与摸鱼两手抓!

    连续工作累死人,身心疲惫时,总得有那么一点时间给自己松口气.每当这个时候,我总喜欢偷偷摸摸地看看新闻,整理一下逐渐疯狂的思维.毕竟,谁说程序员就只能埋头写代码?谁规定了只能死磕在堆积如山的bug中? ...

  3. 怒更一波TransDuck免费的声音克隆和AI配音功能

    宝子们! 最近咱软件TransDuck的免费声音克隆和AI配音功能被大家用爆啦!感谢各位自来水疯狂安利!! DD这里也是收到好多用户提的宝贵建议!所以,连夜肝了波更新! 这次重点更新使用克隆音色进行A ...

  4. Prometheus配置文件详解

    概述 Prometheus是一个开源的系统监控和警报工具包.它的配置文件通常命名为prometheus.yml,用于配置Prometheus服务器的行为. 其配置文件主要包含以下几个部分: globa ...

  5. Spring扩展接口-BeanDefinitionRegistryPostProcessor

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  6. Bootstrap Table强大的web数据表格渲染框架

    Bootstrap Table 是什么 ‌Bootstrap Table 是一个基于 Bootstrap 框架的开源插件,专为快速构建功能丰富.响应式的数据表格而设计.‌ 它支持排序.分页.搜索.导出 ...

  7. 来公司 3 年,被新来的技术大佬 PUA 了。。。

    大家好,我是程序员鱼皮.最近收到一位鱼友的求助,感觉很有代表性,相信很多技术人都会遇到类似的情况.今天就和大家聊聊这个话题,看看遇到这种情况该怎么办. 鱼友提问 鱼皮哥,求解惑!最近我们公司新来了一个 ...

  8. harbor镜像仓库拉取所有镜像的信息(镜像版本,tag,大小,最后拉取时间)

    # -*- coding: utf-8 -*- # author: yuhaohao import requests from requests.auth import HTTPBasicAuth f ...

  9. Linux系统分析常用指令

    一.查看CPU 1.top命令 1.1 功能说明 top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况. 1.2 使用语法 top [-d num ...

  10. Java变量类型识别

    方法: 1.反射方式,成员变量的类型判断2.isInstance用法3.利用泛型识别类型一.新建测试类 import java.util.Date; import com.cxyapi.generic ...