嵌入式设备实现NTP同步:一种低成本的时间管理解决方案 (嵌入式 ntp服务器)

时间同步是嵌入式设备开发中必要的一个关键特性。通过实现时间同步,可确保设备在特定时间执行特定任务,保证设备间的协调,为设备数据采集和处理提供正确的时间戳,从而提高系统的可靠性和性能。其中一种实现时间同步的方法就是通过网络时间协议(NTP)同步。这种方法是一种低成本、智能化的解决方案,本文将深入探讨如何在嵌入式设备上实现NTP同步。

一、NTP概述

网络时间协议(Network Time Protocol,简称NTP)是一种互联网协议,用于同步网络中设备的时间。NTP可以被用来将一个设备的本地时钟与其他可达的NTP服务器同步。它通过使用UDP协议将时间信息从服务器传送到客户端。NTP服务器的信号可以由GPS设备,无线电波,或网络中其他可靠的时间源提供。

二、NTP同步机制

NTP同步其实就是让本地设备通过网络协议方式获取到正确的时间。NTP协议可以建立在TCP或UDP的基础之上,但通常选择UDP协议,因为UDP协议不需要建立连接,能够更快的实现数据传输。下图是NTP同步的流程:

1、客户端向NTP服务器发送请求。

2、NTP服务器向客户端发送一个时间戳。

3、客户端通过特殊的算法计算两次时间差,并将差异值应用到本地设备钟表中。

4、当差值太大时,客户端将采用退避算法来解决时间差过大的问题。

NTP同步机制使得多个设备都能拥有准确的时间戳,避免数据不一致造成的系统崩溃,保证了设备的可靠性和稳定性。

三、NTP同步的实现

嵌入式设备通过软件实现NTP同步一般需要用到NTP客户端库和RTC芯片。使用NTP客户端库可以方便的从NTP服务器获得正确的时间,并把时间写入RTC芯片中,再通过RTC芯片进行实时时钟计时。下面是一个利用NTP同步你设备实例的代码:

“`c++

#include

#include

#include

#include

#include

#include

#include

#include

// OLED

#define SCREEN_WIDTH 128

#define SCREEN_HEIGHT 32

#define OLED_RESET -1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// NTP

WiFiUDP ntpUDP;

NTPClient timeClient(ntpUDP);

// RTC

RTC_DS1307 rtc;

void setup() {

// OLED

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {

Serial.println(“SSD1306 allocation fled”);

for(;;);

}

display.clearDisplay();

display.setTextSize(1);

display.setTextColor(SSD1306_WHITE);

display.setCursor(0, 0);

// WIFI

WiFi.begin(“ssid”, “password”);

while (WiFi.status() != WL_CONNECTED) {

delay(1000);

Serial.println(“Connecting to WiFi…”);

}

// NTP

timeClient.begin();

timeClient.setTimeOffset(28800); // 8小时时差,可以根据实际情况调整

// RTC

Wire.begin();

rtc.begin();

if(!rtc.isrunning()) {

Serial.println(“RTC is NOT running!”);

rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // 设置当前时间

}

}

void loop() {

timeClient.update();

DateTime now = timeClient.getEpochTime();

display.clearDisplay();

display.setCursor(0, 0);

display.println(“Time: ” + now.toString());

display.display();

// RTC

if(rtc.isrunning()) {

rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), now.minute(), now.second()));

}

delay(1000);

}

“`

通过NTPClient库,设备可以轻松地获取正确的时间,并且NTPClient库提供了一些方法来控制实现如何更新时间。通过RTC库,设备可以将时间存储在RTC芯片中,来保持准确的时间。

四、NTP同步的重要性

对于一个企业而言,准确的时间是一项非常重要的资源,尤其是对于需要时间同步的企业,如金融机构和制造业公司。NTP协议的应用可以确保准确的时间和数据同步,避免了因误差累积引起可预测和不可预测的问题。NTP同步是应用广泛的实时控制系统中必要的关键特性,其中包括物联网设备。

在制造业中,NTP协议的应用可确保整个制造流程的一致性。例如,在同步的物联网设备中,传感器收集温度,速度和其他重要数据,此数据由计算机进行实时分析,通过对设备及完成任务的监控,制造商可以保证在总生产流程保持预算和时间进度。

