一、整体代码结构概述

lib61850 采用模块化设计,核心代码位于src目录下,主要包含以下子目录:

src/
├── hal/                # 硬件抽象层
├── mms/                # MMS协议实现
├── goose/              # GOOSE协议实现
├── sv/                 # SV协议实现
├── scl/                # SCL文件解析
├── server/             # IEC 61850服务器实现
├── client/             # IEC 61850客户端实现
├── services/           # IEC 61850服务映射
├── model/              # 数据模型定义
└── util/               # 工具函数和辅助类
二、核心模块详细分析
(一)硬件抽象层(hal)

提供平台无关的底层接口,实现对操作系统功能的封装:

  • 文件操作:封装文件读写、目录操作等
  • 网络接口:封装 socket 通信、网络配置等
  • 线程管理:封装线程创建、同步等
  • 定时器:提供高精度定时功能
  • 内存管理:优化内存分配和释放
    // hal_network.c 关键接口
    int HalNetworkInterface_open(char* interfaceId);
    int HalNetworkInterface_sendPacket(int socketId, uint8_t* buffer, int length, uint8_t* dstMac, uint16_t etherType);
    int HalNetworkInterface_receivePacket(int socketId, uint8_t* buffer, int maxSize);
    (二)MMS 协议模块(mms)

    实现 IEC 61850-8-1 定义的 MMS 协议栈:

  • MMS 客户端:支持完整的 MMS 服务集
  • MMS 服务器:处理客户端请求,管理虚拟文件系统
  • ASN.1 编解码:高效实现 MMS PDU 的编解码
  • 连接管理:处理 MMS 会话建立和释放
    // mms_client.c 关键接口
    MmsConnection MmsConnection_create(void);
    MmsError MmsConnection_connect(MmsConnection self, const char* ipAddress, uint16_t tcpPort);
    MmsError MmsConnection_readVariable(MmsConnection self, const char* itemId, MmsValue** value);
    void MmsConnection_close(MmsConnection self);
    (三)GOOSE 模块(goose)

    实现 GOOSE 快速报文机制:

  • GOOSE 发布者:生成并发送 GOOSE 报文
  • GOOSE 订阅者:接收并解析 GOOSE 报文
  • 状态机管理:实现 stNum、sqNum、confRev 等状态变量的管理
  • 网络优化:支持组播、VLAN 等网络特性
    // goose_publisher.c 关键接口
    GoosePublisher GoosePublisher_create(void);
    void GoosePublisher_setAppId(GoosePublisher self, uint16_t appId);
    void GoosePublisher_addDataSetEntry(GoosePublisher self, const char* name, MmsValue* value);
    void GoosePublisher_publish(GoosePublisher self);
    (四)SV 模块(sv)

    实现 IEC 61850-9-2 定义的采样值传输:

  • SV 发布者:生成并发送采样值报文
  • SV 订阅者:接收并解析采样值报文
  • 同步机制:支持 IRIG-B 和 IEEE 1588 时间同步
  • SCL 解析器:解析 ICD/CID/SCD 文件
  • 模型构建:将 SCL 描述转换为内存中的逻辑节点模型
  • 配置导出:将内存模型导出为 SCL 文件
  • 模型验证:检查 SCL 文件的合规性
  • 数据压缩:优化采样值数据的传输效率
    // scl_parser.c 关键接口
    SclParser SclParser_create(void);
    SclParserError SclParser_parseFile(SclParser self, const char* fileName);
    int SclParser_getIedCount(SclParser self);
    const char* SclParser_getIedName(SclParser self, int iedIndex);
    (六)服务器模块(server)

    实现 IEC 61850 服务器功能:

  • 设备模型管理:管理逻辑设备、逻辑节点和数据对象
  • 服务处理:处理客户端的各类服务请求
  • 数据更新:支持数据对象的实时更新
  • 事件通知:实现报告、GOOSE 等事件通知机制
    // ied_server.c 关键接口
    IedServer IedServer_create(void);
    void IedServer_addLogicalDevice(IedServer self, LogicalDevice logicalDevice);
    void IedServer_start(IedServer self, uint16_t tcpPort);
    void IedServer_updateValue(IedServer self, const char* itemId, MmsValue* value);
    (七)客户端模块(client)

    实现 IEC 61850 客户端功能:

  • 连接管理:建立和维护与服务器的连接
  • 服务调用:实现各类 IEC 61850 服务的调用
  • 数据获取:读取和写入设备数据
  • 事件订阅:订阅报告、GOOSE 等事件

    三、系统架构分析
    (一)分层架构

    lib61850 采用严格的分层架构设计:

    ┌─────────────────────────────────────────────┐
    │                应用层                        │
    │  (IEC 61850 API: IedServer, IedClient, ...) │
    ├─────────────────────────────────────────────┤
    │               协议层                         │
    │  (MMS, GOOSE, SV, SCL解析)                   │
    ├─────────────────────────────────────────────┤
    │               抽象层                         │
    │  (HAL: 网络、线程、定时器、内存)              │
    ├─────────────────────────────────────────────┤
    │               平台层                         │
    │  (操作系统、硬件)                            │
    └─────────────────────────────────────────────┘
    
    (二)模块交互关系

    各模块之间通过定义良好的接口进行交互:

    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
    │  IedClient  │───►│   MMS       │───►│   HAL       │
    └─────────────┘    └─────────────┘    └─────────────┘│                 │                    ▲│                 ▼                    ││              ┌─────────────┐         │└─────────────►│   GOOSE     │─────────┘│              └─────────────┘│                 ▲│                 ││              ┌─────────────┐└─────────────►│    SV       │└─────────────┘
    
    (三)数据流向

    以客户端读取数据为例,数据流向如下:

    1. 应用层调用IedClient_readValue()
    2. 客户端模块构建 MMS Read 请求
    3. MMS 模块将请求编码为 ASN.1 格式
    4. 通过 HAL 网络接口发送请求
    5. 接收响应并通过相反路径解析返回给应用层
    四、设计亮点与技术优势
    1. 平台无关性

      • 通过硬件抽象层(HAL)实现跨平台支持
      • 易于移植到不同的操作系统和硬件平台
    2. 模块化设计

      • 各模块功能独立,降低耦合度
      • 支持按需选择和组合模块
    3. 高效性能

      • 优化的 ASN.1 编解码算法
      • 非阻塞 I/O 模型支持高并发
      • 内存池管理减少动态内存分配
    4. 可扩展性

      • 提供清晰的 API 接口,便于功能扩展
      • 支持自定义逻辑节点和服务
    五、应用场景与局限性
    1. 适用场景

      • IEC 61850 设备开发(保护装置、测控装置等)
      • 变电站自动化系统集成
      • 测试工具和协议分析仪开发
    2. 局限性

      • 对复杂 SCL 文件的解析能力有限
      • 缺乏对 IEC 61850-7-420(电力电子设备)的完整支持
      • 高级安全特性(如加密、认证)需要进一步扩展

    通过对 lib61850 代码结构和系统架构的分析,可以看出该库为 IEC 61850 协议实现提供了坚实的基础,同时也为开发者提供了灵活的扩展接口,适用于各类电力系统自动化应用开发。

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如若转载,请注明出处:http://www.pswp.cn/news/912086.shtml
    繁体地址,请注明出处:http://hk.pswp.cn/news/912086.shtml
    英文地址,请注明出处:http://en.pswp.cn/news/912086.shtml

    如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    linux程序保活

    需要解决的一个情况,在一些比较老的linux系统里,没有systemctl来进行程序的启动和重启。现在需要设计一个让程序高可用的方案。尽量提高程序可用性。 方案分成几步,属于补充和递进的关系。最简单的是用systemctl 托管,或者service…

    文件加密、隐藏软件 GiliSoft File Lock Pro v15.0 打造自己的私密空间

    “在这个连聊天记录都可能被截图的时代,你的电脑硬盘里藏着多少不敢示人的秘密?”上周同事借我电脑改PPT时,我突然想起D盘里存着的年度述职报告草稿——那里面密密麻麻标注着部门每个人的绩效短板,要是被误看到简直社死现场。好在…

    深入浅出Java NIO:原理、实战与性能优化

    深入浅出Java NIO:原理、实战与性能优化 一、技术背景与应用场景 随着高并发、低延迟场景愈发常见,传统的基于阻塞 I/O(BIO)模型难以满足海量连接的需求。Java NIO(Non-blocking I/O)通过 Selector、Chan…

    道可云人工智能每日资讯|中国航空工业集团召开人工智能大会

    道可云人工智能&元宇宙每日简报(2025年6月25日)讯,今日人工智能&元宇宙新鲜事有: 第22届中国—东盟商务与投资峰会聚焦人工智能热点 第22届中国—东盟商务与投资峰会(以下简称峰会)联络官会议24日在广西南宁召开。中国贸…

    Python实例题:文件内容搜索工具

    目录 Python实例题 题目 要求: 解题思路: 代码实现: Python实例题 题目 文件内容搜索工具 要求: 实现一个命令行工具,用于在指定目录下搜索包含特定文本的文件。支持以下功能: 递归搜索子目录区分…

    【Pandas】pandas DataFrame resample

    Pandas2.2 DataFrame Time Series-related 方法描述DataFrame.asfreq(freq[, method, how, …])用于**将时间序列数据转换为指定频率(resample to frequency)**的方法DataFrame.asof(where[, subset])用于查找时间序列中最接近指定时间点的非 NaN 值的…

    自动驾驶nuPlan数据集-入门使用和可视化操作

    文章目录 前言一、nuPlan 数据集下载及环境安装根据个人安装的路径将以下内容写入./bashrc 中二、跑通场景可视化总结 前言 自动驾驶行业知识点太多,不进则退,上班就得学习,天上掉金砖砸我脚好了 参考文档 参考1 一、nuPlan 数据…

    ApplovinMax接入Unity(包括我自己踩的一些坑)

    前言 ApplovinMax是一个广告聚合平台,他会自带自己的Applovin平台广告,在这个插件上面你可以下载其他的聚合渠道,与谷歌的Admob比较相似。都是广告聚合平台。 一. ApplovinMax SDK插件的导入 1.下载插件集成 | SDK 集成指南 | MAX | Suppo…

    linux系统执行过程中的5种特殊情况

    正在执行的用户态X切换用户态进程Y的过程为系统中常用的情况,但并非不能完全准确地反应系统的全部执行场景,还有一些场景比较特殊,主要包括以下5种情况 一.内核线程之间通过中断处理过程中的调度时机发生进程切换,与一般的情况非常…

    9. 元素拖拽

    元素拖拽 API 介绍 1. 拖放过程 整个拖放过程中,存在两个关键元素:拖拽元素、放置元素 拖拽元素:被拖拽的元素 drag:元素被拖拽时触发,从开始拖拽到拖拽结束前整个过程会一直持续的触发dragstart:元素被…

    用来提升同花顺软件进程优先级的C#程序

    为了提高炒股软件同花顺的运行速度,消除卡顿,编写一个C#程序,来设置同花顺进程的优先级。 using System; using System.Diagnostics; using System.Security.Principal;namespace ProcessPrioritySetter {class Program{static void Main(st…

    linux初阶---一些指令

    一.快速认识6-8个简单指令 1.pwd pwd指令是用来查看用户当前所处在的目录(目录的概念在理解上可以等效为文件夹)。 (1)在windows系统中我们通过文件路径表示唯一的文件,在linux中也是一样的,所以pwd是一个很…

    全国产传感器外壳的综合分析:材料选择、考量因素与尺寸精度影响

    全国产传感器作为现代工业、科研、生活等领域的 “感知触角”,其外壳的性能与质量直接关乎设备的稳定性、可靠性与使用寿命。从材料选型、关键考量因素到尺寸精度的影响,每个环节都需精细把控。 一、全国产传感器外壳材料的多元选择 全国产传感器外壳材…

    本地缓存Caffeine详解(含与Spring Cache集成)

    目录 一、介绍 二、Caffeine核心原理与架构设计 2.1 存储引擎与数据结构 2.2 缓存淘汰策略 2.3 并发控制机制 三、入门案例 3.1 引入依赖 3.2 测试接口 3.3 小结 四、Caffeine常用方法详解 4.1 getIfPresent 4.2 get 4.3 put 4.4 putAll 4.5 invalidate 4.6 inv…

    论特定领域软件架构

    20250413-作 题目 特定领域软件架构DSSA(Domain Specific Software Architecture)就是在一个特定应用领域中为一组应用提供组织结构参考的标准软件体系结构。对DSSA 研究的角度、关心的问题不同导致了对DSSA 的不同定义。DSSA 的必备特征如下。 一…

    iOS 远程调试与离线排查实战:构建非现场问题复现机制

    iOS开发者都知道,调试最怕两个字:“偶发”。用户说App闪退了,你点了十遍也没问题;测试说功能卡顿了,你抓日志时它又顺滑如新。最麻烦的是,这种“现场问题”往往在你连接不到用户设备时发生。 面对这种情况…

    SpringBoot -- 整合 Swagger3

    8.SpringBoot3 整合 Swagger3 由于目前主流的开发模式是前后端分离开发。所以前后端的交互需要通过一个 API&#xff08;开发接口&#xff09; 来规范。而这个接口的开发是由后端程序员编写的。“网站式 API 文档” 1.导入依赖 <!-- 引入swagger3(springdoc)的依赖--> …

    A Machine Learning Approach for Non-blind Image Deconvolution论文阅读

    A Machine Learning Approach for Non-blind Image Deconvolution 1. 研究目标与实际意义2. 创新方法与模型设计2.1 核心思路2.2 正则化反演:理论与公式2.2.1 退化模型2.2.2 正则化目标函数2.2.3 傅里叶域闭式解2.3 MLP去伪影:架构与训练2.3.1 MLP架构设计2.3.2 训练流程2.3.…

    微信小程序<rich-text>支持里面图片点击放大

    使用<rich-text>渲染类似下面的html代码&#xff1a; <div stylecolor: red>宠物友好<br/>xxx提供宠物友好服务&#xff0c;具体请见下图<br/></div> <img srchttps://xxx.com/xxx1.png width100%/> <img srchttps://xxx.com/xxx2.png…

    BVH 文件是一种用于记录 3D 动画数据的文件格式,常用于 3D 建模和动画制作。以下是对这个 BVH 文件的逐行解读

    BVH 文件是一种用于记录 3D 动画数据的文件格式&#xff0c;常用于 3D 建模和动画制作。以下是对这个 BVH 文件的逐行解读&#xff1a; HIERARCHY ROOT Hips { OFFSET 0 0 0 CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation JOINT LeftUpLeg { OFFSE…