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

news2025/4/28 10:27:09

目录

一、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按钮,有更多细节参数设置

         然后尽心服务搜索及链接

         最终展示效果如下:

         其他案例类似

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP-MM 条件类型字段解析

01、“定价类型”:定义此条件类型的代码和描述,代码不能重复,描述可更改,根据实际需要,条件类型可定制; 02、“存取顺序”:表示此条件类型在定价时,要到存取顺序号定义的条件表中读…

学C的第二十二天【深度剖析数据在内存中的存储:1. 数据类型介绍;2. 整型在内存中的存储】

相关代码gitee自取:C语言学习日记: 加油努力 (gitee.com) 接上期:学C的第二十一天【初阶测评讲解:1. 计算递归了几次;2. 判断 do while 循环执行了几次;3. 求输入的两个数的最小公倍数;4. 将一句话的单词进…

day39_servlet

今日内容 零、复习昨日 一、接收请求 二、处理响应 三、综合案例 零、复习昨日 见晨考 一、接收请求 浏览器发出请求,经过web.xml映射匹配,找到Servlet对应的方法(doGet/doPost),接收请求数据,可以接收请求中的请求行,请求头,请求正文,具体流程如下 浏览器发出请求 …

OpenAI ChatGPT API + FaskAPI SSE Stream 流式周转技术 以及前端Fetch 流式请求获取案例

先填坑,一贯习惯 nginx如果要支持SSE,要调整一些参数 conf配置文件,AI给的,具体自己没搭,应该是正确的 nginx worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_typ…

Ubuntu下编译运行MicroPython Unix版本