相关问题拓展阅读:

如何将PC配置为时钟服务器即NTP

Windows XP、2023、2023系统使用NTP校时服务

1、 双击任务栏右下角“时间”,打开 设置对弯喊话框,如图1。

图1打开 设置对话框

2、 选择 标签, 选中 选项,在 中填入时间服务器的ip地址或者域名。点击 并按 可直接同步。如图2。

图2 进行时间同步

以下利用操作系统提供的校时服务(Windows 2023适用):

1、 在 中打开 ,再打开 ,在服务中找到

2、 双击服务名称,在打开的“Windows Time的属性”中设置“启动类型”为“自动”,再按下启动按钮。如图3 。

图3 选择Windows Time的属性为自动启动

3、 然后切换到命令行下在DOS命令行下让Windows使用时间服务器:

net time /setsntp:… (时间服务器域名或者ip地址)

要想立刻与时间服务器同步需要重启时间服务,相应的命令是:

net stop w32time

net start w32time

图4 通过命令行实现时间同步

以后你的机器就会有一个准确的时间。说明:W32tm.exe 是用来同步本地计算机与远程计算机或域的时间的类似命令。由于其灵活性,W32tm.exe 是时间同步的首选方法。默认情况下Windows 2023的时间服务w32time是关闭的。Windows 包含 W32Time,它是 Kerberos 身份验证协议所需的时间服务工具。Windows 时间服务的目的是确保组织中运行 Microsoft Windows 2023 或更高版本的埋旁野所有计算机都使用同一个时间。

系统默认的时间同步间隔只是7天,我们无法自由选择,使得这个功能在灵活性方面大打启物折扣。其实,我们也可以通过修改注册表来手动修改它的自动同步间隔。

开始——运行,输入“Regedit”进入注册表编辑器,展开 ,双击 SpecialPollInterval 键值,将对话框中的“基数栏”选择“十进制”。

现在看到话框中显示的数字正是自动对时的间隔(以秒为单位),比如默认的604800就是由7(天)×24(时)×60(分)×60(秒)计算来的,看明白了吧,如果您想让XP以多长时间自动对时,只要按这个公式算出具体的秒数,再填进去就好了。比如我填了3天,就是259200。

我就是这样用的,很好。

Windows(2023)下配置NTP时间服务器

一、服务端设置:

因为默认情况下,WINDOWS SERVER 2023 是作为NTP客户端工作的 ,所以必须通过修改

注册表

,以使系统作为

NTP服务器

运行。注意,工作之前请先备份注册表文件。

1、通过开始菜单,输入regedit命令后打开注册表设定画面,此时请一定备份注册表文件。

2、修改以下选项的键值

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\

NtpServer内的「岁敬Enabled」设定为1,打开NTP服务器功能

3、修改以下键值

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\

AnnounceFlags设定为5,该设定强制主机将它自身宣布为可靠的时间源,从而使用内置的

互补金属氧化物半导体

(CMOS) 时钟。

4、在dos

命令行

执行以派雀中下命令,确保以上修改起作用

net stop w32time

net start w32time

推荐计划;如果该服务器和internet连接,那么为了避免服务器和internet上的ntp同步,更好追加以下配置:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\

NtpClient的「enable」设定为0 以防止作为客户端自动同步外界的时间服务

二、客户设置:

1、指定主时间服务器。在DOS方式输入“net time /setsntp:ntp.sjtu.edu.cn”,这里我们指定ntp.sjtu.edu.cn是主时间服务器,也可以是其它地址(210.72.145.44)。

2、自由设定XP时间同步间隔:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\

怎样把WINDOWS7设置成NTP时间服务器

1. 修改注册表项

  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer

  判陪Enabled 设定为 1(默认0)

  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\

  AnnounceFlags 设定为 5 (默认 10)

 掘明蠢 

  2. 禁用防火墙或设置例外,UDP 123端口。

  3. 运行槐孙 services.msc,将Windows Time服务设置成自动(延迟启动)

推荐使用linux操作系统搭建ntp服务器

