GNSS和PTP时间同步的基础原理介绍

文章目录

    • 0. 概述
    • 1. 时间同步的基本原理
      • 1.1. GNSS时间同步
      • 1.2. PTP时间同步
    • 2. 时钟同步的步骤与机制
      • 2.1. 主从关系建立
      • 2.2. 频率同步
      • 2.3. 时间同步
      • 2.4. 单步和两步模式
      • 2.5. 时间同步方式:E2E和P2P
    • 3. 编程实现的差异
      • 3.1. GNSS时间同步的编程实现
      • 3.2. PTP时间同步的编程实现
    • 4. GNSS与PTP的协同工作及与PHY层的关系
      • 4.1. GNSS与PTP的协同工作
      • 4.2. 与PHY层的关系
    • 5. 总结

0. 概述

本文将介绍GNSS(全球导航卫星系统)和PTP(精密时间协议)时间同步技术的基础概念。

1. 时间同步的基本原理

UTC时间
PTP协议
PPS信号
GNSS系统
主时钟
交换机
从时钟 1
从时钟 2
从时钟 3
GNSS接收器

1.1. GNSS时间同步

工作原理:

  • 卫星授时: GNSS卫星(如GPS、北斗)配备高精度原子钟,持续广播包含时间和位置信息的导航信号。这些信号包含了精确的UTC(协调世界时)时间。
  • 信号接收与解码: 地面接收器通过天线接收多个卫星的信号,解调并解码获取卫星的时间戳和轨道信息。
  • 时间校准: 通过计算信号传输延迟,接收器精确计算当前UTC时间,用于校准本地系统时钟。

特点:

  • 绝对时间同步: 提供全球统一的时间基准,与UTC严格一致。
  • 独立于网络: 不依赖地面网络传输,适用于网络不可用或不可靠的环境。
  • 高精度: 在开阔环境下,时间同步精度可达到纳秒级。

1.2. PTP时间同步

PTP协议
主时钟
switch
从时钟1
从时钟2
从时钟3

工作原理:

  • 主从架构: PTP采用主从时钟架构,通过最佳主时钟算法(BMC)选举出网络中的主时钟(Grandmaster Clock,GMC)。
  • 时间戳交换: 主从设备之间周期性地交换PTP报文,包括Sync、Follow_Up、Delay_Req、Delay_Resp等,记录发送和接收的精确时间戳。
  • 延迟计算与校准: 从设备根据交换的时间戳,计算与主时钟之间的时钟偏差和网络传输延迟,调整本地时钟,实现同步。

特点:

  • 相对时间同步: 实现网络内各设备之间的高精度时间一致性。
  • 高精度分发: 在局域网内,可实现亚微秒级的时间同步精度。
  • 依赖网络质量: 对网络的延迟和抖动敏感,需要网络设备支持PTP。

基本概念:

  • PTP域: 一个应用了PTP协议的网络区域,域内有且只有一个主时钟。
  • 时钟节点: 包括普通时钟(OC)、边界时钟(BC)和透明时钟(TC)。
    • OC(Ordinary Clock): 具有单个PTP端口,作为主时钟或从时钟。
    • BC(Boundary Clock): 具有多个PTP端口,从上游同步时间,向下游发布时间。
    • TC(Transparent Clock): 不与其他设备保持时间同步,负责修正PTP报文的传输延迟。
  • 主从关系: 设备之间通过PTP协议建立的时钟同步关系。

2. 时钟同步的步骤与机制

2.1. 主从关系建立

  • Announce报文交换: 设备之间互相发送Announce报文,宣告自身的时钟属性。
  • 最佳主时钟算法(BMC): 根据时钟优先级、级别、精度等参数,选出最优时钟(GMC)。
    • 比较顺序: Priority1 > ClockClass > ClockAccuracy > OffsetScaledLogVariance > Priority2。
  • 端口状态确定: 设备端口根据BMC算法结果,被设置为Master、Slave或Passive状态。

2.2. 频率同步

  • Sync报文传输: 主时钟发送Sync报文,从时钟接收后提取时间戳。
  • Follow_Up报文: 在两步模式下,主时钟发送Follow_Up报文,提供精确的发送时间戳。
  • 频率调整: 从时钟根据接收到的时间戳,调整本地时钟频率,与主时钟保持一致。

2.3. 时间同步

  • 延迟测量: 通过Delay_Req和Delay_Resp报文,计算主从之间的网络传输延迟。
  • 时间偏差计算: 结合时间戳和延迟,计算本地时钟与主时钟的时间偏差。
  • 时钟校准: 调整本地时钟的相位,实现与主时钟的时间同步。