文章目录 github拉取源码更新模块编译运行 github拉取源码 到Github(https://github.com/micropython/micropython)上下载源码 终端输入,如果提示识别不到gh命令,就sudo apt-get install gc安装一下。 再根据提示在终端里登录自己的github账号。 再次…

Hystrix 服务熔断

书籍,人,借阅服务之间相互调用, 高度耦合, 一旦一个服务故障, 其他服务会雪崩, 和多米诺骨牌一样 Hystrix 熔断器, 保险丝 服务降级 提供补救措施发给请求者, 服务可用, 能力下降了 borrow-service 导入依赖 <dependency><groupId>org.springframework.cloud&l…

linux kernel pwn 常用结构体

tty 设备结构体 tty 设备在 /dev 下的一个伪终端设备 ptmx 。 tty_struct&#xff08;kmalloc-1k | GFP_KERNEL_ACCOUNT&#xff09; tty_struct 定义如下 。 /* tty magic number */ #define TTY_MAGIC 0x5401struct tty_struct {int magic;...const struct tty…

python学习-基础知识总结

&#xff08;一&#xff09;基础语法 1.1、注释 程序添加注释&#xff0c;可以用来解释程序某些部分的作用和功能&#xff0c;提高程序的可读性&#xff0c;注释有两种形式&#xff1a; 单行注释&#xff1a;#多行注释&#xff1a;单引号&#xff08;注释内容&#xff09;或双…

【剑指offer】数据结构——字符串

目录 数据结构——字符串直接解【剑指offer】05. 替换空格【剑指offer】17. 打印从1到最大的n位数【剑指offer】20. 表示数值的字符串【剑指offer】37. 序列化二叉树【剑指offer】50. 第一个只出现一次的字符【剑指offer】58. 翻转单词顺序【剑指offer】58.2 左旋转字符串【剑指…

C++多态 万字详解

在经历两个多月的备赛后&#xff0c;最终5.21结果出来后自己也比较满意&#xff0c;以一个省三收尾&#xff08;算法类的&#xff09;。 期间每天偶尔学学新知识&#xff0c;然后主要做题&#xff0c;博客也落下了不少&#xff0c;现在开始继续补&#xff08;可能会些许生疏&a…

【剑指offer】数据结构——数组

目录 数据结构——数组直接解【剑指offer】03.数组中重复的数字排序法集合法原地置换 【剑指offer】04. 二维数组中的查找【剑指offer】29. 顺时针打印矩阵【剑指offer】39. 数组中出现次数超过一半的数字【剑指offer】40. 最小的k个数【剑指offer】45. 把数组排成最小的数【剑…

C++ 实现命令行画心形代码,有多个爱心代码,简单可调数据和字符,可装X,也可用于浪漫的表白,可实现跳动、保存等功能

绘制一个简易爱心 #include <stdio.h> #include <Windows.h>int main() {for (float y 1.5f; y > -1.5f; y - 0.1f){for (float x -1.5f; x < 1.5f; x 0.05f){float z x * x y * y - 1;float f z * z * z - x * x * y * y * y;putchar(f < 0.0f ?…

一文带你了解MySQL之基于规则的优化

前言&#xff1a; 大家别忘了MySQL本质上是一个软件&#xff0c;MySQL的并不能要求使用这个软件的人人都是数据库的高手&#xff0c;就像我写这篇文章的时候并不能要求各位在学之前就会了里边的知识。也就是说我们无法避免某些小伙伴写一些执行起来十分耗费性能的语句。即使是…

【youcans 的图像处理学习课】22. Haar 级联分类器

专栏地址&#xff1a;『youcans 的图像处理学习课』 文章目录&#xff1a;『youcans 的图像处理学习课 - 总目录』 【youcans 的图像处理学习课】22. Haar 级联分类器 3. Haar 特征及其加速计算3.1 Haar 特征3.2 Haar 特征值的计算3.3 积分图像3.4 基于积分图像加速计算 Haar 特…

MATLAB 如何以海森频率格子格纸的形式绘制频率分布曲线?

思路&#xff1a;将水文频率在海森格纸上对应的位置算出来&#xff0c;通过更改坐标轴标签制作海森频率格纸 先放参考链接&#xff1a; norminv 如何利用matlab在海森几率格纸上绘制图形 clc clear close all%% 随机生成径流系列&#xff0c;并计算对应频率 q randi(1000,…

Thymeleaf语法和流程控制,简单传值,each循环,if判断,switch.case使用

Thymeleaf怎么调用静态资源的看我之前发过的文章 这个首先在controller创建一个book的类&#xff0c;book的一些属性自己定义记得getsetyix Controller RequestMapping("/book") public class BookController {RequestMapping("/query")public String qu…

建立基于Open vSwitch的GRE隧道

建立基于Open vSwitch的GRE隧道 1. 环境的准备 图6-1 连接拓扑图 如图6-1所示为两台虚拟机连接拓扑图&#xff0c;两台虚拟机ens33网卡&#xff0c;通过虚拟交换机连接在一起&#xff0c;地址网段为30.0.0.0/24。在Docker主机ens33&#xff0c;IP地址为30.0.0.10/24&#xff…

从0到1接入钉钉消息通知

前段时间给项目接入监控告警&#xff0c;消息通知渠道选了钉钉。预算的原因内部办公刚从飞书转回钉钉&#xff0c;飞书消息通知之前就有一套了&#xff0c;测试钉钉从应用授权到消息测试花了不少时间。这里记录下从钉钉开放平台权限申请到消息接收全流程&#xff0c;给后面有同…

SAP-MM-采购申请字段解析

采购申请抬头以及行项目字段解析 1、采购申请类型&#xff1a; 对PR进行分类&#xff1b; 控制PR行项目的编号间隔&#xff1b; 控制PR编号范围&#xff0c;以及是否内/外部给号&#xff1b; 控制PR的屏幕选择格式&#xff1b; 控制PR是否允许凭证抬头审批&#xff0c;如果允…

mybatis-plus实现逻辑删除(详细!)

文章目录 什么是逻辑删除&#xff1f;为什么用到逻辑删除&#xff1f;在springboot使用Mybatis-Plus提供的逻辑删除1、在application.yml配置2、 实体类字段上加上TableLogic注解演示 什么是逻辑删除&#xff1f; 逻辑删除的本质是修改操作&#xff0c;并不是真正的删除&#…