ptp精准时间协议_精确时间协议PTP研究
精确时间协议PTP研究
2016-07-11 08:22:31
阅读次数:10649
资源下载:
摘要:PTP(Precision Time Protocol)协议基于以太网,能够达到亚微妙级的对时精度,在模态分析和振动测试等领域将有着广阔的应用前景。首先介绍了PTP协议的基本原理及工作流程,接着剖析了关键数据结构及模块,最后给出了测试结果和下一步要作的工作。
关键词:精确时间同步,以太网,IEEE 1588,嵌入式系统
1、引言
随着网络技术的不断增加和发展,尤其是以太网在测量和控制系统中应用越来越广泛,计算机和网络界也在致力于解决以太网的定时同步能力不足的问题,开发了网络时间协议(NTP),但其同步准确度只能达到200μs,仍然不能满足测量仪器和工业控制所需的准确度。为了解决这个问题,网络精密时钟同步委员2002年推出了IEEE1588标准,即“网络测量和控制系统精密时钟同步协议标准”, 其基本功能是使分布式网络内的所有时钟与最精确时钟保持同步,它定义了一种精确时间协议PTP(Precision Time Protocol),用于对标准以太网或其他采用多播技术的分布式总线系统中的传感器、执行器以及其他终端设备中的时钟进行亚微秒级同步,2008年又推出了更加高效、简洁的第二版。IEEE 1588可以以纯软件的方式实现,也可以用能够提供更精确的时间同步的专门的硬件实现。时间的精度和不确定性主要依模块和IEEE 1588执行的情况而定,一般期望在几十纳秒到几十亚微秒间。IEEE 1588用于需要时间精度比NTP高的局域分布系统,也用于一些不能接受GPS高成本或者不能接收到GPS信号的应用场合。由于其精度高、成本低、设备布置灵活,国外许多高端测量仪器中已广泛采用,而我国在这方面的研究与开发相对比较落后,但测量设备采用PTP同步方式已成为大事所趋,尤其是模态分析和振动测试等领域将有着广阔的应用前景。
2、PTP原理及工作流程
PTP协议通过以太网同步各设备的时钟,可以提供亚微妙级的对时精度,其对时过程包含两步:
第一步:通过最佳主时钟(Best Master Clock)算法确定网络中最精确的时钟,作为主时钟master,其余所有时钟都作为slave,并与master同步。
第二步:通过计算主从时钟偏移量和网络延时修正从设备时钟。同步的过程中需要计算主从时间差异,其中包含主从钟的偏移量和网络传输时延。因此从时钟的修正也包含偏移量的修正和传输时延的修正。
2.1主从消息交换流程
主从设备主要通过消息交换,完成对时,为保持长期一致,需要不断对时,消息交换模式如图1所示:
a、主节点发送一个Sync消息到从节点,并记住消息发送时间t1。
b、从端接收Sync消息,并记下接收时间t2。
c、主端通过把t1嵌入到Sync消息中或随后的Follow_Up消息中,将时间戳t1发送给从端。
d、从端发送Delay_Req消息给主端,并记录发送时间t3。
e、主端接收Delay_Req消息并记下接收时间t4。
f、主通过把时间戳t4嵌入Delay_Resp消息发送给从端。
图1 主从消息交换流程
消息交换结束后,从端拥有了所有4个时间戳,用它们可以计算主从端时间差和平均消息传输延时。
Tmsd = t2 + Tms – t1
Tsmd = t4 –( Tms + t3)
由于通信路径的对称性,
路径延时Td = Tmsd = Tsmd = 1/2 *(t2 – t1 + t4 – t3)
主从时差 Tms = 1/2*(t2 – t1 + t4 - t3)
2.2调整从设备时钟的原则
如果时间差Tms过大,则应用绝对时间调整,从设备时钟要加上时间差以调整绝对时间,使其时间在此刻与主时钟时间完全一致;
如果时间差Tms较小,则使从时钟的频率改变某一百分比,从时钟设备需要调整各自的时钟频率,与主时钟频率保持一致。
一般来说,PC机可以通过设置系统时间来调整主从时间差,但不能调整时钟的频率。为了能够调整时钟频率,需要1588时钟芯片或内置1588时钟的PHY芯片支持,如美国NS的DPS83640。系统各时钟对时时,如果没有硬件支持,只能达到亚毫秒级的同步精度;如果有专用硬件支持时,可以达到亚微妙级的同步精度。
2.3消息类型
PTP中消息分为事件消息和通用消息两种。其中,事件消息在离开和到达一台设备时必须打时标(记录本地时间),包括Sync、Delay_Req、Pdelay_Req、Pdelay_Resp;通用消息不需要打时间戳,包括Announce、Follow_Up、Delay_Resp、Delay_Resp_Follow_Up、
Management和Signaling。
3、关键数据结构
关键数据结构对于PTP协议的理解和分析至关重要,现列出一些主要的数据结构。
3.1时间戳类型,表示相对于1970年1月1日0时0分0秒的时间。
struct Timestamp {
u48 seconds; //秒
u32 nanoseconds; //纳秒 (<10^9)
u16 frac_nanoseconds; //分数纳秒
};
3.2端口上下文,作为每个端口相关函数的参数。
struct ptp_port_ctx {
struct ptp_port_ctx *next; //内部列表指针
bool port_state_updated; //端口状态修改标志
int timer_flags; //各定时器使能标志
struct Timestamp announce_timer; // announce报文超时时间戳
struct Timestamp sync_timer; //sync报文发送超时时间戳
struct Timestamp delay_req_timer; //delay_req报文发送超时时间戳
struct Timestamp pdelay_req_timer; // pdelay_req报文发送超时时间戳
struct Timestamp announce_recv_timer; // announce报文接收超时时间戳
bool announce_recv_timer_expired; // announce报文接收超时标志
u16 sync_seqid; //sync报文序号
u16 delay_req_seqid; //delay_req报文序号
u16 announce_seqid; // announce报文序号
struct Timestamp sync_recv_time; //sync报文接收时间戳
u64 sync_recv_corr_field; // sync报文中的校正字段
struct Timestamp delay_req_send_time; /// delay_req报文发送时间戳
struct ForeignMasterDataSetElem *foreign_master_head;
ClockIdentity current_master; //当前主时钟ID
bool unicast_port; //单播端口标志
struct PortDataSet port_dataset; //端口数据集
};
3.3 PTP报文头格式
struct ptp_header {
u8 msg_type; // ptp消息类型 (bits 3-0), 传输相关 (bits 7-4)
u8 ptp_ver; //ptp版本 (bits 3-0)
u16 msg_len; //消息长度
u8 domain_num; //域号
u8 res; //预留
u16 flags; //标志
u64 corr_field; //校正值
u32 res1; //预留
struct PortIdentity src_port_id; //源端口Id
u16 seq_id; //序号
u8 control; //控制
u8 log_mean_msg_interval; //对数平均间隔
} __attribute__ ((packed));
4、主要模块
系统由主控、配置、端口收发、最佳主时钟算法、端口状态机和时钟接口等模块组成。其调用关系如图2所示。
图2模块调用关系
4.1 PTP主控模块
1)初始化:分配存储器,各种上下文,各种数据集,包交换、操作系统和时钟接口等。
然后,循环进行以下4步:
2)检查各端口Announce报文接受定时器是否超时
3)运行BMC最佳主时钟算法
4)运行各端口的状态机
5)等待新消息到达或某些定时器超时
4.2 PTP配置模块
主要功能包括:读取xml格式的配置文件放入相应的数据结构,分析各项配置的合法性,
配置各网络端口。
4.3 PTP端口收发模块
发送模块主要负责创建、关闭新PTP端口,创建SYNC、FOLLOW_UP、ANNOUNCE、DELAY_REQ和DELAY_RESP消息,并由端口发事件消息包。
接收模块负责接收处理所有的PTP消息,包括sync、follow_up、announce、delay_req和delay_resp。
操作系统相关包模块负责底层的网络端口socket(事件消息和通用消息各占一个socket)的初始化与关闭,PTP帧的发送与接收。
4.4 PTP最佳主时钟选择算法和端口状态机
PTP端口有initializing、faulty、disabled、listening、pre_master、master、passive、uncalibrated和slave九种状态。随着网络上设备及收发消息的变化,经最佳主时钟算法计算,可以改变端口状态。
4.5 PTP时钟接口模块
主要初始化时钟接口,获取时钟特性,记录收到事件消息时的时间戳,并调整主从时钟时间差及时钟频率。
5、结束语
本文设计实现了PTP协议第2版,首先基于PC机平台Ubuntu10.04 Linux操作系统进行了测试,测试结果表明已达到。下一步,将在Omap-L138双核嵌入式平台上进行更深入的实验,并采用专用的1588 PHY芯片,以达到更精确的同步效果,并应用到多种测量仪器上。
参考文献
[1] IEEE Std 1588TM-2008, IEEE Standard for a Precision Clock Synchonization Protocol for Networked Measurement and Control System[S].July 2008.
[2] [美]W.Richard Stevens 网络编程[M].施振川 周利民 孙宏晖,译.北京:清华大学出版社,2010.
[3]陈兴敏,康国钦.LXI的精准时间同步触发方式分析[J].测试测量技术,2008.
ptp精准时间协议_精确时间协议PTP研究相关推荐
- ftp协议是一种用于_______的协议_网络安全常见协议解析:TCP、UDP、HTTP、FTP、SMTP等之间的区别...
了解网络安全行业的都知道,网络安全协议是营造网络安全环境的基础,是构建安全网络的关键技术.常见的网络协议如HTTP协议.TCP/IP协议.FTP协议等. 如果你想进入网安行业,这些协议都是需要重点要学 ...
- vb 软件时间限制_带时间限制的软件加密锁
"时间就是金钱"这句话完美的诠释了软件的价值.而精锐 5 时钟锁最大程度的保证软件价值并帮助软件开发商解决业务问题. 精锐 5 时钟锁采用硬件时钟功能,内置独立时钟芯片,带 ...
- calendar类计算时间距离_日期时间--JAVA成长之路
Java中为处理日期和时间提供了大量的API,确实有把一件简单的事情搞复杂的嫌疑,各种类:Date Time Timestamp Calendar...,但是如果能够看到时间处理的本质就可以轻松hol ...
- mysql 时间国际化_日期时间处理和国际化相关
日期/时间的国际化,不仅涉及到地理位置(Locale,比如星期.月份等日历本地化表示),还涉及到时区(TimeZone,针对UTC/GMT的偏移量).时区不仅是地理位置规定,更是政治规定,比如中国从地 ...
- 动态时间规整_动态时间规整下时间序列子序列的搜索与挖掘
一.DTW的背景 对于时间序列数据挖掘算法的相似性搜索来说最大的瓶颈就是所花费的时间,所以大多数关于时间序列数据挖掘的学术研究都在考虑数百万个时间序列对象时停滞不前,而许多工业和科学都在数十亿个等待探 ...
- mysql 格林时间转换_格林时间转换成正常时间
uscdbmt@rac1:~> date +%s 1414741902 oracle中怎么把这个1414741902转换成正常时间格式 select Numtodsinterval(141474 ...
- igmp是哪个层协议_通俗易懂网络协议(IP)
之前写过一篇<通俗易懂TCP/IP(概述)>,广受欢迎和好评,有网友催更,便抽空续写IP章节,回应粉丝期待. TCP/IP网络模型 TCP/IP网络模型分为4层,自下而上分布为链路层(又叫 ...
- 为什么tcp不采用停等协议_为什么 TCP 协议有粘包问题
来自公众号:真没什么逻辑 链接:https://draveness.me/whys-the-design-tcp-message-frame/ 为什么这么设计(Why's THE Design)是一系 ...
- java实现hj协议_环保 HJ212协议解析
由于是做环保相关的,有时需要对212协议进行拆包和解包.HJ212协议是一种字符串协议,数据传输通讯包主要由包头.数据段长度.数据段.CRC校验.包尾组成,其中"数据段"内容包括请 ...
- mysql 时间推移_随着时间的推移可视化COVID-19新案例
mysql 时间推移 This heat map shows the progression of the COVID-19 pandemic in the United States over ti ...
最新文章
- ORACLE如何删除归档日志文件
- 搜索 | 电商行业模版驱动业务增长实践
- mysql表还原初始状态_workbench 怎么恢复初始设置
- html css考试题选择题,html_JavaScript_css试题
- 开局说丑说拒绝,开售抢的贼快!iPhone11预约超百万
- MySQL UTF8与UTF8MB4
- 《算法竞赛进阶指南》0.1位运算
- linux网络总线的作用,I2C总线是什么?基于I2C总线的Linux系统有哪些优点?
- IDEA - 返回上一步,回到下一步 代码 快捷键
- Druid源码分析--整体结构
- windows x64和x86区别
- matlab中的方波信号图片_MATLAB| 望远镜分辨率amp;艾里斑的模拟
- 记录一次Visual Studio运行webservice调用中控打卡机出现的问题
- KEGG pathway 数据库
- burp与FoxyProxy抓包
- 【eXtremeComponents总结系列】使用总结(转载)
- golang:环境变量GOPROXY和GO111MODULE设置
- Golang 实现Windows服务
- Java中的线程池如何实现,一文彻底搞懂
- QT怎么设置字体轮廓、字体位置、字体样式、字体间距、窗口背景色大小、隐藏鼠标图标
热门文章
- Ehcache配置详解及CacheManager使用
- 全排列算法(字典序法、SJT Algorithm 、Heap‘s Algorithm)
- 一月读书小结--《围城》《人类2.0》《二战简史 黑暗时代》
- 人生有三重境界:看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水(转载)
- 计算机用户删除会怎样,电脑注销会删掉内容吗,电脑注销后会删除账户吗
- 计算机删除登录用户,Windows10账户删除怎么登陆 如何删除账户
- redis主从完整配置说明
- 无人机开发-介绍Mavlink协议的消息组成、如何看懂繁杂的mavlink官网介绍、简单介绍地面站与飞控的通讯流程
- PCM开发板模块实验指导--无刷马达实验
- 英谷Oracle答案,火焰纹章风花雪月各角色能学什么魔法 各角色可习得魔法与熟练度要求一览...