• 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编译:

            编译前准备

    1. #!/bin/bash
    2. #pcap库
    3. yum install libpcap-devel
    4. #openssl库
    5. yum install openssl-devel
    6. #gcc-c++
    7. yum install gcc gcc-c++
    8. #cmake安装
    9. mkdir cmake_new_version
    10. cd cmake_new_version
    11. #cmake 源码ftp网站https://cmake.org/files/ 下载需要的版本
    12. wget https://cmake.org/files/v3.24/cmake-3.24.2.tar.gz
    13. tar -zxvf cmake-3.24.2.tar.gz
    14. cd cmake-3.24.2
    15. #apt-get install libssl-dev #OPENSSL依赖 或./configure -DCMAKE_USE_OPENSSL=OFF
    16. ./configure
    17. make -j4
    18. #root 用户下
    19. make install
    20. update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force
    21. cmake -version

            libiec61850编译

    1. #!/bin/bash
    2. #libiec61850编译,进入目录libiec61850-master
    3. cd libiec61850-master
    4. mkdir build_linux
    5. cd build_linux
    6. cmake ..
    7. gmake -j4
    8. make install
    9. #默认安装路径 头文件
    10. #/usr/local/include/libiec61850
    11. #默认安装路径 库文件
    12. #/usr/local/lib

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

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

            1.3 win编译

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

    1. #进入目录libiec61850-master,例如本文路径D:\workForOrgCode\IEC61850\libiec61850-master
    2. mkdir build_vc
    3. cd build_vc
    4. cmake .. -G "Visual Studio 12 2013"
    5. cmake --build . --config release
    6. #或
    7. 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工程信息:

    1. #进入libiec61850-master\examples\server_example_goose目录
    2. mkdir build_linux
    3. mkdir build_vc
    4. #修改CMakeLists.txt文件,为了更好理解引用路径,本文给出了全路径设置
    5. include_directories(
    6. .
    7. )
    8. set(server_example_goose_SRCS
    9. server_example_goose.c
    10. static_model.c
    11. )
    12. IF(WIN32)
    13. set_source_files_properties(${server_example_goose_SRCS}
    14. PROPERTIES LANGUAGE CXX)
    15. include_directories(
    16. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\mms\\inc"
    17. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\common\\inc"
    18. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\goose"
    19. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\hal\\inc"
    20. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\third_party\\winpcap\\Include"
    21. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\iec61850\\inc"
    22. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\logging"
    23. )
    24. set(iec61850_LIBDIR "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\build_vs2013\\src")
    25. link_directories(
    26. ${iec61850_LIBDIR}
    27. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\third_party\\winpcap\\Lib"
    28. )
    29. add_executable(server_example_goose
    30. ${server_example_goose_SRCS}
    31. )
    32. target_link_libraries(server_example_goose
    33. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\build_vc2013\\src\\Release\\iec61850.lib" wpcap
    34. )
    35. ELSE(WIN32)
    36. include_directories(
    37. /usr/local/include/libiec61850
    38. )
    39. add_executable(server_example_goose
    40. ${server_example_goose_SRCS}
    41. )
    42. target_link_libraries(server_example_goose
    43. iec61850
    44. -lpthread
    45. )
    46. 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以上的版本

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

             2.3 案例编译(server_goose)

            win编译:

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

             Linux编译:

    1. cd build_linux
    2. cmake ..
    3. make -j4

             2.4 客户端编译

            进入\libiec61850-master\examples\iec61850_client_example2

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

    1. cmake_minimum_required(VERSION 2.8)
    2. project(iec61850_client2)
    3. set(iec61850_client_example2_SRCS
    4. client_example2.c
    5. )
    6. IF(WIN32)
    7. set_source_files_properties(${iec61850_client_example2_SRCS}
    8. PROPERTIES LANGUAGE CXX)
    9. ENDIF(WIN32)
    10. IF(WIN32)
    11. include_directories(
    12. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\mms\\inc"
    13. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\common\\inc"
    14. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\goose"
    15. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\hal\\inc"
    16. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\iec61850\\inc"
    17. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\src\\logging"
    18. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\third_party\\winpcap\\Include"
    19. )
    20. link_directories(
    21. # "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\build_vs2013\\src"
    22. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\third_party\\winpcap\\Lib"
    23. )
    24. add_executable(iec61850_client_example2
    25. ${iec61850_client_example2_SRCS}
    26. )
    27. target_link_libraries(iec61850_client_example2
    28. "D:\\workForOrgCode\\IEC61850\\libiec61850-master\\build_vc2013\\src\\Release\\iec61850.lib"
    29. wpcap
    30. )
    31. ELSE(WIN32)
    32. include_directories(
    33. /usr/local/include/libiec61850
    34. )
    35. add_executable(iec61850_client_example2
    36. ${iec61850_client_example2_SRCS}
    37. )
    38. target_link_libraries(iec61850_client_example2
    39. iec61850
    40. -lpthread
    41. )
    42. ENDIF(WIN32)

            win编译:

    1. mkdir build_vc
    2. cd build_vc
    3. cmake .. -G "Visual Studio 12 2013"
    4. cmake --build . --config debug

              Linux编译:

    1. mkdir build_linux
    2. cd build_linux
    3. cmake ..
    4. make -j4

             2.5 运行测试

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

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

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

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

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

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

             然后尽心服务搜索及链接

             最终展示效果如下:

             其他案例类似

  • 相关阅读:
    pytho你-opencv划痕检测
    漏洞深度分析|Apache Airflow example_bash_operator DAG 远程代码执行漏洞
    响应式动画登录
    作为一名合格的网工,你必须掌握的 DHCP Snooping 知识!
    基于SpringBoot的篮球竞赛预约平台
    自己实现 SpringMVC 底层机制 系列之-实现任务阶段 7- 完成简单视图解析
    LyScript 验证PE程序开启的保护
    大学生个人博客网页设计模板 学生个人博客网页成品 简单个人网站作品下载 静态HTML CSS个人网页作业源代码
    前端工程化
    Numpy数据类型
  • 原文地址:https://blog.csdn.net/py8105/article/details/130910242