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

目录

一、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_linux

cmake ..
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_vc

cmake .. -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_SRCS
   server_example_goose.c
   static_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_goose
    iec61850
	-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_SRCS
   client_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_example2
    iec61850
	-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按钮,有更多细节参数设置

         然后尽心服务搜索及链接

         最终展示效果如下:

         其他案例类似

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/24519.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python开发】FastAPI 03:请求参数—请求体

除了路径参数和查询参数,还有请求体,其用于传递 JSON、XML 或其他格式的数据,以便服务器能够读取并做出相应的处理,可以说请求体的作用更为强大。试想一下,如果存在七八个参数,路径参数和查询是不是就招架不…

Android播放器拖动进度条的小图预览

Android播放器拖动进度条的小图预览 背景效果图关键代码1. 获取指定位置的视频帧2. 预览图的显示和隐藏 完整代码1. xml布局文件activity_video.xml2. Activity文件VideoActivity.java 背景 我们在使用一些播放器时,拖动进度条会有一个预览框,上一篇博客…

Docker容器 和 Kubernetes容器集群管理系统

一、快速了解Docker 1. 什么是Docker的定义 Docker 是一个开源的应用容器引擎,基于Go语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以…

javaScript 给图片加水印

背景 在很多地方,我们都可以看到,上传图片的时候,图片都会被加上默认的水印,水印的作用主要体现在以下几个方面: 1.版权保护:在商业用途的照片中添加水印可以帮助保护作者的版权,防止他人未经…

IOS复杂震动AHAP文件编辑指南

简介 目前部分游戏会在播放一些特定的音乐音效时,令设备产生贴合音效的复杂震动,给玩家一个更好的游戏体验。这种复杂震动就是通过苹果的CoreHaptics库实现的。 下面是关于CoreHaptics的官方文档 ​​​​​​​Core Haptics | Apple Developer Docum…

C++ Qt项目实战:构建高效的代码管理器

C Qt项目实战:构建高效的代码管理器 一、项目概述(Introduction)1.1 项目背景(Project Background)1.2 项目目标(Project Goals)1.3 项目应用场景(Project Application Scenarios&am…

《操作系统》期末主观题梳理

操作系统简答题 文章目录 操作系统简答题第一章第二章第三章第四章第五章第六章第七章第八章第九章 第一章 在计算机系统上配置OS(operating system, 操作系统)的目标是什么?作用主要表现在哪几个方面? 在计算机系统上配置OS, 主要目标是实现:方便性、有效性、可…

加速数实融合,数据交易3.0模式上新

数据交易市场将迎来真正的突破? 目前看的确如此。随着去年底“数据二十条”的颁布,业界普遍认为数据基础制度将加速走向落地与完善,数据要素化今年有望迎来全面提速,将极大促进数据交易市场走向规模化。 IDC预测,到2…

css3新增特性

1. 初始化 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, …

【Cpp】哈希之手撕闭散列/开散列

文章目录 unorderedunordered系列关联式容器unordered_map和unordered_set概述unordered_map的文档介绍unordered_map的接口说明 底层结构 哈希哈希/散列表 概念哈希冲突哈希函数哈希函数设计原则&#xff1a;常见哈希函数 哈希冲突解决闭散列线性探测二次探测 开散列 哈希表的…

mysql学习

DISTINCT 检索不同行 该关键字的作用就是用来去重&#xff0c;可以将你所要展示的数据中完全相同的去重&#xff0c;只展示一个&#xff1b; LIMIT 限制结果 该关键字的作用就是你限制它返回几条数据&#xff0c;比如你想要获得前面5行的据&#xff0c;就可以使用limit 5&…

java 区分缺陷Defects/感染Infections/失败Failure

java 区分缺陷Defects/感染Infections/失败Failure 缺陷Defects 软件故障总是从代码中一个或多个缺陷的执行开始。 缺陷只是一段有缺陷、不正确的代码。 缺陷可能是程序语句的一部分或完整部分&#xff0c;也可能对应于不存在但应该存在的语句。 尽管程序员要对代码中的缺陷负…

利用Servlet编写第一个“hello world“(续)

利用Servlet编写第一个“hello world“ &#x1f50e;通过插件 Smart Tomcat 简化 打包代码 与 部署 操作下载Smart Tomcat配置Smart Tomcat &#x1f50e;Servlet 中的常见错误404(Not Found)&#x1f36d;请求路径出错&#x1f36d;war 包未被正确加载 405(Method Not Allowe…

【ChatGPT】ChatGPT自动生成思维导图

参考视频&#xff1a;https://edu.csdn.net/learn/38346/613917 应用场景&#xff1a;自学&#xff0c;“研一学生如何学习机器学习”的思维导图 问&#xff1a;写一个“研一学生如何学习机器学习”的思维导图内容&#xff0c;以markdown代码块格式输出 # 研一学生如何学习…

统计学的假设检验/置信区间计算

假设检验的核心其实就是反证法。反证法是数学中的一个概念&#xff0c;就是你要证明一个结论是正确的&#xff0c;那么先假设这个结论是错误的&#xff0c;然后以这个结论是错误的为前提条件进行推理&#xff0c;推理出来的结果与假设条件矛盾&#xff0c;这个时候就说明这个假…

《JavaEE》HTTPS

文章目录 HTTPS起源HTTPS对称加密非对称加密两者的区别 HTTPS的安全问题使用对称加密正常交互黑客入侵解决方案 非对称加密引入非对称加密后的流程 中间人攻击黑客的入侵方案加入后的流程解决方案黑客再次加注解决方案 ​&#x1f451;作者主页&#xff1a;Java冰激凌 &#x1…

毫米波雷达信号处理中的通道间相干与非相干积累问题

说明 相干和非相干积累是雷达信号处理中的常用方法&#xff0c;这两个概念一般是用在多脉冲积累这个问题上&#xff1a;积累可以提高信号的SNR&#xff0c;从而提高检出概率。不过本文内容与脉冲积累无关&#xff0c;本文讨论的话题是将这两个概念(non-coherent combination、c…

HCIA-MSTP替代技术之链路捆绑(LACP模式)

目录 手工链路聚合的不足&#xff1a; LACP链路聚合的原理 LACP模式&#xff1a; LACPDU&#xff1a; 1&#xff0c;设备优先级&#xff1a; 设备优先级的比较是&#xff1a;先比较优先级大小&#xff0c;0到32768&#xff0c;越小优先级越高&#xff0c;如果优先级相同&a…

OpenAI再出新作,AIGC时代,3D建模师的饭碗危险了!

大家好&#xff0c;我是千与千寻&#xff0c;也可以叫我千寻哥&#xff0c;说起来&#xff0c;自从ChatGPT发布之后&#xff0c;我就开始焦虑&#xff0c;担心自己程序员的饭碗会不会哪天就被AIGC取代了。 有人说我是过度焦虑了&#xff0c;但是我总觉有点危机感肯定没有坏处。…

【017】C++ 指针变量详解,理解指针变量

C 指针变量详解 引言一、内存概述二、指针变量2.1、地址和指针变量的关系2.2、定义指针变量2.3、指针变量的初始化2.4、指针类型2.5、案例2.6、注意事项 三、数组元素的指针3.1、概述3.2、在使用中 [ ] 就是 *()的缩写3.3、指向同一数组的元素的两个指针变量间的关系 四、字符串…