当前位置: 首页 > news >正文

从零到一:libiec61850库自学笔记(一)

从零到一:libiec61850库自学笔记(一)

在工业自动化领域,IEC 61850标准已经成为智能变电站通信系统的基石。作为实现该标准的核心工具,libiec61850库为开发者提供了强大的支持。本文将从一个初学者的视角,分享如何从零开始搭建基于libiec61850的开发环境,并实现一个简单的MMS服务器。

1. 开发环境搭建

1.1 获取libiec61850源码

首先需要从GitHub获取libiec61850的源代码。这是一个开源项目,由MZ Automation维护:

git clone https://github.com/mz-automation/libiec61850.git

克隆完成后,进入项目目录进行编译:

cd libiec61850-1.6 sudo make

编译过程可能需要几分钟时间,取决于你的系统性能。如果遇到依赖问题,可能需要先安装以下开发工具:

  • gcc/g++编译器
  • make工具
  • Java运行时环境(用于模型生成工具)

1.2 项目目录结构规划

良好的目录结构能显著提高开发效率。建议按照以下方式组织项目文件:

/home/iec61850/ ├── 0.include/ # 存放库文件 │ ├── inc/ # 头文件 │ └── src/ # 源文件 ├── 1.main/ # 主程序 ├── 2.models/ # 数据模型 └── 3.tools/ # 工具脚本

创建这个目录结构的命令如下:

cd /home/ mkdir iec61850 cd iec61850/ mkdir 0.include 1.main 2.models 3.tools

2. 基础准备工作

2.1 复制必要的库文件

将编译好的库文件复制到项目目录中:

cd /home/iec61850/0.include/ mkdir src inc

复制头文件和源文件:

find /path/to/libiec61850-1.6/inc -name "*.h" -exec cp --parents {} /home/iec61850/0.include/inc/ \; find /path/to/libiec61850-1.6/src -name "*.h" -exec cp --parents {} /home/iec61850/0.include/src/ \;

2.2 准备模型生成工具

模型生成是IEC 61850开发的关键步骤。将模型生成工具复制到项目目录:

cd /path/to/libiec61850-1.6/tools/model_generator/ cp genmodel.jar /home/iec61850/3.tools

3. 自动化脚本编写

3.1 编译脚本

创建一个自动化编译脚本build.sh

#!/bin/bash WORK_DIR="/home/iec61850/1.main/MMS_Server/" cd "$WORK_DIR" || { echo "no find $WORK_DIR"; exit 1; } MMS=$(find . -maxdepth 1 -type f -name "*.c" -print -quit) gcc -o MMS_Server ./MMS_Server.c \ /home/iec61850/2.models/static_model.c \ -I/home/iec61850/0.include/src \ -I/home/iec61850/0.include/src/iec61850/inc \ -I/home/iec61850/2.models/1.mms_model \ -I/home/iec61850/0.include/src/mms/inc \ -I/home/iec61850/0.include/src/common/inc \ -I/home/iec61850/0.include/hal/inc \ -I/home/iec61850/0.include/src/logging \ -liec61850 -lpthread sudo chmod +x MMS_Server

3.2 模型生成脚本

创建模型生成脚本genmodel.sh

#!/bin/bash WORK_DIR="/home/iec61850/3.tools" cd "$WORK_DIR" || exit 1 ICD_FILE=$(find . -maxdepth 1 -type f \( -name "*.icd" -o -name "*.cid" \) -print -quit) if [ -z "$ICD_FILE" ]; then echo "错误:目录中未找到任何.icd或.cid文件" exit 1 fi echo "发现模型文件: $ICD_FILE" if [ ! -r "$ICD_FILE" ]; then echo "警告:文件不可读,尝试使用sudo" sudo chmod +r "$ICD_FILE" fi echo "正在生成模型文件..." sudo java -jar genmodel.jar "$(realpath "$ICD_FILE")" if [ -f "static_model.c" ]; then sudo chown $USER:$USER static_model.* echo "生成完成....." ls -l static_model.* else echo "生成失败......" exit 1 fi cp static_model.c /home/iec61850/2.models/1.mms_model/ cp static_model.h /home/iec61850/2.models/1.mms_model/ rm static_model.c rm static_model.h

4. 服务器程序开发

4.1 基本服务器框架

创建一个简单的MMS服务器程序MMS_Server.c