一、选择服务器基准时钟,可选择内部硬件时钟和外部NTP授时服务器。 (首先要保证自己的时间准确)

A.配置 Windows 时间服务以使用服务器内部硬件时钟

(1). 单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。

(2). 找到并单击下面的注册表子项:

程序代码

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags

(3). 在右窗格中,右键单击“AnnounceFlags”,然后单击“修改”。

(4). 在“编辑 DWORD 值”的“数值数郑孝据”框中键入 A,然后单击“确定”。

B.配置 Windows 时间服务以使用外部时间源

(1). 指定时间源。为此,请按照下列步骤操作:

a. 找到并单击下面的注册表子项:

程序代码

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\NtpServer

b. 在右窗格中,右键单击“NtpServer”,然后单击“修改”。

c. 在“编辑值”的“数值数据”框中键入 Peers,然后单击“确定”。

注意:Peers 是一个占位符,应替换为您的计算机从中获取时间戳的对等端列表(以空格分隔)。列出的每个 DNS 名称都必须是唯一的。必须在每个 DNS 名称后面附加 ,0x1。如果不在每个 DNS 名称后面附加 ,0x1,则在下面步骤中所做的更改将不会生效。

(2). 选择轮询间隔。为此,请按照下列步骤操作:

a. 找到并单击下面冲丛局的注册表子项:

程序代码

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient

\SpecialPollInterval

b. 在右窗格中,右键单击“SpecialPollInterval”,然后单击“修改”。

c. 在“编辑 DWORD 值”的“数值数据”框中键入 TimeInSeconds,然后单击“确定”。

注意:TimeInSeconds 是一个占位符,散让应替换为您希望各次轮询之间的间隔秒数。建议值为 900(十进制)。该值将时间服务器配置为每隔 15 分钟轮询一次。

(3). 配置时间校准设置。为此,请按照下列步骤操作:

a. 找到并单击下面的注册表子项:

程序代码

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config

\MaxPosPhaseCorrection

b. 在右窗格中,右键单击“MaxPosPhaseCorrection”,然后单击“修改”。

c. 在“编辑 DWORD 值”的“基数”框中单击以选择“十进制”。

d. 在“编辑 DWORD 值”的“数值数据”框中键入 TimeInSeconds,然后单击“确定”。

注意:TimeInSeconds 是一个占位符,应替换为适当的值,如 1 小时 (3600) 或 30 分钟 (1800)。您选择的值将因轮询间隔、网络状况和外部时间源而异。

e. 找到并单击下面的注册表子项:

程序代码

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\

MaxNegPhaseCorrection

f. 在右窗格中,右键单击“MaxNegPhaseCorrection”,然后单击“修改”。

g. 在“编辑 DWORD 值”的“基数”框中单击以选择“十进制”。

h. 在“编辑 DWORD 值”的“数值数据”框中键入 TimeInSeconds,然后单击“确定”。

注意:TimeInSeconds 是一个占位符,应替换为适当的值,如 1 小时 (3600) 或 30 分钟 (1800)。您选择的值将因轮询间隔、网络状况和外部时间源而异。

二、配置NTP授时服务器

(1). 将服务器类型更改为 NTP。为此,请按照下列步骤操作:

a. 单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。

b. 找到并单击下面的注册表子项:

程序代码

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\Type

c. 在右窗格中,右键单击“Type”,然后单击“修改”。

d. 在“编辑值”的“数值数据”框中键入 NTP,然后单击“确定”。

(2). 将 AnnounceFlags 设置为 5。为此,请按照下列步骤操作:

a. 找到并单击下面的注册表子项:

程序代码

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags

b. 在右窗格中,右键单击“AnnounceFlags”,然后单击“修改”。

c. 在“编辑 DWORD 值”的“数值数据”框中键入 5,然后单击“确定”。

(3). 启用 NTPServer。为此,请按照下列步骤操作:

a. 找到并单击下面的注册表子项:

程序代码

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer

b. 在右窗格中,右键单击“Enabled”,然后单击“修改”。

c. 在“编辑 DWORD 值”的“数值数据”框中键入 1,然后单击“确定”。

三、使配置即时生效

1. 退出注册表编辑器。

