当前位置: 首页 > 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.cnnetsun.cn/news/1638583.html

相关文章:

  • OpenClaw技能扩展实战:安装Phi-3-vision-128k-instruct专用图文处理模块
  • 基于粒子群算法的电动汽车充电站和光伏最优选址和定容 关键词:选址定容 电动汽车 充电站位置 仿真平台
  • 为什么你的低代码表单提交总卡在onSubmit()?Java代理拦截器调试全链路拆解(含ByteBuddy源码级分析)
  • LeetCodeHot100(10/100)
  • Bidili Generator应用场景:自媒体配图、电商海报、概念设计一键生成
  • 中视天威智慧云录播巡课督导平台
  • 忍者像素绘卷效果对比:云端画布UI vs 传统暗色界面创作效率提升
  • 嵌入式RGB LED驱动库设计与STM32实现
  • Win11Debloat:轻量优化驱动Windows 11性能加速与隐私保护全指南
  • SEO数据分析工具如何进行网站诊断
  • Step3-VL-10B-Base模型Docker部署指南:实现一次构建处处运行
  • Companion Object - 伴生对象 类比java中的什么?
  • AutoDL上传大文件夹实操教程|避坑指南(解决中文路径、端口报错等高频问题)
  • 高效刷题新姿势:VSCode+LeetCode插件+Node.js环境一键配置指南
  • claude code复刻版:claw code源码分析(持续更新ing)
  • Windows下OpenClaw安装避坑:千问3.5-9B接口调试全记录
  • 从安装到实战:基于快马ai生成keil5与stm32开发环境一站式配置项目
  • 【CV前沿探索】自动驾驶协同感知技术:现状、挑战与未来演进
  • Polars 2.0清洗插件安装总失败?99%因conda-forge通道冲突!附权威诊断工具polars-diag v1.2一键检测+自动修复脚本(仅开放至本周日)
  • 【企业级Python并发革命】:从GIL依赖到无锁原生协程+Rust扩展的7层架构演进全图谱
  • 目标检测 目标检测算法改进 目标检测改进 yolo改进 yolov3 yolov4 yolov5 yolov6 yolov7 yolox算法改进,算法定制,算法指导
  • 为什么92%的Mojo早期项目在K8s上失败?——从Docker镜像分层、cgo交叉编译到GIL释放的全链路诊断手册
  • 【2026最新】微软常用运行库合集下载安装教程 | 微软运行库合集官网下载,系统必备
  • 基于Wan 3D Causal VAE(Show-o2)的模型,重新完整地分析 10分钟的视频 对应多少 vison token
  • 递归函数题 整数拆分
  • MH-Z19非阻塞驱动库:嵌入式CO₂传感器实时采样实践
  • 准备工作之动态内存分配[基于郝斌课程]
  • JavaScript 对象
  • MbsAgent 4.0景区游客服务热线解决方案
  • 机械手控制系统核心组成与实操操作详解