#include <stdio.h> #include <time.h> #include "iec61850_server.h" #include "hal_thread.h" #include "static_model.h" int main() { // 实例化服务器 printf("IED_Server_Remind: Create Server,Please wait......\n"); IedServer server = IedServer_create(&iedModel); if(!server){ printf("IED_Server_Error: The server failed to be created......\n"); return -1; } // 获取数据属性 DataAttribute* analogValue = (DataAttribute*) IedModel_getModelNodeByObjectReference(&iedModel,"YouweijiLDevice1/GGIO0.AnIn1.mag.f"); if (!analogValue) { printf("IED_Server_Error: Failed to discover valid data attributes......:\n"); printf("MMS Server Error: Failed to get analog value reference\n"); printf("Available paths in model:\n"); return -1; } // 启动服务器 IedServer_setLocalIpAddress(server, "0.0.0.0"); IedServer_start(server, 49152); printf("IED_Server_Remind: The server is created and the server is being started......\n"); printf("IED_Server_Remind: The server starts up successfully and ends the porcess to shut down the server......\n"); // 定义变量 float value = 0.0f; // 主循环 while(1) { value += 0.5f; printf("Currently:%.1f\n",value); // 更新到服务器 IedServer_lockDataModel(server); IedServer_updateFloatAttributeValue(server,analogValue,value); IedServer_unlockDataModel(server); Thread_sleep(2000); } // 关闭服务器 IedServer_stop(server); IedServer_destroy(server); return 0; }

4.2 编译与运行

使用之前创建的编译脚本进行编译:

cd /home/iec61850/1.main/ sudo ./build.sh

编译成功后,运行服务器程序:

sudo ./MMS_Server

5. 客户端连接测试

使用IEDScout等客户端工具进行测试:

  1. 打开与服务器相同的ICD模型文件
  2. 设置通信参数:
    • IP地址:指向运行服务器的Linux开发板地址
    • 端口号:49152(与服务器程序设置的端口一致)
  3. 保存并连接

如果一切正常,客户端应该能够接收到服务器定期发送的浮点数值,该数值每2秒增加0.5。

http://www.jsqmd.com/news/573739/

相关文章:

  • 探索制动能量回收BRS Simulink模型
  • Bidili Generator应用场景:自媒体配图、电商海报、概念设计一键生成
  • OpenClaw可视化监控:实时查看Phi-3-vision任务执行状态
  • 低代码不是「玩具」:企业级低代码平台必须具备的5个核心能力
  • OpenClaw学习助手方案:Qwen2.5-VL-7B解析教材插图生成记忆卡片
  • Linux命令-mysql(MySQL服务器客户端工具)
  • C语言实战:Kruskal算法与并查集在最小生成树中的高效应用
  • Real-ESRGAN-GUI:AI图像超分辨率处理的高效解决方案
  • 7步打造专业提示词链:提示词工程的进阶实践指南
  • 高效全场景iCalendar生成工具:从入门到精通的Node.js实现方案
  • AI辅助开发:描述需求,快马AI自动生成旅行商问题算法与可视化
  • 2026济南打桩机服务商五强揭晓:深度解析市场格局与口碑之选 - 2026年企业推荐榜
  • 珠海内有哪些做专精特新,创新型中小企业。权代理事务通过率高
  • AKS 集群 Helm 部署 Prometheus + Grafana 监控平台
  • Windows下OpenClaw安装避坑:对接Gemma-3-12b-it模型完整流程
  • PVNet复现实战:用PyTorch1.5.1+CUDA10.2搞定3D位姿估计(附数据集处理技巧)
  • 【Java函数计算高可用架构】:基于Spring Cloud Function的弹性扩缩容方案,已落地金融级日均亿级调用
  • OpenClaw+Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF:3种低成本内容生成方案对比
  • AI辅助开发新体验:描述你的流程,让快马智能生成和优化流程图代码
  • JSW-8016GM4 加固交换机
  • 如何轻松获取网页媒体资源?猫抓开源工具让资源提取效率提升3倍
  • AI赋能开发:让快马平台智能生成你的下一代oh-my-opencode项目
  • Iptables 实战指南:从基础规则到高级网络防护
  • ai辅助开发:用自然语言让快马生成复杂嵌套的vuedraggable看板应用
  • 告别重复编码,用快马AI生成黑马点评核心模块,开发效率翻倍
  • Kandinsky-5.0-I2V-Lite-5s图像转视频实战:Python入门者快速上手指南
  • Elsevier投稿跟踪:科研工作者必备的智能投稿管理工具终极指南
  • 3步搞定iOS微信聊天记录完整导出:WeChatExporter终极指南
  • 集团企业数字化:低代码如何实现多子公司、多系统的统一管理?
  • 掌握高效自动化抢票:3个专业策略突破90%成功率瓶颈