当前位置: 首页 > article >正文

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.kler.cn/a/376808.html

相关文章:

  • Linux: network: hw csum failure
  • 面试题:JVM(二)
  • git入门教程12:git命令与技巧
  • yolov8训练及测试(ubuntu18.04、tensorrt、ros)
  • Rust 力扣 - 3090. 每个字符最多出现两次的最长子字符串
  • 鸿蒙系统:核心特性、发展历程与面临的机遇与挑战
  • Android 百度面经
  • Golang反射原理
  • 问:Redis常见性能问题及解法?
  • LeetCode每日一题3226---使两个整数相等的位更改次数
  • C#WPF使用CommunityToolkit.Mvvm库
  • jmeter基础01-1_环境准备-windows系统安装jdk
  • 基本查询【MySQL】
  • token无感刷新+处理并发的后端方案
  • Vue3+TypeScript+Vite 后台管理项目_登录页面开发实战
  • 项目实战:基于Linux的Flappy bird游戏开发
  • 第二届开放原子大赛-开源工业软件算法集成大赛即将启动!
  • 网络基础知识概览
  • 贪心算法习题其三【力扣】【算法学习day.20】
  • angular登录按钮输入框监听
  • Python 定时调度任务
  • nignx代理获取真实地址request.getRequestURL()
  • el-select 的默认选中 以及后端返回的数据进行默认选中
  • Java多态特性的向上转型
  • SD-WAN分布式组网:构建高效、灵活的企业网络架构
  • 协议(OSI-tcp-udp)