立即注册
查看: 509|回复: 3

[arm开发经验分享] STM32MP135开发板助力电力行业,IEC61850协议移植笔记

已绑定手机
发表于 2024-2-2 18:23:51 | 显示全部楼层 |阅读模式 来自 广东省深圳市罗湖区
1.概述
IEC61850是变电站自动化系统(SAS)中通信系统和分散能源(DER)管理的国际标准。它通过标准的实现,实现了智能变电站的工程运作标准化。使得智能变电站的工程实施变得规范、统一和透明,在电力和储能系统中应用非常广泛。
本文基于米尔MYD-YF13X开发板,在Linux系统上移植和使用开源的libIEC61850库,该库提供了用C语言编写的IEC 61850 / mms,IEC 61850 / GOOSE和IEC 61850-9-2 /采样值通信协议的服务端和客户端库。
IEC61850开源库了解更多请访问:http://libiec61850.com/libiec61850/
MYD-YF13X开发板了解更多访问:https://www.myir.cn/shows/110/57.html

2.搭建配置环境
本章节讲述libIEC61850库的编译环境配置过程。
2.1. 安装JAVA环境
IEC61850库中的ICD文件需要一个JAVA工具来进行转换,所以需要先安装JAVA运行环境。米尔提供的JDK安装包位于光盘03-Tools目录,拷贝jdk-8u191-linux-x64.tar.gz到ubuntu工作目录,并解压出来。
  1. # cd <WORKIR>/JDK
  2. # tar zxvf jdk-8u191-linux-x64.tar.gz
  3. # cd jdk1.8.0_191
复制代码


配置JAVA环境变量,修改/etc/profile文件,<WORKIR>为用户工作路径在里面添加如下内容:
  1. <div class="line number1 index0 alt2" style="background-color: rgb(245, 245, 245); font-size: 13px; color: rgb(0, 0, 0); border-radius: 0px !important; background-image: none !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; border: 0px !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; padding-right: 1em !important; padding-left: 1em !important; position: static !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;"><code class="cpp preprocessor" style="border-radius: 0px !important; background: none !important; border: 0px !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; position: static !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important; color: gray !important;"><font face="Tahoma"># vi /etc/profile </font></code></div><div class="line number2 index1 alt1" style="background-color: rgb(245, 245, 245); font-size: 13px; color: rgb(0, 0, 0); border-radius: 0px !important; background-image: none !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; border: 0px !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; padding-right: 1em !important; padding-left: 1em !important; position: static !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;"><code class="cpp plain" style="border-radius: 0px !important; background: none !important; border: 0px !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; position: static !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;"><font face="Tahoma">export JAVA_HOME=<WORKIR>/JDK/jdk1.8.0_191 </font></code></div><div class="line number3 index2 alt2" style="background-color: rgb(245, 245, 245); font-size: 13px; color: rgb(0, 0, 0); border-radius: 0px !important; background-image: none !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; border: 0px !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; padding-right: 1em !important; padding-left: 1em !important; position: static !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;"><code class="cpp plain" style="border-radius: 0px !important; background: none !important; border: 0px !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; position: static !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;"><font face="Tahoma">export JRE_HOME=${JAVA_HOME}/jre </font></code></div><div class="line number4 index3 alt1" style="background-color: rgb(245, 245, 245); font-size: 13px; color: rgb(0, 0, 0); border-radius: 0px !important; background-image: none !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; border: 0px !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; padding-right: 1em !important; padding-left: 1em !important; position: static !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;"><code class="cpp plain" style="border-radius: 0px !important; background: none !important; border: 0px !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; position: static !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;"><font face="Tahoma">export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib </font></code></div><div class="line number5 index4 alt2" style="background-color: rgb(245, 245, 245); font-size: 13px; color: rgb(0, 0, 0); border-radius: 0px !important; background-image: none !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; border: 0px !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; padding-right: 1em !important; padding-left: 1em !important; position: static !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;"><code class="cpp plain" style="border-radius: 0px !important; background: none !important; border: 0px !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; position: static !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;"><font face="Tahoma">export PATH=${JAVA_HOME}/bin:$PATH</font></code></div>