2.4. 单步和两步模式

  • 单步模式(One-Step): Sync报文直接携带精确的发送时间戳。
  • 两步模式(Two-Step): Sync报文不携带发送时间戳,需通过Follow_Up报文补充。

2.5. 时间同步方式:E2E和P2P

  • E2E(端到端,End-to-End): 终端设备直接测量与主时钟之间的延迟,适用于简单网络。
  • P2P(点对点,Peer-to-Peer): 设备之间逐跳测量延迟,适用于包含透明时钟的复杂网络。

3. 编程实现的差异

3.1. GNSS时间同步的编程实现

硬件接口通信:

  • 串口通信: 使用UART、USB等接口,与GNSS接收器进行数据通信。
  • 数据接收: 利用系统串口API,实时读取接收器的数据。

数据解析:

  • NMEA 0183协议解析: 解析如$GPRMC$GPZDA等语句,提取UTC时间等信息。

    // 示例:解析$GPRMC语句中的UTC时间
    sscanf(nmea_sentence, "$GPRMC,%2d%2d%2d.%*f,A,", &hour, &minute, &second);
    
  • 校验处理: 验证NMEA语句的校验和,确保数据完整性。

时间校准:

  • 系统调用: 使用settimeofday()clock_settime(),设置系统时钟。

    struct timeval tv;
    tv.tv_sec = utc_timestamp;
    tv.tv_usec = 0;
    settimeofday(&tv, NULL);
    
  • 时区处理: 根据系统配置,转换UTC时间为本地时间。

异常处理:

  • 信号丢失检测: 监控接收器状态,处理信号中断或数据异常。
  • 冗余设计: 配置备用时间源,提高系统可靠性。

3.2. PTP时间同步的编程实现

协议栈实现:

  • 消息处理: 实现PTP协议中的各种报文类型,遵循IEEE 1588标准。

    // 示例:发送Sync消息
    void send_sync_message() {ptp_sync_message_t msg;// 填充消息内容sendto(socket_fd, &msg, sizeof(msg), 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));
    }
    
  • 状态机管理: 实现PTP的状态机,包括初始化、侦听、主时钟、从时钟等状态。

网络通信:

  • 套接字编程: 使用原始套接字或UDP套接字,处理多播地址(如224.0.1.129)。
  • 硬件时间戳: 配置网络驱动和网卡,启用硬件时间戳功能,使用SO_TIMESTAMPING获取精确时间戳。

时间同步算法:

Master Slave Sync t1 Follow_Up t0 Delay_Req t2 Delay_Resp t3 Master Slave
  • 延迟与偏差计算: 根据PTP报文的时间戳,计算网络延迟和时钟偏差。

    offset = ((t2 - t1) + (t3 - t4)) / 2;
    delay = ((t2 - t1) - (t3 - t4)) / 2;
    
  • 时钟调整: 使用adjfreq()等函数,微调本地时钟频率。

系统调用:

  • 高精度时钟调整: 使用clock_adjtime(),精确调整系统时钟。

实时性与多线程:

  • 实时调度: 设置线程的调度策略和优先级,确保时间敏感操作的及时性。
  • 多线程架构: 分离网络通信、时间计算和时钟调整,提高程序性能。

硬件依赖:

  • PTP硬件支持: 使用支持IEEE 1588的网卡。
  • 驱动配置: 可能需要定制网络驱动,支持硬件时间戳和PTP处理。

4. GNSS与PTP的协同工作及与PHY层的关系

4.1. GNSS与PTP的协同工作

协同目的:

  • 全局统一与局部高精度: GNSS提供全球统一的UTC时间,PTP在局域网内实现高精度的时间分发。
  • 增强可靠性: GNSS信号受干扰时,PTP网络可继续维持设备间的时间同步。

典型方式:

  • GNSS作为PTP主时钟的时间源:
    • 时间源配置: 将GNSS接收器连接到PTP主时钟设备,主时钟获取GNSS时间。
    • 时间分发: 主时钟通过PTP协议,将精确时间同步到网络内的从设备。
  • 冗余机制:
    • 多主时钟配置: 部署多个PTP主时钟,使用不同的GNSS接收器或备用时钟。
    • 故障切换: 检测主时钟或GNSS故障时,自动切换到备用主时钟。

4.2. 与PHY层的关系

