C/C++开发,libiec61850库学习及运用

news/2024/11/8 18:29:11/

目录

一、libiec61850库下载编译

        1.1 下载

       1.2 linux编译:

        1.3 win编译

二、案例编译测试

        2.1 CMakeLists.txt调整(server_example_goose)

       2.2 模型static_model.h/static_model.cpp生成

         2.3 案例编译(server_goose)

         2.4 客户端编译

         2.5 运行测试


一、libiec61850库下载编译

        1.1 下载

       git clone https://gitee.com/openyunxingtianxia/libiec61850.git

        注:官网(libIEC61850 / lib60870 | open source libraries for IEC 61850 and IEC 60870-5-101/104),最新版本是1.5.1

       1.2 linux编译:

        编译前准备

#!/bin/bash
#pcap库
yum install libpcap-devel
#openssl库
yum install openssl-devel
#gcc-c++
yum install gcc gcc-c++#cmake安装
mkdir cmake_new_version
cd cmake_new_version
#cmake 源码ftp网站https://cmake.org/files/ 下载需要的版本
wget https://cmake.org/files/v3.24/cmake-3.24.2.tar.gz
tar -zxvf cmake-3.24.2.tar.gz 
cd cmake-3.24.2
#apt-get install libssl-dev #OPENSSL依赖 或./configure -DCMAKE_USE_OPENSSL=OFF
./configure
make -j4
#root 用户下
make install
update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force
cmake -version

        libiec61850编译

#!/bin/bash
#libiec61850编译,进入目录libiec61850-master
cd libiec61850-master
mkdir build_linux
cd build_linuxcmake ..
gmake -j4
make install
#默认安装路径 头文件
#/usr/local/include/libiec61850
#默认安装路径 库文件
#/usr/local/lib

         libiec61850的动态库加入环境变量:

vi /etc/profile
#在文末追加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/lib64
#保存退出 :wq
#使配置生效
source /etc/profile

        1.3 win编译

        本文采用cmake+vs2013编译,预先安装cmake和vs2013

#进入目录libiec61850-master,例如本文路径D:\workForOrgCode\IEC61850\libiec61850-master
mkdir build_vc
cd build_vccmake .. -G "Visual Studio 12 2013"cmake --build . --config release
#或
cmake --build . --config debug

二、案例编译测试

        通常,源码编译时就已经自动编译了各个案例文件,一般就在我们刚刚编译的目录下:

libiec61850-master\build_linux\examples和\libiec61850-master\build_vc2013\examples

        为了理解编译好的头文件和库文件如何调用,我们尝试自行手动配置和编译一下。

        server_example_goose 和 server_example_goose为例

        2.1 CMakeLists.txt调整(server_example_goose)

        修改CMakeLists.txt工程信息:

#进入libiec61850-master\examples\server_example_goose目录
mkdir build_linux
mkdir build_vc
#修改CMakeLists.txt文件,为了更好理解引用路径,本文给出了全路径设置include_directories(.
)set(server_example_goose_SRCSserver_example_goose.cstatic_model.c
)IF(WIN32)
set_source_files_properties(${server_example_goose_SRCS}PROPERTIES LANGUAGE CXX)include_directories("D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\mms\\inc""D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\common\\inc" "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\goose" "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\hal\\inc" "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\third_party\\winpcap\\Include" "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\iec61850\\inc""D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\logging"
)set(iec61850_LIBDIR "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\build_vs2013\\src")link_directories(${iec61850_LIBDIR}"D:\\workForOrgCode\\IEC61850\\libiec61850-master\\third_party\\winpcap\\Lib"
)add_executable(server_example_goose${server_example_goose_SRCS}
)target_link_libraries(server_example_goose"D:\\workForOrgCode\\IEC61850\\libiec61850-master\\build_vc2013\\src\\Release\\iec61850.lib" wpcap
)
ELSE(WIN32)
include_directories(/usr/local/include/libiec61850
)add_executable(server_example_goose${server_example_goose_SRCS}
)target_link_libraries(server_example_gooseiec61850-lpthread
)
ENDIF(WIN32)

       2.2 模型static_model.h/static_model.cpp生成

        这个案例是SCL模型是通过simpleIO_direct_control_goose.icd文件生成的,用于生产的工具在“D:\workForOrgCode\IEC61850\libiec61850-master\tools\model_generator”路径下,这个生产工具需要jdk支持,最好安装1.8以上的版本

#进入该案例目录下
java -jar D:/workForOrgCode/IEC61850/libiec61850-master/tools/model_generator/genmodel.jar simpleIO_direct_control_goose.icd

         2.3 案例编译(server_goose)

        win编译:

cd build_vc
cmake .. -G "Visual Studio 12 2013"
cmake --build . --config debug

         Linux编译:

cd build_linux
cmake ..
make -j4

         2.4 客户端编译

        进入\libiec61850-master\examples\iec61850_client_example2

        修改CMakeLists.txt文件,大致如下