复制代码


修改完成保存退出,使用下面命令来验证JAVA运行环境是否安装成功:
  1. # java -version
  2. java version "1.8.0_191"
  3. Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
  4. Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
复制代码

2.2. 配置交叉编译工具链
这里直接使用MYIR制作的交叉编译工具链。拷贝位于光盘04-Linux_sourceToolchainarm-myir-linux-gnueabihf-gcc.tar.gz到ubuntu的工作目录。通过下面操作设置交叉编译工具链环境变量。
  1. # mkdir arm-myir-linux-gnueabihf-gcc
  2. # tar xvf arm-myir-linux-gnueabihf-gcc.tar.gz -C arm-myir-linux-gnueabihf-gcc
  3. # export ARCH=arm# export CROSS_COMPILE=arm-myir-linux-gnueabihf-
  4. # export PATH=$PATH:/<WORKIR>/arm-myir-linux-gnueabihf-gcc/usr/bin
复制代码

设置完成后使用如下命令验证设置是否成功。
  1. # arm-myir-linux-gnueabihf-gcc -v
  2. 使用内建 specs。
  3. COLLECT_GCC=/home/qinlh/Buildroot/buildroot-2019.02.2/output/host/bin/arm-myir-linux-gnueabihf-gcc.br_real COLLECT_LTO_WRAPPER=/home/qinlh/buildroot/buildroot-2019.02.2/output/host/libexec/gcc/arm-myir-linux-gnueabihf/7.4.0/
  4. lto-wrapper
  5. ...
  6. ...
  7. 线程模型:posix gcc
  8. 版本 7.4.0 (Buildroot 2019.02.2-g04eff54)
复制代码

3.编译IEC61850库
本章节讲述IEC61850库的编译和MYIR IEC61850演示程序myir_iec61850_server的编译过程。
3.1. 获取IEC61850源码包
米尔提供libIEC61850源码位于光盘文件的/04-Linux_Source/IEC61850目录,将libiec61850-1.3.0.tar.gz拷贝到ubuntu目录工作目录,并解压出来,其中<WORKIR>为用户工作目录。
  1. # cp libiec61850-1.3.0.tar.gz <WORKIR>/libiec61850
  2. # cd <WORKIR>/libiec61850
  3. # tar zxvf libiec61850-1.3.0.tar.gz
  4. # cd libiec61850-1.3.0
复制代码

  • 编译IEC61850库:

  1. # make TARGET=LINUX-ARM
  2. ...
  3. ...
  4. arm-myir-linux-gnueabihf-ar: creating ./build-
  5. arm/libiec61850.aarm-myir-linux-gnueabihf-ranlib ./build-arm/libiec61850.a
复制代码

  • MYIR_IEC61850演示程序用到了一些外部库,需要修改位于examplesmyir_iec61850_server目录下的Makefile来指定外部库的路径,将<WORKIR>替换为用户实际的工作路径:

C
  1. FLAGS +=-I./ -I/WORKIR>/arm-myir-linux-gnueabihf-gcc/usr/arm-myir-linux-gnueabihf/sysroot/usr/include/glib-2.0/
  2. -I/WORKIR>/arm-myir-linux-gnueabihf-gcc/usr/arm-myir-linux-gnueabihf/sysroot/usr/lib/glib-2.0/include/
  3. -I/WORKIR>/arm-myir-linux-gnueabihf-gcc/usr/arm-myir-linux-gnueabihf/sysroot/usr/include/cjson/
  4. -I/WORKIR>/arm-myir-linux-gnueabihf-gcc/usr/arm-myir-linux-gnueabihf/sysroot/usr/include
  5. -I/WORKIR>/arm-myir-linux-gnueabihf-gcc/usr/rm-myir-linux-gnueabihf/sysroot/usr/include/libxml2
  6. LDFLAGS += -lpthread -ldbus-1 -lxml2 -lcjson
  7. -L /WORKIR>/arm-myir-linux-gnueabihf-gcc/usr/arm-myir-linux-gnueabihf/sysroot/usr/lib