PHY层在PTP中的作用:

  • 硬件时间戳:
    • 精度提升: 在PHY层直接生成时间戳,消除软件层面的不确定性。
    • 实时捕获: 高性能网卡在PHY或MAC层集成时间戳功能。
  • PTP对PHY的要求:
    • IEEE 1588支持: 设备需硬件支持PTP,并提供相应驱动和接口。
    • 稳定时钟源: PHY层需具备稳定的时钟,以确保时间戳准确。

GNSS与PHY层的关系:

  • PPS信号输入:
    • 外部时钟参考: GNSS接收器提供的PPS(每秒脉冲)信号,可作为PHY层的时钟参考。
    • 时钟同步: 将PPS信号连接到网卡或交换机的时钟输入,引导PHY层时钟同步。
  • 同步性能提升: 通过硬件层面引入GNSS参考,提高PTP时间同步的精度和稳定性。

5. 总结

GNSS和PTP时间同步两者在时间同步领域各有优势。GNSS提供全球统一的绝对时间,适用于需要与UTC严格同步的场景;PTP则在局域网内提供高精度的时间分发,满足网络内设备之间的高一致性需求。可以将两者结合使用,以构建一个既具备全球统一时间基准,又能在局域网内实现高精度同步的系统。

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

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

相关文章

Python的全局锁GIL解析

Python的全局锁(GIL)是 CPython 解释器实现中的一个机制,用来确保任何时候只有一个线程执行 Python 字节码。这一机制存在于 CPython 中,主要是为了确保线程操作中的数据一致性,但也因此限制了多线程的并行执行效率。尤…

