跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C

libIEC61850 开源 IEC 61850 协议库使用指南

libIEC61850 是开源 IEC 61850 协议库,基于 C 语言实现,支持 MMS、GOOSE 及 SV 协议。介绍其核心特性、环境搭建、构建方法及服务器与客户端示例。内容包括错误处理、资源管理、线程安全及 TLS 加密配置等最佳实践,适用于电力自动化系统开发。

锁机制发布于 2026/3/23更新于 2026/7/1622K 浏览

项目概述

libIEC61850 是由 MZ Automation 开发的开放源码库,主要用于实现 IEC 61850 标准中的通信协议。该库完全符合 IEC 61850 标准,支持 MMS(制造报文规范)、GOOSE(通用面向对象变电站事件)及 SV(采样值)等关键协议。

libIEC61850 提供了客户端和服务器端的应用编程接口(API),采用 C 语言(符合 C99 标准)开发,确保最大程度的可移植性。它可以在嵌入式系统和运行 Linux、Windows、MacOS 的 PC 上使用,已成功应用于多个商业软件产品和设备中。

核心特性

  • 协议支持完整:支持 MMS 客户端/服务器、GOOSE(IEC 61850-8-1)、采样值(SV - IEC 61850-9-2)
  • 报告功能强大:支持缓冲和非缓冲报告、在线报告控制块配置
  • 数据服务全面:数据访问服务(获取数据、设置数据)、在线数据模型发现和浏览
  • 数据集服务:所有数据集服务(获取值、设置值、浏览)、动态数据集服务(创建和删除)
  • 日志服务灵活:提供连接自定义数据库的抽象接口,附带 sqlite 实现
  • 文件服务完善:MMS 文件服务(浏览、获取文件、设置文件、删除/重命名文件)
  • 安全特性:支持 TLS 加密通信(IEC 62351-3/4),保护数据传输过程
  • 多语言支持:提供 C 和 C#/.NET API 接口

环境搭建与构建

克隆仓库
git clone https://github.com/MZAutomation/libiec61850.git
cd libiec61850
使用 CMake 构建
mkdir build
cd build
cmake ..
make
sudo make install # 安装至系统目录
构建示例程序

在项目根目录下执行:

make examples

构建成功后,可以在项目根目录和 build 目录中找到二进制文件和静态库文件(libiec61850.a)。

快速入门示例

服务器端示例

以下是一个基本的 IEC 61850 服务器示例,展示如何创建服务器实例并处理控制命令:

#include "iec61850_server.h"
#include "hal_thread.h"
#include <signal.h>
#include <stdlib.h>
#include 



  running = ;
 IedServer iedServer = ;

  {
    running = ;
}

 ControlHandlerResult  {
     (test)  CONTROL_RESULT_FAILED;
     (MmsValue_getType(value) == MMS_BOOLEAN) {
        ();
         (MmsValue_getBoolean(value)) ();
         ();
    }   CONTROL_RESULT_FAILED;

     timeStamp = Hal_getTimeInMs();
    IedServer_updateUTCTimeAttributeValue(iedServer, parameter, timeStamp);
    IedServer_updateAttributeValue(iedServer, parameter, value);
     CONTROL_RESULT_OK;
}

  {
     tcpPort = ;
    (, LibIEC61850_getVersionString());
    
    IedServerConfig config = IedServerConfig_create();
    
    IedServerConfig_setReportBufferSize(config, );
    
    iedServer = IedServer_createWithConfig(&iedModel, , config);
    IedServerConfig_destroy(config);
    
    IedServer_setServerIdentity(iedServer, , , );
    
    IedServer_setControlHandler(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1, (ControlHandler) controlHandlerForBinaryOutput, IEDMODEL_GenericIO_GGIO1_SPCSO1);
    
    IedServer_start(iedServer, tcpPort);
    running = ;
    signal(SIGINT, sigint_handler);
     (running) {
        
         value = sinf(Hal_getTimeInMs() / );
        IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_mag_f, value);
        Thread_sleep();
    }
    
    IedServer_stop(iedServer);
    IedServer_destroy(iedServer);
     ;
}
<stdio.h>
#include <math.h>
#include "static_model.h"
static
int
0
static
NULL
void
sigint_handler
(int signalId)
0
static
controlHandlerForBinaryOutput
(ControlAction action, void* parameter, MmsValue* value, bool test)
if
return
if
printf
"received binary control command: "
if
printf
"on\n"
else
printf
"off\n"
else
return
uint64_t
return
int
main
(int argc, char** argv)
int
102
printf
"Using libIEC61850 version %s\n"
/* 创建服务器配置对象 */
/* 设置报告缓冲区大小 */
200000
/* 创建 IEC 61850 服务器实例 */
NULL
/* 设置服务器标识信息 */
"MZ"
"basic io"
"1.6.0"
/* 安装控制处理器 */
/* 启动服务器监听 */
1
while
/* 更新模拟量测量值 */
float
1000.f
100
/* 停止服务器并清理资源 */
return
0
客户端示例

以下是一个简单的 IEC 61850 客户端示例,展示如何连接服务器并读取数据:

