lib61850 代碼結構與系統架構深度分析

一、整體代碼結構概述

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…