cmake_minimum_required(VERSION 2.8)project(iec61850_client2)set(iec61850_client_example2_SRCSclient_example2.c
)IF(WIN32)
set_source_files_properties(${iec61850_client_example2_SRCS}PROPERTIES LANGUAGE CXX)
ENDIF(WIN32)IF(WIN32)include_directories("D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\mms\\inc""D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\common\\inc" "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\goose" "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\hal\\inc" "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\iec61850\\inc""D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\logging""D:\\workForOrgCode\\IEC61850\\libiec61850-master\\third_party\\winpcap\\Include" 
)link_directories(# "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\build_vs2013\\src""D:\\workForOrgCode\\IEC61850\\libiec61850-master\\third_party\\winpcap\\Lib"
)add_executable(iec61850_client_example2${iec61850_client_example2_SRCS}
)target_link_libraries(iec61850_client_example2"D:\\workForOrgCode\\IEC61850\\libiec61850-master\\build_vc2013\\src\\Release\\iec61850.lib"wpcap
)ELSE(WIN32)include_directories(/usr/local/include/libiec61850
)add_executable(iec61850_client_example2${iec61850_client_example2_SRCS}
)target_link_libraries(iec61850_client_example2iec61850-lpthread
)ENDIF(WIN32)

        win编译:

mkdir build_vc 
cd build_vc
cmake .. -G "Visual Studio 12 2013"
cmake --build . --config debug

          Linux编译:

mkdir build_linux
cd build_linux
cmake ..
make -j4

         2.5 运行测试

        在linux启动\libiec61850-master\examples\server_example_goose服务端

cd server_example_goose/build_linux
#指定网口启动
./server_example_goose "ens33"

        在win启动\libiec61850-master\examples\iec61850_client_example2客户端,该客户端读取服务端的SCL模型信息并打印输出显式

#将前面编译好的库文件iec61850.dll拷贝
#例如\libiec61850-master\build_vc2013\src\Debug目录下,拷贝到
#\libiec61850-master\examples\iec61850_client_example2\build_vc\debug目录下
#然后进入\libiec61850-master\examples\iec61850_client_example2\build_vc\debug目录,
#启动程序
iec61850_client_example2.exe 192.168.157.152 102

         另外也可以采用IEDScout客户端测试工具测试,打开IEDScout工具,进入配置界面,新建一个服务链接:

         可以点击advanced按钮,有更多细节参数设置

         然后尽心服务搜索及链接

         最终展示效果如下:

         其他案例类似


http://www.ppmy.cn/news/97801.html

相关文章

logstash 采集应用日志切割问题

1.logstash [oswatch@rce1 conf]$ cat test.conf input { file { path=>["/tmp/test/test.log*"] } } output { stdout { codec=>rubydebug{} } } 2.python脚本: [oswatch@rce1 conf]$ cat t1.py #!/usr/bin/python # -*- coding: UTF-…

算法|9.从暴力递归到动态规划2

9.算法|从暴力递归到动态规划2 1.数字字符串转英文字符串 题意:规定1和A对应、2和B对应、3和C对应…26和Z对应,那么一个数字字符串比如"111”就可以转化为:“AAA”、“KA"和"AK” 给定一个只有数字字符组成的字符串str,返回…

采购申请审批测试

采购申请审批的配置并不难,但是总会有原因导致业务无审批策略,而且这个配置也比较脆弱,有时同步也会出现问题,小编利用这篇操作记录下测试结果。 1、项目类别的审批策略分类 下图是审批策略分类-项目类别不给值,测试…

使用sklearn进行机器学习案例(1)

文章目录 案例一. 加州房价预测案例二. MNIST手写数字识别案例三. 波士顿房价预测 案例一. 加州房价预测 线性回归通过对训练集进行训练,拟合出一个线性方程,使得预测值与实际值之间的平均误差最小化。这个过程可以使用梯度下降法等优化算法来实现。即通…

【MCS-51】中断系统原理及应用

中断是单片机中一个十分重要的功能,它的出现能够让我们的单片机在顺序执行命令时,具备应对特殊情况的能力。 目录 🌙通信方式 🍃无条件传送 🍃有条件传送 🍃DMA通信 🍃中断传送 &#x1…

CGAL4.4+VC2008编译

CGAL4.4VC2008编译 CGAL 一: CGAL是欧盟资助的基础几何库,很底层, 纯算法, 对于你的项目和科研都是不可多得的好东西, 废话一句, 国内做这样的东西, 估计会活不下去交不了差的. 不多介绍.送上 英文原址, 从软件角度, CGAL架构与STL模板库, 需要你有较好的C功底. 英文功底就不…

c primer plus学习笔记

1.int的大小恒定就是32位么? 不是的,int大小是跟着系统走的,不是在各个系统里固定不变的。 32位系统int就是32位。64位系统,int就是64位。short 和long的长度则跟着long走,一般来说int是32位,short就是16…