win10下github libiec61850庫編譯調試sntp_example

libiec61850

https://github.com/mz-automation/libiec61850
v1.6

簡介

libiec61850 是一個開源(GPLv3)的 IEC 61850 客戶端和服務器庫實現,支持 MMS、GOOSE 和 SV 協議。它使用 C 語言(根據 C99 標準)實現,以提供最大的可移植性。它可以用于在運行 Linux、Windows 和 MacOS 的嵌入式系統和 PC 上實現符合 IEC 61850 的客戶端和服務器應用程序。包含一組簡單的示例應用程序,可以作為實現自己的 IEC 61850 兼容設備或與 IEC 61850 設備通信的起點。該庫已在許多商業軟件產品和設備中得到成功應用。

第三方庫

各第三方庫的設置參見libiec61850-1.6\third_party下各說明文件

mbedtls-3.6.0

https://github.com/Mbed-TLS/mbedtls
優先使用mbedtls-3.6.0
Mbed TLS 是一個實現加密原語、X.509 證書操作以及 SSL/TLS 和 DTLS 協議的 C 庫。
其小巧的代碼體積使其適用于嵌入式系統。

sqlite

與寫sqlite日志有關
https://sqlite.org/2025/sqlite-amalgamation-3490100.zip

winpcap 與win下運行有關,必須安裝WinPcap_4_1_3.exe并重啟

https://www.winpcap.org/install/bin/WinPcap_4_1_3.exe
https://www.winpcap.org/install/bin/WpdPack_4_1_2.zip

doxygen

https://www.doxygen.nl/
https://www.doxygen.nl/files/doxygen-1.13.2-setup.exe

linux下編譯

linux make編譯:

make examples
生成
libiec61850.a
運行測試
cd examples/server_example_basic_io
sudo ./server_example_basic_io
客戶端對應程序 iec61850_client_example1

make install //默認安裝到.install
make INSTALL_PREFIX=/usr/local install //指定安裝目錄
安裝目標將 API 頭文件和靜態庫復制到單個目錄中,
用于頭文件(INSTALL_PREFIX/include)
和靜態庫(INSTALL_PREFIX/lib)。

linux cmake編譯:

mkdir build
cd build
cmake …
make
sudo make install

win10下cmake vs編譯

cd C:\work\code\iec61850\libiec61850-1.6\winbuild
cmake -G “Visual Studio 17 2022” … -A x64
用vs2022打開winbuild下的sln文件

子工程介紹

hal

作用:libiec61850 的硬件抽象層(Hardware Abstraction Layer)子項目。
該模塊封裝了與操作系統相關的功能(如線程、套接字、定時器等),
使核心庫可以跨平臺運行。
在 Windows 下,hal 可能實現為:
基于 Win32 API 的線程和網絡接口。
替換 POSIX 兼容層(如 socket() 的 Windows 版本)。
生成路徑:libiec61850-1.6\winbuild\hal\Debug

iec61850

核心的靜態庫
生成路徑:libiec61850-1.6\winbuild\src\Debug

doc doc-net

與Doxygen有關,生成路徑 libiec61850-1.6\winbuild\doxydoc

ZERO_CHECK

作用:CMake 自動生成的“配置檢查”項目。
每次構建時,ZERO_CHECK 會先運行,檢查 CMakeLists.txt 或相關文件是否有變更。
如果有變更(如修改了編譯選項、添加/刪除了源文件),
它會自動重新生成 VS2022 的工程文件(.vcxproj 等)。

ALL_BUILD

作用:CMake 默認生成的“構建所有目標”項目。

RUN_TESTS

作用:運行項目的單元測試(如果項目配置了測試)。

PACKAGE

作用:生成分發包(如 ZIP、NSIS 安裝包等)。
典型輸出:libiec61850-1.6-win64.zip 或安裝程序。

INSTALL

作用:將編譯好的文件安裝到指定目錄(類似 make install)。

r_goose_publisher_example

工程以r_開頭的幾個sv goose示例程序與mbedtls tls加密庫有關
libiec61850-1.6\winbuild\config\stack_config.h 中有提示

sntp_example

