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

文章目录

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

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

时间校准:

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

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

异常处理:

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

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

协议栈实现:

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

    c 复制代码
    // 示例:发送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报文的时间戳,计算网络延迟和时钟偏差。

    c 复制代码
    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则在局域网内提供高精度的时间分发,满足网络内设备之间的高一致性需求。可以将两者结合使用,以构建一个既具备全球统一时间基准,又能在局域网内实现高精度同步的系统。

相关推荐
迷茫的蜉蝣7 天前
linux之时间服务器
linux·服务器·时间同步·ntp同步
YHPsophie16 天前
AT6558F高性能BDS/GNSS多模卫星导航接收机SOC单芯片
gps·gnss·soc芯片·bds·卫星导航接收机·at6558f
Mr.Peng~NtripShare1 个月前
NtripShare Cloud平台之CORS服务之基准站RTCM坐标编辑
gnss·北斗·ntripshare·gnss接收机·rtcm
橘色的喵1 个月前
使用Python实现系统时间跳变检测与日志记录
python·时间同步·timestamp·时间跳变·时间回退·jump·time jump
做完作业了1 个月前
RTKLIB学习记录【postpos、execses_b、execses_r】
gnss·rtklib·rtklib源码解析
DeanLeung1 个月前
CentOS 7.9 局域网配置指定同步时间服务器
centos·时间同步·ntp
极客先躯2 个月前
高级java每日一道面试题-2024年9月26日-运维篇[分布式篇]-如何保证每个服务器的时间都是同步的?
linux·运维·分布式·面试·时间同步·网络时间协议(ntp)·精密时间协议(ptp)
小 y 同 学2 个月前
Ubuntu22.04安装GNSS数据处理软件GAMIT/GLOBK
linux·gnss·测绘·gamit
记得往前走2 个月前
北斗卫星系统信号介绍
gnss