#include "iec61850_client.h"
#include <stdlib.h>
#include <stdio.h>
#include "hal_thread.h"

int main(int argc, char** argv) {
    char* hostname = argc > 1 ? argv[1] : "localhost";
    int tcpPort = argc > 2 ? atoi(argv[2]) : 102;
    IedClientError error;
    IedConnection con = IedConnection_create();
    printf("Connecting to %s:%i\n", hostname, tcpPort);
    IedConnection_connect(con, &error, hostname, tcpPort);
    if (error == IED_ERROR_OK) {
        printf("Connected successfully\n");
        /* 读取模拟量测量值 */
        MmsValue* value = IedConnection_readObject(con, &error, "simpleIOGenericIO/GGIO1.AnIn1.mag.f", IEC61850_FC_MX);
        if (value != NULL && MmsValue_getType(value) == MMS_FLOAT) {
            float fval = MmsValue_toFloat(value);
            printf("Read float value: %f\n", fval);
            MmsValue_delete(value);
        }
        IedConnection_close(con);
    } else {
        printf("Failed to connect (error code: %i)\n", error);
    }
    IedConnection_destroy(con);
    return 0;
}

运行示例程序

构建完成后,可以运行示例程序进行测试:

cd examples/server_example_basic_io
sudo ./server_example_basic_io

在另一个终端中运行客户端:

cd examples/iec61850_client_example1
./client_example1

TLS 支持配置

libIEC61850 支持 TLS 加密通信,可以使用 mbedTLS 库来实现:

使用 mbedTLS 2.28
make WITH_MBEDTLS=1
使用 mbedTLS 3.6
make WITH_MBEDTLS3=1

使用 CMake 构建时,如果 third_party/mbedtls 目录中存在相应的 mbedtls 版本,会自动启用 TLS 支持。

最佳实践建议

1. 错误处理

在实际应用中,务必添加完善的错误处理机制。所有 libIEC61850 API 函数都会返回错误代码,应该检查这些代码以确保操作成功。

2. 资源管理

及时释放分配的资源,使用相应的 destroy 或 delete 函数来避免内存泄漏。

3. 线程安全

在多线程环境中使用 libIEC61850 时,注意线程同步问题。服务器 API 通常提供数据模型锁定机制来确保线程安全。

4. 性能优化

根据实际应用场景调整配置参数,如报告缓冲区大小、最大连接数等,以达到最佳性能。

5. 安全性考虑

在生产环境中,始终启用 TLS 加密通信,并妥善管理证书和密钥。

许可证信息

libIEC61850 采用 GNU General Public License v3.0 许可证。对于商业项目,厂商提供商业许可证和支持选项。

技术支持与贡献

该库由 MZ Automation GmbH 提供商业支持和技术服务。如果您希望为项目做出贡献,请联系 [email protected] 获取贡献者许可协议。

通过遵循本指南,您可以快速开始使用 libIEC61850 库来开发符合 IEC 61850 标准的电力自动化系统应用程序。库中提供的丰富示例代码是学习和理解 API 用法的绝佳资源。

目录

  1. 项目概述
  2. 核心特性
  3. 环境搭建与构建
  4. 克隆仓库
  5. 使用 CMake 构建
  6. 构建示例程序
  7. 快速入门示例
  8. 服务器端示例
  9. 客户端示例
  10. 运行示例程序
  11. TLS 支持配置
  12. 使用 mbedTLS 2.28
  13. 使用 mbedTLS 3.6
  14. 最佳实践建议
  15. 1. 错误处理
  16. 2. 资源管理
  17. 3. 线程安全
  18. 4. 性能优化
  19. 5. 安全性考虑
  20. 许可证信息
  21. 技术支持与贡献
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 基础语法入门:变量、类型与运算符
  • 中国人工智能大模型技术白皮书深度解读:大模型领域入门指南
  • Vue.js 组件中 inheritAttrs 与 $attrs 属性继承机制详解
  • 使用 Miniconda 本地部署 llama-cpp-python 大模型推理
  • Instant-NGP 多分辨率哈希编码技术解析
  • MAVROS 安装配置与 ROS C++ 仿真实战指南
  • Open WebUI MCPo 项目解析:将 MCP 工具转换为 OpenAPI 接口
  • 算法面试高频考点与解题模板避坑指南
  • 自然语言处理在社交媒体分析中的应用与实战
  • 大模型技术通识与基础指南:生态、模型及微调方法
  • C++ 继承机制详解:概念、规则与菱形继承
  • 本地大模型部署的残酷真相:成本、门槛与真实体验
  • FPGA 实现 CIC 抽取滤波器
  • Copilot 与 Codex 中文乱码问题自动化修复方案
  • OpenClaw 安装部署全流程:搭建自己的 AI 助手
  • OpenClaw 安装与飞书机器人接入教程
  • Discord 机器人创建流程详解
  • 具身导航 VLN 最新论文汇总 | Vision-and-Language Navigation
  • Go2 机器人 ROS2 与 Gazebo 仿真环境搭建实战指南
  • VSCode 自定义 Copilot Agent 与 Awesome Agent 模板

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online