SNTP(簡單網絡時間協議)是 NTP(Network Time Protocol) 的簡化版本,用于在計算機網絡中同步設備的系統時間。
輕量級:相比完整的 NTP,SNTP 實現更簡單,適合嵌入式系統或輕量級應用。
基于 UDP:默認使用 UDP 端口 123 進行通信。
時間同步:從 SNTP/NTP 服務器獲取精確的時間戳(通常來自原子鐘或 GPS 時間源)。

sntp_example源碼debug

sntp_client.c 代碼修改

libiec61850-1.6\src\sntp\sntp_client.c
parseResponseMessage中修改如下

    if (self->userCallback){if (self->userCallbackParameter) {//add*((uint64_t*)self->userCallbackParameter) = trnsTime + self->lastRequestTimestamp;}self->userCallback(self->userCallbackParameter, true);}

sntp_example.c 代碼修改

libiec61850-1.6\examples\sntp_example\sntp_example.c

#include "sntp_client.h"
#include "hal_thread.h"
#include <signal.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>static bool running = true;
static uint64_t g_nsTime = 0;#ifdef _WINDOWS
static BOOL WINAPI sigint_handler(DWORD signal) {if (signal == CTRL_C_EVENT) {printf("Ctrl+C received, exiting ...\n");running = false;return TRUE; // 表示已處理該事件}return FALSE;
}
#else
void sigint_handler(int signalId) {running = false;
}
#endif // _WINDOWSvoid show_time(nsSinceEpoch nsTime) {// 轉換為 Windows FILETIME (1601-01-01 為起點,100ns 單位)uint64_t t = (nsTime / 100ULL) + 116444736000000000ULL;FILETIME ft;ft.dwLowDateTime = (uint32_t)(t & 0xffffffff);ft.dwHighDateTime = (uint32_t)(t >> 32);SYSTEMTIME st;// 轉換為 SYSTEMTIME (便于讀取年月日時分秒)FileTimeToSystemTime(&ft, &st);SYSTEMTIME localSt;// 轉換為本地時間SystemTimeToTzSpecificLocalTime(NULL, &st, &localSt);printf("    Time: %04d-%02d-%02d %02d:%02d:%02d.%03d (nsTime==%llu)\n",localSt.wYear, localSt.wMonth, localSt.wDay,localSt.wHour, localSt.wMinute, localSt.wSecond,localSt.wMilliseconds, nsTime);fflush(stdout);
}static void sntpUserCallback(void* parameter, bool isSynced) {if (isSynced) {printf("SNTP: Clock synchronized %llu\n", *(uint64_t*)parameter);show_time(g_nsTime);}else {printf("SNTP: Clock not synchronized\n");}
}int main(int argc, char** argv) {SNTPClient client = SNTPClient_create();SNTPClient_addServer(client, "pool.ntp.org", 123);//"192.168.178.74"SNTPClient_setUserCallback(client, sntpUserCallback, (void*)&g_nsTime);SNTPClient_setPollInterval(client, 16);SNTPClient_start(client);
#ifdef _WINDOWSif (!SetConsoleCtrlHandler(sigint_handler, TRUE)) {printf("Error: Failed to set Ctrl+C handler!\n");}
#elsesignal(SIGINT, sigint_handler);
#endif // _WINDOWSwhile (running) {Thread_sleep(100);}SNTPClient_destroy(client);getchar();return 0;
}

SNTP: Failed to bind to port 123 問題處理

查詢123端口被占用問題

libiec61850-1.6\winbuild>netstat -ano | findstr “:123”
UDP 0.0.0.0:123 : 1852
UDP [::]:123 : 1852

libiec61850-1.6\winbuild>tasklist | findstr “1852”
svchost.exe 1852 Services 0 7,204 K
svchost.exe,通常是 w32time 服務。

停用w32time

net stop w32time
sc config w32time start= disabled

恢復w32time

sc config w32time start= auto
net start w32time

運行效果

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77275.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Microsoft SQL Server Management 一鍵刪除數據庫所有外鍵

DECLARE ESQL VARCHAR(1000); DECLARE FCursor CURSOR --定義游標 FOR (SELECT ALTER TABLE O.name DROP CONSTRAINT F.name; AS CommandSQL from SYS.FOREIGN_KEYS F JOIN SYS.ALL_OBJECTS O ON F.PARENT_OBJECT_ID O.OBJECT_ID WHERE O.TYPE U AND F.TYPE …

新型多機器人協作運輸系統,輕松應對復雜路面

受到魚類、鳥類和螞蟻等微小生物體協作操縱的啟發&#xff0c;研究人員開發了多機器人協作運輸系統&#xff08;Multirobot Cooperative Transportation Systems&#xff0c;MRCTS&#xff09;運輸單個機器人無法處理的重型超大物體&#xff0c;可用于搜救行動、災難響應、軍事…

Framework Binder架構分解

整個 Binder 架構所涉及的總共有以下 5 個目錄&#xff1a; 1. /framework/base/core/java/(Java) 2. /framework/base/core/jni/ (JNI) 3&#xff0c;/framework/native/libs/binder (Native) 4&#xff0c;/framework/native/cmds/servicemanager/ (Native) 5&#xff0c…

騰訊云對象存儲以及項目業務頭像上傳

騰訊云上傳步驟&#xff1a; service-vod模塊化中 ①、參考文檔&#xff0c;引入依賴 ②、配置文件application.properties ③、創建工具類 初始化bean的時候讀取配置文件 Component public class ConstantPropertiesUtil implements InitializingBean{Value("${t…

LeetCode hot 100—括號生成

題目 數字 n 代表生成括號的對數&#xff0c;請你設計一個函數&#xff0c;用于能夠生成所有可能的并且 有效的 括號組合。 示例 示例 1&#xff1a; 輸入&#xff1a;n 3 輸出&#xff1a;["((()))","(()())","(())()","()(())",&…

SpringBoot企業級開發之【文章分類-新增文章分類】

看一下新增文章的需求&#xff1a; 接口文檔&#xff1a; 開發思路&#xff1a; 先在controller下去創建add方法&#xff0c;方法內導入Service類獲取add的結果&#xff1b;再在Service接口下去創建add的方法&#xff1b;然后在Service實現類下去實現方法的作用&#xff0c;且導…

Minecraft盔甲機制詳解(1.9之后)

Minecraft的盔甲有很多種&#xff0c;但是評判盔甲的好壞&#xff0c;通常玩家會使用一個變量來評判——護甲值 護甲值的機制很簡單&#xff0c;一格護甲值 &#xff08;半個灰色的衣服圖標&#xff09;最多能提供4%的防御 護甲值在不開作弊的生存模式理論上限是20點&#xf…

為什么要給單片機植入操作系統

給單片機植入操作系統&#xff08;通常是實時操作系統&#xff0c;RTOS&#xff09;主要是為了在資源有限的環境中實現更高效、更可靠的多任務管理和系統調度。以下是主要原因和優勢&#xff1a; 1. 多任務并行處理 背景&#xff1a;單片機通常需要同時處理多個任務&#xff0…

Arduino+ESP826601s模塊連接阿里云并實現溫濕度數據上報

ArduinoESP826601s模塊連接阿里云并實現溫濕度數據上報 一、前言二、準備工作三、程序代碼1. Arduino的程序2. ESP826601的程序3. 上面程序需要注意的地方 四、運行結果五、結束語 一、前言 看完我這三篇文章&#xff0c;相信各位朋友對于阿里云物聯網平臺的使用都有了一定的認…

Java 工廠設計模式詳解:用統一入口打造靈活可擴展的登錄系統----掌握 Spring 源碼的基礎第一步

一、前言 在實際開發中&#xff0c;我們經常面臨以下場景&#xff1a; 系統支持多種登錄方式&#xff08;用戶名密碼、管理員登錄、OAuth 登錄、短信登錄等&#xff09; 每種登錄方式的認證邏輯不同 我們希望對外提供一個統一的接口調用&#xff0c;而不暴露具體實現 這個…

Windows Acrobat Pro DC-v2025.001.20435-x64-CN-Portable便攜版

Windows Acrobat Pro 鏈接&#xff1a;https://pan.xunlei.com/s/VOO1nMjQ1Qf53dyISGne0c_9A1?pwdsfgn# Acrobat Pro 2024 專業增強版特色 ● 創建和編輯 PDF 文件&#xff1a;可以將各種類型的文檔轉換為 PDF 格式&#xff0c;并進行編輯和修改。 ● 合并和拆分 PDF&#…

【2025“華中杯”大學生數學建模挑戰賽】C題:就業狀態分析與預測 詳細解題思路

目錄 2025“華中杯”大學生數學建模挑戰賽C題 詳細解題思路一、問題一1.1 問題分析1.2 數學模型 1.3 Python代碼1.4 Matlab代碼 二、問題二2.1 問題分析2.2 數學模型 2.3 Python代碼2.4 Matlab代碼 三、問題三3.1 問題分析 四、問題四4.1 問題分析與數學模型 2025“華中杯”大學…

識別法院PDF文件特定字段并插入數據庫【正則表達式+本地化部署】

pdf解析法院協助單特定字段&#xff0c;開源項目&#xff0c;結合若依項目進行開發&#xff0c;不連互聯網&#xff0c;本地開發部署&#xff0c;前端使用vue3技術,后端用若依分離版spring botot技術&#xff0c;實現將pdf法院協助執行通知書中的特定字段如&#xff1a;時間、文…

擁抱健康養生,開啟活力生活

在快節奏的現代生活中&#xff0c;人們愈發重視健康養生。它并非高深莫測的學問&#xff0c;而是融合于日常點滴&#xff0c;對我們的生活有著深遠影響。 合理飲食是健康養生的基石。一日三餐&#xff0c;應遵循營養均衡原則。多攝入蔬菜、水果&#xff0c;它們富含維生素與膳食…

無人機姿態穩定與動態控制模塊概述!

一、設計難點 1. 動態算力需求與硬件能力的不匹配** 無人機邊緣計算設備通常受限于體積和重量&#xff0c;導致其計算單元&#xff08;如CPU、GPU&#xff09;的算力有限&#xff0c;難以應對突發的高負載任務&#xff08;如實時圖像處理、AI推理&#xff09;。 挑戰&am…

MySQL 臨時表介紹

在 MySQL 數據庫中&#xff0c;臨時表是一種特殊類型的表&#xff0c;它在數據庫會話期間存在&#xff0c;會話結束時自動刪除。臨時表為處理特定的、臨時性的數據操作任務提供了一種高效且便捷的方式。 一、臨時表的創建 使用CREATE TEMPORARY TABLE語句來創建臨時表。其語法…

量子糾纏物理本質、技術實現、應用場景及前沿研究

以下是關于 量子糾纏(Quantum Entanglement) 的深度解析,涵蓋物理本質、技術實現、應用場景及前沿研究,以技術視角展開: 一、量子糾纏的物理本質 1. 核心定義 量子糾纏是多個量子系統(如粒子)間的一種關聯狀態,表現為: 非局域性:糾纏態粒子無論相距多遠,測量其中一…

掃雷-C語言版

C語言掃雷游戲設計&#xff08;完整版&#xff09; 游戲背景 掃雷是一款經典的益智類單人電腦游戲&#xff0c;最早出現在1960年代&#xff0c;并在1990年代隨著Windows操作系統而廣為人知。游戲目標是在不觸發任何地雷的情況下&#xff0c;揭開所有非地雷的格子。玩家需要根…

深入理解 Linux 權限管理:從 Shell 到文件權限

&#x1f33c;&#x1f33c; 在 Linux 系統中&#xff0c;權限是保障系統安全與穩定的核心之一。每個操作都可能涉及權限的管理和控制&#xff0c;特別是當你開始以不同用戶的身份進行操作時。本文將通過生動的比喻與詳細的技術解析&#xff0c;帶你一起深入理解 Linux 權限系統…

【Java面試系列】Spring Cloud微服務架構中的分布式事務解決方案與Seata框架實現原理詳解 - 3-5年Java開發必備知識

【Java面試系列】Spring Cloud微服務架構中的分布式事務解決方案與Seata框架實現原理詳解 - 3-5年Java開發必備知識 引言 在微服務架構中&#xff0c;分布式事務是一個不可避免的挑戰。隨著業務復雜度的提升&#xff0c;如何保證跨服務的數據一致性成為了面試中的高頻問題。本…