2. 在命令提示符处,键入以下命令以重新启动 Windows 时间服务,然后按 Enter:

程序代码

net stop w32time && net start w32time

四、配置防火墙允许NTP访问

如果你需要在服务器所在区域外访问该服务器的NTP服务,需要在防火墙上添加允许:

程序代码

名称 端口 协议 方向

SNTP时间基准 123 UDP 入

五、相关注册表说明

注册表项 MaxPosPhaseCorrection

路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config

注意: 该项指定服务可进行的更大正时间校准量(以秒为单位)。如果服务确定某个更改幅度大于所需的幅度,它将记录一个事件。(0xFFFFFFFF 是一种特殊情况,它表示总是校准时间。)域成员的默认值是 0xFFFFFFFF。独立客户端和服务器的默认值是 54,000,即 15 小时。

注册表项 MaxNegPhaseCorrection

路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config

注意: 该项指定服务可进行的更大负时间校准量(以秒为单位)。如果服务确定某个更改幅度大于所需的幅度,它将转而记录一个事件。(-1 是一种特殊情况,它表示总是校准时间。)域成员的默认值是 0xFFFFFFFF。独立客户端和服务器的默认值是 54,000,即 15 小时。

注册表项 MaxPollInterval

路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config

注意: 该项指定系统轮询间隔所允许的更大间隔(单位是对数表示的秒)。尽管系统必须根据预定的间隔进行轮询,但是提供程序可以根据请求拒绝生成示例。域成员的默认值是 10。独立客户端和服务器的默认值是 15。

注册表项 SpecialPollInterval

路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient

注意: 该项指定手动对等端的特殊轮询间隔(以秒为单位)。当启用 SpecialInterval 0x1 标志时,W32Time 将使用此轮询间隔而非操作系统确定的轮询间隔。域成员的默认值是 3,600。独立客户端和服务器的默认值是 604,800。

注册表项 MaxAllowedPhaseOffset

路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config

注意: 该项指定 W32Time 尝试使用时钟速率调整计算机时钟的更大偏移量(以秒为单位)。当偏移量大于该速率时,W32Time 将直接设置计算机时钟。域成员的默认值是 300。独立客户端和服务器的默认值是 1。

备注说明:

1、一般操作:

1)将时间服务器改成,授时中心地址(210。72。145。44)

net time /setsntp:210.72.145.44

2)启动时间同步服务

sc start w32time

3)同步时间

w32tm /resync (实际上,大多数情况下,光作第三步即可。) 2、启动前提:

DOS启动Window Time服务: net stop w32time 、 net start w32time

要启动 Window Time 服务,必须先启动 Remote Access Connection Manager 服务。

  1. 修改注册表项

  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer

  Enabled 设定为 1(默认0)

  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\

  AnnounceFlags 设定陆弯为 5 (默认 10)

  

  2. 禁早空闷亏握用防火墙或设置例外,UDP 123端口。

  3. 运行

services.msc

,将Windows Time服务设置成自动(延迟启动)

常用的 NTP 服务器有哪些

210.72.145.44 (国家授时中心服务器IP地址)

ntp.sjtu.edu.cn 202.120.2.101 (上海交通大学网络中心NTP服务器地址)

s1a.time.edu.cn北京邮电大学

s1b.time.edu.cn清华大学

s1c.time.edu.cn北京大学

s1d.time.edu.cn东南大学

s1e.time.edu.cn清华大学胡掘哗

s2a.time.edu.cn清华大学

s2b.time.edu.cn清华大学

s2c.time.edu.cn北京邮电大学

s2d.time.edu.cn西南地区网络中心

s2e.time.edu.cn西裤行北地区网络中心

s2f.time.edu.cn东北地区网络中心

s2g.time.edu.cn华东南地区网络中心

s2h.time.edu.cn四川大学网络管理中心

s2j.time.edu.cn大连理工大学网络中心

s2k.time.edu.cn CERNET桂林主节点

s2m.time.edu.cn 北京大散拍学

关于嵌入式 ntp服务器的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 嵌入式设备实现NTP同步:一种低成本的时间管理解决方案 (嵌入式 ntp服务器)