复制代码

如果上述编译过程报错请检查交叉编译工具链设置是否有问题。
  • 编译ICD文件:

  1. # cd examples/myir_iec61850_server
  2. # make model
  3. java -jar ../../tools/model_generator/genmodel.jar myir_iec61850_server.icd
  4. Select ICD File myir_iec61850_server.icd
  5. parse data type templates ...
  6. parse IED section ...
  7. parse communication section ...
  8. Found connectedAP ap1 for IED MYIR1
  9. print report instance 01
  10. print report instance 02
复制代码

如果上述过程报错请检查JAVA运行环境是否设置成功。
编译MYIR IEC61850演示程序:
  1. # cd examples/myir_iec61850_server
  2. # make TARGET=LINUX-ARM
复制代码

4.运行验证IEC61850应用
4.1. 运行应用
编译完成后MYIR IEC61850应用位于examples/myir_iec61850_server/目录下面,将myir_iec61850_server拷贝至开发板,运行过程如下所示。
  1. # dbus-launch
  2. DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-c0AGn2s5XN,guid=d6544df82962d617c2dc37805c2c2d68
  3. DBUS_SESSION_BUS_PID=5649
  4. # export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-c0AGn2s5XN
  5. # ./myir_iec61850_server
  6. # Using libIEC61850 version 1.3.0
复制代码

4.2. 程序验证
安装包可以在03-Tools/IEDScout.zip文件中获取。
  • 测试验证:

进入IEC61850应用界面,打开PC端IEDScout软件。
843e0bb21224733ca9636d4f8d49d66d.png?v=439303
点击IECScout主界面下面的 Discover IED 按钮,然后输入输入开发板网口的IP地址 192.168.x.xxx ,输入完成后点击 Discover 按钮。
727711441fbdb9ded7716df16abd4d5a.png?v=398018
进入 Browser 页面,可以看到以MYIR1命名的IED设备模型。
e849500ccbbf2547d6100e8d9d123e1f.png?v=438013
点击IED设备模型下面的Data Models->LD1->GGIO1进入通用I/O控制界面。
176d3f56fe9fce7c03972db0434eb1ca.png?v=124452
双击GGIO1下面的LED1数据对象,可以看到Switch这个数据属性,然后点击上方菜单栏的Write按钮即可对LED1进行控制。
a9cb0b4874f981df74bdfce7c102496e.png?v=180634
在Value栏选择false,然后点击Write按键,此时开发板上的LED心跳灯就被点亮了,说明通讯成功。

米尔基于STM32MP135开发板
米尔STM32MP135开发板,基于单核 Cortex-A7 设计的STM32MP13系列处理器,采用12V/2A直流供电,搭载了2路千兆以太网接口、1路USB2.0协议MINI PCIE插座的4G模块接口、1路RGB显示接口、1路音频输入输出接口、2路USB HOST Type A、1路 USB OTG Type-C接口、1路Micro SD接口。开发板配套提供丰富的软件资源以及文档资料,助力开发者开发成功。
11b178b1d8ff30bab5b2656d75a971e2.png?v=307681
fd5e63a6b2bef6a986eb7300c82958c6.png?v=759778
米尔STM32MP135开发板标注图
2.png
3.png
4.png
5.png
6.png
7.png
8.png
已绑定手机
发表于 2024-2-4 13:07:24 | 显示全部楼层 来自 湖北省武汉市
学习学习
已绑定手机
发表于 2024-2-5 08:55:26 | 显示全部楼层 来自 广东省深圳市
学习学习
已绑定手机
发表于 2024-2-22 09:01:34 | 显示全部楼层 来自 广东省深圳市
STM32MP135开发板助力电力行业,IEC61850协议移植笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表