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

项目概述

【免费下载链接】libiec61850Official repository for libIEC61850, the open-source library for the IEC 61850 protocols 项目地址: https://gitcode.com/gh_mirrors/li/libiec61850

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://gitcode.com/gh_mirrors/li/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 <stdio.h> #include <math.h> #include "static_model.h" static int running = 0; static IedServer iedServer = NULL; void sigint_handler(int signalId) { running = 0; } static ControlHandlerResult controlHandlerForBinaryOutput(ControlAction action, void* parameter, MmsValue* value, bool test) { if (test) return CONTROL_RESULT_FAILED; if (MmsValue_getType(value) == MMS_BOOLEAN) { printf("received binary control command: "); if (MmsValue_getBoolean(value)) printf("on\n"); else printf("off\n"); } else return CONTROL_RESULT_FAILED; uint64_t timeStamp = Hal_getTimeInMs(); IedServer_updateUTCTimeAttributeValue(iedServer, parameter, timeStamp); IedServer_updateAttributeValue(iedServer, parameter, value); return CONTROL_RESULT_OK; } int main(int argc, char** argv) { int tcpPort = 102; printf("Using libIEC61850 version %s\n", LibIEC61850_getVersionString()); /* 创建服务器配置对象 */ IedServerConfig config = IedServerConfig_create(); /* 设置报告缓冲区大小 */ IedServerConfig_setReportBufferSize(config, 200000); /* 创建IEC 61850服务器实例 */ iedServer = IedServer_createWithConfig(&iedModel, NULL, config); IedServerConfig_destroy(config); /* 设置服务器标识信息 */ IedServer_setServerIdentity(iedServer, "MZ", "basic io", "1.6.0"); /* 安装控制处理器 */ IedServer_setControlHandler(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1, (ControlHandler) controlHandlerForBinaryOutput, IEDMODEL_GenericIO_GGIO1_SPCSO1); /* 启动服务器监听 */ IedServer_start(iedServer, tcpPort); running = 1; signal(SIGINT, sigint_handler); while (running) { /* 更新模拟量测量值 */ float value = sinf(Hal_getTimeInMs() / 1000.f); IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_GenericIO_GGIO1_AnIn1_mag_f, value); Thread_sleep(100); } /* 停止服务器并清理资源 */ IedServer_stop(iedServer); IedServer_destroy(iedServer); 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提供商业许可证和支持选项。

技术支持与贡献

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

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

【免费下载链接】libiec61850Official repository for libIEC61850, the open-source library for the IEC 61850 protocols 项目地址: https://gitcode.com/gh_mirrors/li/libiec61850

Read more

SPARK Agent Protocol(SAP):AI Agent时代的前端开发革命指南

摘要:在AI Agent重塑软件交互范式的2026年,SPARK Agent Protocol(SAP)作为专为AI Agent通信设计的极简协议,正在成为前端开发者转型"智能体指挥官"的关键技术栈。本文深度解析SAP协议的核心设计理念、技术架构与前端集成方案,涵盖从协议基础到实战落地的完整路径。通过对比传统JSON-RPC与SAP的Token效率差异,结合MCP、A2A等前沿协议,为前端开发者提供一套可操作、可扩展的AI Agent开发框架。文章包含详细的技术对比表、架构流程图和实战代码示例,帮助开发者快速掌握SAP协议在前端场景下的应用,实现从"页面工程师"到"智能体架构师"的华丽转身。 关键词:SPARK Agent Protocol、AI Agent前端开发、MCP协议、Agent-to-Agent通信、前端智能化转型、多模态交互 🌟 引言:当AI Agent成为新"前端&

By Ne0inhk
Flutter for OpenHarmony:Flutter 三方库 dart_mcp — 开启鸿蒙端的 AI Agent 通信协议新纪元(适配鸿蒙 HarmonyOS Next ohos)

Flutter for OpenHarmony:Flutter 三方库 dart_mcp — 开启鸿蒙端的 AI Agent 通信协议新纪元(适配鸿蒙 HarmonyOS Next ohos)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net。 Flutter for OpenHarmony:Flutter 三方库 dart_mcp — 开启鸿蒙端的 AI Agent 通信协议新纪元(适配鸿蒙 HarmonyOS Next ohos) 前言 随着生成式 AI 的爆发,Model Context Protocol (MCP) 正逐渐成为连接大型语言模型(LLM)与外部工具(Tools)、数据源(Resources)及上下(Context)的标准开放协议。它由 Anthropic 发起,旨在解决 AI 代理在获取现实世界信息时的碎片化问题。 在 Flutter for OpenHarmony 开发中,我们不仅关注 UI

By Ne0inhk
人工智能:自然语言处理在金融领域的应用与实战

人工智能:自然语言处理在金融领域的应用与实战

自然语言处理在金融领域的应用与实战 学习目标 💡 理解自然语言处理(NLP)在金融领域的应用场景和重要性 💡 掌握金融领域NLP应用的核心技术(如文本分类、情感分析、风险评估) 💡 学会使用前沿模型(如BERT、GPT-3、Transformer)进行金融文本分析 💡 理解金融领域的特殊挑战(如数据敏感性、实时性要求高、语言专业性强) 💡 通过实战项目,开发一个金融新闻情感分析应用 重点内容 * 金融领域NLP应用的场景 * 核心技术(文本分类、情感分析、风险评估) * 前沿模型(BERT、GPT-3、Transformer)在金融领域的使用 * 金融领域的特殊挑战 * 实战项目:金融新闻情感分析应用开发 一、金融领域NLP应用场景 1.1 金融文本分析概述 金融领域是NLP技术应用的重要领域之一。金融文本数据包括新闻报道、公司公告、分析师报告、社交媒体评论等,这些数据蕴含着丰富的信息,可以帮助金融机构和投资者了解市场动态、评估风险、做出决策。 1.1.

By Ne0inhk
AI 也能写爬虫?基于 Bright Data + Warp CLI 的网页抓取实战

AI 也能写爬虫?基于 Bright Data + Warp CLI 的网页抓取实战

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、引言 1.1 写过爬虫的人,大概率都踩过这些坑 1.2 AI 已经很会写代码了,但它真的能“写爬虫”吗? 1.3 让 AI 不只是“写代码”,而是“驱动抓取” 二、技术与工具介绍 2.1 为什么“普通 AI + 爬虫代码”很难跑通真实网页? 2.2 Bright Data:爬虫工程真正的“底层基础设施” 2.3

By Ne0inhk