基于vue框架的的考研信息共享平台v0eyp(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:国家政策,用户,院校政策,院校信息,考研资料,资料分类,考研论坛 开题报告内容 基于Vue框架的考研信息共享平台开题报告 一、研究背景与意义 随着考研人数的逐年增长,考研学生对高效、便捷、个性化的信息获取需求愈发强烈。…

抽丝剥茧 分布式服务框架设计 理论设计篇

1、概述 前面几篇文章给大家详细的介绍了Zookeeper的基础概念以及应用的领域,今天我们讨论的话题是如何自研一套分布式服务框架。早些年有很多基于Dubbo和Zookeeper的分布式系统,这篇文章我们就来聊下如何设计一个分布式服务框架。 2、系统间交互 2.1、…

C++STL——list

C教学总目录 list 1、list简介2、构造函数3、迭代器4、访问和容量函数5、修改类函数6、操作类函数 1、list简介 list是带头双向循环链表&#xff0c;也是模板类&#xff0c;使用时要指明类型&#xff0c;包含于头文件<list> 由于list是双向循环链表&#xff0c;在任意位置…

YoloV8改进策略:Block改进|RFE模块,提高小物体的识别精度|即插即用|代码+修改过程

摘要 论文介绍 本文介绍了一种基于YOLOv5的人脸检测方法,命名为YOLO-FaceV2。该方法旨在解决人脸检测中的尺度变化、简单与困难样本不平衡以及人脸遮挡等问题。通过引入一系列创新模块和损失函数,YOLO-FaceV2在WiderFace数据集上取得了优异的表现,特别是在小物体、遮挡和困…

leaflet矢量瓦片vetorgrid显示聚合和图标裁剪显示不全的问题

1、问题现象 使用leaflet显示矢量瓦片会出现图片挤压的问题和图片裁剪显示不全的问题 2、解决办法和思路 1&#xff09;数据抽稀 方法一&#xff1a;在createTile方法通过控制feature在单张瓦片里面显示的数量&#xff0c;在小层级的时候进行筛选过滤&#xff0c;对点数据类…

Gitee push 文件

1、背景 想将自己的plecs仿真放到git中管理&#xff0c;以防丢失&#xff0c;以防乱改之后丢失之前版本仿真。此操作说明默认用户已下载git。 2、操作步骤 2.1 开启Git Bash 在文件夹中右键&#xff0c;开启Git Bash。 2.2 克隆文件 在Git Bash中打git clone git地址&#…

gitee 使用 webhoot 触发 Jenkins 自动构建

一、插件下载和配置 Manage Jenkins>Plugin Manager 搜索 gitee 进行安装 插件配置 1、前往Jenkins -> Manage Jenkins -> System -> Gitee Configuration -> Gitee connections 2、在 Connection name 中输入 Gitee 或者你想要的名字 3、Gitee host URL 中…

【JavaEE初阶 — 多线程】Thread类的属性

目录 Thread类的属性 1.Thread 的常见构造方法 2.Thread 的几个常见属性 2.1 前台线程与后台线程 2.2 setDaemon() 2.3 isAlive() Thread类的属性 Thread 类是JVM 用来管理线程的一个类&#xff0c;换句话说&#xff0c;每个线程都有一个唯一的Thread 对象与之关联&…

yocto是如何收集recipes,如何加入现有的bb文件

yocto通常是如何收集recipes: 在Yocto中&#xff0c;通过以下方式收集recipes&#xff1a; 层&#xff08;Layers&#xff09; Yocto项目使用层来组织recipes。层是包含配置文件、recipes和其他相关文件的目录结构。每个层有自己的目录&#xff0c;其中 recipes-* 目录用于存…

原生鸿蒙的竞争力到底如何?

目录 1. 崛起与挑战2. 安全机制3. 自动化检测前移4. 深入探讨开发者服务优势 1. 崛起与挑战 长期以来&#xff0c;移动操作系统市场被IOS和安卓所垄断&#xff0c;一直都难以推出完整的自主系统&#xff0c;面临诸多挑战&#xff0c;如推广困难、应用适配难度大&#xff0c;以及…

sublime Text中设置编码为GBK

要在sublime Text中设置编码为GBK&#xff0c;请按照以下步骤操作 1.打开Sublime Text编辑器, 2.点击菜单栏中的“Preferences”(首选项)选项&#xff0c;找打Package Control选项。 3.点击Package Control&#xff0c;随后搜索Install Package并点击&#xff0c;如下图 4.再…

KPRCB结构之ReadySummary和DispatcherReadyListHead

ReadySummary: Uint4B DispatcherReadyListHead : [32] _LIST_ENTRY 请参考 _KTHREAD *__fastcall KiSelectReadyThread(ULONG LowPriority, _KPRCB *Prcb)

Python爬虫:揭开淘宝商品描述的神秘面纱

在这个信息爆炸的时代&#xff0c;我们每天都在和时间赛跑。作为一名Python开发者&#xff0c;你是否曾梦想拥有超能力&#xff0c;能够瞬间揭开淘宝商品描述的神秘面纱&#xff1f;今天&#xff0c;就让我们一起化身为代码界的“福尔摩斯”&#xff0c;使用Python爬虫技术&…

HTML 多媒体标签详解:<img>、<object> 与 <embed>

文章目录 1. `<img>` 标签主要属性示例注意事项2. `<object>` 标签概述主要属性示例注意事项3. `<embed>` 标签概述主要属性示例注意事项小结在现代网页设计中,多媒体内容的使用变得越来越重要,因为它能够有效增强用户体验、吸引注意力并传达信息。HTML 提…

台式电脑如何改ip地址:全面解析与实操指南

有时候&#xff0c;由于IP地址冲突、网络安全、隐私保护或特定应用需求&#xff0c;我们可能需要更改台式电脑的IP地址。然而&#xff0c;对于不熟悉网络设置的用户来说&#xff0c;这一过程可能显得复杂而陌生。本文将通过全面解析与实操指南&#xff0c;帮助大家轻松掌握台式…

跟着红队笔记学习 tmux:渗透测试中的多终端利器

内容预览 ≧∀≦ゞ 跟着红队笔记学习 tmux&#xff1a;渗透测试中的多终端利器进入 tmux 前的准备tmux 概念简介tmux 基础操作会话管理命令会话管理快捷键会话内和会话外命令的区别 tmux 窗口和面板管理新建和管理窗口分割窗口为面板切换面板面板放大与恢复调整面板大小关闭面板…

【机器学习】24. 聚类-层次式 Hierarchical Clustering

1. 优势和缺点 优点&#xff1a; 无需提前指定集群的数量 通过对树状图进行不同层次的切割&#xff0c;可以得到所需数量的簇。树状图提供了一个有用的可视化-集群过程的可解释的描述树状图可能揭示一个有意义的分类 缺点&#xff1a; 计算复杂度较大, 限制了其在大规模数据…

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (2) - 移植 nanovg

AWTK 使用 nanovg 作为显示的后端&#xff0c;能否将 nanovg 成功移植到 HarmonyOS 上是一个关键问题&#xff0c;所以我们先尝试移植 nanovg&#xff0c;不过实际情况比预想的要简单&#xff0c;整个过程没有遇到任何意外的问题。 1. 将 AWTK 的代码取到 entry/src/main/cpp …

函数调用方法背后的原理

编译器实现函数调用时所遵循的一系列规则称为函数的“调用约定&#xff08;Calling Convention&#xff09;”&#xff0c;x86-64平台上的编译器随着操作系统的不同而有不同的约定。Windows上采用的是Wx64/Vector的标准,而类unix上采用systemV AMD64 ABI的调用标准。统一的调用…