资源描述
2 0 0 8 年第2 期仪表技术2 9 I E E E15 88 最佳主时钟算法的分析与实现戴宝峰,崔少辉1,常健2(1 军械工程学院,河北石家庄0 5 0 0 0 3;2 6 3 9 8 8 部队,山西晋城0 4 8 0 0 0)摘要:针对I E E E l 5 8 8 的最佳主时钟算法(B M C)进行了研究与分析,并在此基础上设计实现了最佳主时钟算法。关键词:I E E E l 5 8 8;最佳主时钟算法;精密定时协议中围分类号:T M 9 3 0文献标识码:A文章编号:1 0 0 6 2 3 9 4 f 2 0 0 8)0 2 一0 0 2 9 一0 3I m p l e m e n t a t i o na n dA n a I y s i so fB e s tM a s t e rC l o c kA l g o r i t h mo fI E E E l 5 8 8D A IB a o f e n 9 1,C U IS h a o h u i1,C H A N GJ i a n 2(1 0 r d n a n c eE n g i n e e r i n gC o l l e g e,S h i j i a z h u a n g0 5 0 0 0 3,C h i n a;2 6 3 9 8 8U n i to fP L A,J i n c h e n g0 4 8 0 0 0,C h i n 8)A b s t r a c t:I nt h i sp a p e r,t h ed e s i g na n di m p l e m e n to ft h eb e s tm a s t e rc l o c k(B M C)a l g o r i t h mo fI E E E l 5 8 8a r ea n-a l v z e di nd e t a j l K e yw o r d s:I E E E l 5 8 8;b e s tm a s t e rc l o c ka l g o r i t h m(B M C);P T Pl最佳主时钟算法fB M C)的相关概念在I E E E l 5 8 8 体系中,P T P(P r e c i s i o nT i m eP r o t o-c 0 1)时钟的端口状态被分为P T P-I N I T I A L l Z I N G,P T P M A S T E R,P T P S L A V E,P T P D I s A B L E D 等9 种状态,而B M C 算法的目的就是为了计算出每个时钟端口的状态,从而确立网络中的最佳主时钟,以便于时钟之间的时间同步。B M C 算法本身是由两部分组成的:状态决定算法:用来计算每个时钟端口的状态。数据集比较算法:用来计算两个相关时钟端口数据集的二进制关系。而这两种算法进行计算所需要的信息主要来自两部分:时钟端口的默认数据集D。和时钟端口接收到的S y n c 报文中包含的信息。在这里我们使用I E E E l 5 8 8 标准的设定,假设某一具有J、r 个P r I P 时钟端口的时钟C。的默认数据集为D。,则B M C 算法计算时钟状态所需要的信息具体为:_ 时钟的默认数据集D。;一时钟端口r 的E 蛔数据集;个时钟端口的E k。数据集。其中,数据集E。是通过数据集比较算法计算和r 端口相连的来自不同时钟端口的有效S y n e 报文所包含的信息得到的。而数据集E。则是通过数据集比较算法选择个端口中最好的E 蛔,作为时钟c。的信息更新来源。在这里,E 小。和E 啪所包含的信息主要是指,S y n c 报文中所携带的超主时钟(g r a n d m a s t e r,G M)的相关信息,如G M u u I D,G M S t r a t u m,c M I d e n t i f i e r 等。2 时钟的状态改变机制由于在I E E E l 5 8 8 的初始化状态下,网络中各时钟节点的数据状态保持的是系统的默认状态或上一次系统关闭时的状态,因此在初始化状态下确立的主时钟是系统默认的主时钟或系统的上一次运行时确立的主时钟。但是在实际系统运行过程中,会出现网络中节点数目和网络拓扑结构的变化,以及网络中各时钟自身的状态变化等各种状况,使得网络的状态经常发生变化,这也就必然导致网络中各节点时钟状态的变化和最佳主时钟的变化。因此,在网络节点之间进行时间同步的同时,节点的时钟状态也必然随之不断的变化。在I E E E l 5 8 8 体系中,状态改变机制S T A T E C H A N G E E V E N T 是时钟节点通过B M C 算法利用时钟接收到的s y n c 报文中的信息来判断最佳主时钟的机制,它同时也用来判断接收到s y n c 报文的时钟是否需要改变现有的时钟端口的状态,其流程如图l所示。在图l 中,时钟的状态改变机制首先会计算各时钟端口的E 妇。数据集更新后的数值,这样做可以反映出时钟自上次时钟状态改变后,时钟是否收到新的有效S y n c 报文。随后,时钟的状态改变机制会利用更新后E 。和E。数据集进行计算,并根据B M C 算法的结果,更新时钟的端口状态和相应的数据集信息。收稿日期:2 0 0 7 一0 7作者简介:戴宝峰(1 9 8 0),男。硕士生,研究方向为自动测试技术与系统。万方数据3 0 仪表技术2 0 0 8 年第2 期状态改变机制发生从上次状态改变后时钟的有端口是否计算过E 什,c s t 一是土计算E b。最佳主时钟算法:计算最佳时钟和端口的推荐状态更新时钟所有端口的数据集如果需要,每一个端口都要计算E d篙篇觥卜 堂生所需的状态改变l。K:二:=图l时钟的状态改变机制由于S y n c 报文中包含时钟状态改变所需要的关键数据集E 蜘。和E。n,因此s y n c 报文的到来是驱动时钟状态改变机制发生的关键。所以,无论S y n c 报文是大规模到来还是无s y n c 报文到来,我们都应确保时钟的状态改变机制在每个S y n c 周期内至少发生一次,以确保时钟的状态和数据集得到及时的更新。3B M C 算法分析3 1 数据集比较算法佤丽蔽磊磊两的趣主时钟的时钟等级|是否小于B 的时钟等级AY一超主时钟的_ l 塑鏖箜堑堡盯再比较判别时钟的其他超主时钟信息如超主时钟的方差值,超E 时钟是否为边界时钟或系统的推荐时钟等信息以进。步判别数据集A与B 的优劣N 厂、划Bh一一一,A 的超主时钟系统的优先选择时钟而、卫的超主时钟不是删沙钟是系统的优先选择时钟。而、旦A 的超主时钟不是A 比B 好)一A l超毛时钟的精度j直是否和B 的相同气的超主时钟的精度等级值是否优于B的精度等级值图2 数据集比较算法流程图(一)作为B M C 算法的基础,数据集比较算法主要用来计算两个相关时钟端口数据集的二进制关系,并为状态决定算法提供必要的数据信息。在这里我们用A 和B来表示两个相关时钟的数据集,该算法的流程如图2 与图3 所示(由于流程图较分支很多,在这里仅显示部分流程,详图可以参看I E E E l 5 8 8 规范的7 6 条款)。首先要明确的一点是,在数据集比较算法中,需要进行计算和比较的信息除了本地时钟自身的信息外,还大量比较了和本地时钟相连的超主时钟的信息,如图2 所示。采用这种比较方法的主要原因是为了保证算法和时间同步系统的稳定性。首先,超主时钟作为各个时钟节点的时间同步源头,在网络中的状态一般不会轻易发生变动,可以说是整个P r I P 域的根本。其次,作为时间同步的源头,超主时钟的信息在每个时钟节点的父数据集中都有记录,便于算法比较网络中任意两个相关时钟之间的数据集关系。最后,也是最为重要的是,这种比较算法虽然流程较为复杂,但算法在各个节点上运行时比较的主要是节点时钟自身与超主时钟的关系。因而,这种比较具有全局性,即网络中的所有时钟节点都以超主时钟为参照对象,从而选出各个子域中与超主时钟联系最为密切的时钟作为子域的主时钟。这样当个别时钟节点发生变化时,其影响将主要限制在其子域内,而不会导致网络中其他子域的时钟节点发生连锁反应,从而有效地保证了算法和系统的稳定性。N鬻耋影巡竺三!乡上Y今径数目值是否等于B 的路 冯竺!步上Y鳃黼眺的时钟的唯一标识值是宙等、!-fz、于发送l j 的时钟的唯-=T艾发送数据集A落鞅目值是否小于B 的晓 叫B 3。径数日值、r在路径相同的情况下比较判别数据集A 与B 在数据更新频率上谁更好进一步比较数据集A 自身的信息,以判别致据集A与B 之间的二进制关系的时钟的唯一标识值是否一、于发送B 的时钟的唯歹标识值N 匡孬函磊b 伍数据集B 在路径长度上比A 好)一B 2迸一步比较数据集B 自身的信息以判别致据集A与B 之间的一进制天系图3 数据集比较算法流程图(二)纂Y 万方数据2 0 0 8 年第2 期仪表技术3 l 其次,比较图2 与图3 我们可以发现:图2 显示的是两时钟的G M 不同的情况,而图3 显示的是在两时钟的G M 相同或等效的情况下,如何评定两时钟的质量。由于各时钟节点与超主时钟之间的距离并不完全相同,以及网络延迟的存在,使得各时钟在接收S y n c报文的时间上会出现差异。如图3 所示,通过比较两时钟与超主时钟之间的传输路径数值s t e p-r e m o v e d 和报文发出的u u I D(u n i v e r s a l l yu n i q u ei d e n t 讯e r)代码,就可以比较出时钟A 与B 在路径上谁更占优势。总之,通过上面的分析,可以将数据集比较算法的流程大致归结为以下两点:-选择时间源(超主时钟)比较好的时钟作为P r I P 子域的主时钟,而不是只根据本地时钟的属性进行选取,这样有利于保持算法和系统的稳定性。在时间源(超主时钟)相同或等效的情况下,应根据本地时钟与超主时钟的远近,或接收超主时钟同步报文的频率,判别时钟的优劣,以便状态决定算法选出合适的时钟作为主时钟。3 2 状态决定算法在I E E E l 5 8 8 标准中,时钟的等级值(s t r a t u m)分为0、1、2、3、4 和2 5 5 共6 个等级供用户使用,数值越大时钟的等级越低,属性越差,其中等级l、2 的时钟在标准中被推荐为标准的参考时间源,而等级2 5 5 的时钟只能作为从时钟。在图2 中,我们可以看到,在超主时钟(G M)的属性相近的情况下,时钟是否为系统的推荐时钟(p r e f e 玎e dc l o c k),对于评定时钟的质量是有重大作用的。若时钟为系统的推荐时钟,即使它的其它属性较差,也会被评定为质量较优的时钟。因此在图4 中,状态决定算法首先判断的就是时钟C。是否为系统的推荐时间源。然后根据时钟C。的等级,通过调用数据集比较算法来比较D。,E 舭。和 g 咖d m a s”r P o r【I d:=d a t a 8 e t B 一 g r a n d m a s t e r P o n I d!m e m c m p(d a t 鹏e t 一 g r a n d m 鹊t e 吒1 0 c k U u i d,d a l 酗e t B 一 g r 8 n d m 聃t e r c l o c k-U u i d,P T P U U l D L E N G T H)li f(d a 协8 e 认一 g r a n d m 聃t e r c l o c k S t r a t l I m g r a n d m 聃t e r c l k S t m t u m)9 0 t o ;e 1 8 ei f(d a e l F a n d m 柏f e r c J 0 c k S l r 丑m m d a l a 8 e l B 一 肿n d m 鼬f e r c l o e k S f r a u m)g o t oB;超主时钟的8 t r a t l l m 等级相同i f(g e t I d e n t 墒e r o r d e r(d n 纽s e t A 一 g M n d m 髓t e r c l k I d e n t i f i e r)g m n d m 髓t e r c l o c k l d e n t i f i e r)g o t o ;i f(g e t l d e n 曲e T o r d e r(d 岫眦t A 一 肿n d m 酗I e r c l k I d e n t i 6 e r)g e t I d e n t i f i e r o f d e r(d a t a 8 e t B 一 g m n d m a B t e r c l o c k I d e n t i 矗e r)g o t oB;超主时钟的I d e n t i 6 e r 等级相同A:i f(!d a t a 8 e 诅一 鳓n d 眦B t e r P 陀f e m d d a t a s e l B 一 s r a n d m 曲t e r P r e f e r r e d)”t l I m l;B l,B 比 好e l r e t u m l;I,A 比B 好B:i f(d a t a s e l 一 弘n d m 聃t e r P 陀f e r r e d!d 山B e t B 一 g r a n d m 拈t e r P r e 任r r e d)n t u ml;l,比B 好e 1 8 em I u m l;B 1 B 比A 好5结论由于I E E E l 5 8 8 协议不像T C P I P 协议那样被广时钟c。上端口R 的状态决定算法数据集D o 数据集D r比导地蟹譬D 0 在路径、广 p r i V a t e d a t 8=8 k e I;在使用完u s B 设备后,必须关闭设备驱动程序。对用户来说,只要在用户程序中使用c l o s e 函数,用户程序就会自动调用f i l e o p e r a t i o n 结构中的c I o s e 函数。要注意的问题是u s b 设备可以在任何时间点从系统中取走,即使程序目前正在访问它。因此u s b 驱动程序必须要能够很好地处理解决此问题,它需要能够切断任何当前的读写,同时通知用户空间程序u s b 设备已经被取走。如果程序有一个打开的设备句柄,在当前结构里,我们只要把它赋值为空,就像它已经消失了。对于每一次设备读写等其他函数操作,我们都要检查u s D d e v i c e 结构是否存在。如果不存在,就表明设备已经消失,并返回一个一E N O D E V 错误给用户程序。当最终我们调用r e l e a s e()没有文件打开这个设备时,无论u 一d e v i c e 结构是否存在,它都会清空d i s c o n n e c t 函数所作工作o4 3u s b 设备数据的传输当o p e n 完设备后,就可以由f i l e o p e r a t i o n 结构中的r e a d()和w r i t e()函数进行读、写数据了。L i n u xu s b子系统中用一个称为U s bR e q u e s tB l o c k(u R B)的数据结构来封装u S B 的传输。这个结构包括了建立任何一种U S B 传输类型的变量。所有的传输请求向U S B内核传输,请求结束通过一个c a l l b a c k 功能进行标志。在s k e l w r i t e 中,一个F I L L B u L K U R B 函数,就完成了u r b 系统c a l l b a c k 和我们自己的8 k e I w r i t e b u l k c a l b a c k 之间的联系。注意8 k e l w r i t e b u l k c a l l b a c k是中断方式,所以要注意时间不能太久,它只是报告一些u 西的状态等。r e a d 函数与w r i t e 函数稍有不同在于程序并没有用u r b 将数据从设备传送到驱动程序,而是我们用u s bu l k m s g 函数代替,这个函数能够不需要创建u r b s和操作u r b 函数的情况下,来发送数据给设备,或者从设备来接收数据。我们调用u s o b u l k m s g 函数并传递一个存储空间,用来缓冲和放置驱动收到的数据,若没有收到数据,就失败并返回一个错误信息。u s D _ b u l k m s g 函数当对u s b 设备进行一次读或者写时是非常有用的;然而,当需要连续地对设备进行读写时,仍需要建立一个自己的u r b s,同时将u r b s 提交给u s b 子系统。4 4 设备驱动程序模块把驱动程序载入内核的方法有两种:静态编译和动态加载。在进行静态编译时,驱动程序是和内核一起编译的,如果要修改驱动程序,将要重新编译和下载内核;动态编译即是把驱动程序编译成可以动态加载的模块,系统通过调用i n 8 m o d 和m m o d 可随时将用户开发的驱动程序进行加载和卸载。如果进行静态编译,即将驱动程序编译进内核的话,会增加内核的大小,还要改动内核部的源文件,而且不能动态地卸载,不利于调试。从本质上来讲,模块也是内核的一部分,它不同于普通的应用程序,不能调用位于用户态下的C 或者C+库函数,而只能调用L i n u x 内核提供的函数。在以模块方式编写驱动程序时,要实现两个必不可少的函数i n“一m o d u l e()和c l e a n u p m o d u l e(),而且至少要包含和 两个头文件。在用g c c 编译内核模块时需要加上一D M O D u L E D K E R N E L 一一D L I N U x 这几个参数,编译生成的模块(一般为o 文件)可以使用命令i n s m o d 载入L i n u x 内核,从而成为内核的一个组成部分,此时内核会调用模块中的函数i n“一m o d u l e()。当不需要该模块时,可以使用珊m o d命令进行卸载,此时内核会调用模块中的函数c l e a n u pm o d u l e()。任何时候都可以使用命令来l s m o d 查看目前已经加载的模块以及正在使用该模块的用户数。参考文献:1 王成儒,李英伟u s B 2 O 原理与工程开发 M 北京:国防工业出版社,2 0 0 4 2 陈莉君深入分析L i n u x 内核 M 北京:人民邮电出版社,2 0 0 2 3 周魏松L i n u x 系统分析与高级编程技术 M 北京:人民邮电出版社,2 0 0 2 4 0 N A T H A NC O R B E T,A L E s s A N D R 0R u B I N I&G R E GK O R A H H A R T M A N L I N u x 设备驱动程序 M 北京:中国电力出版社,2 0 0 6 5 美 D o nA n d e r s o n u s B 系统体系 M 北京:中国电力出版社,2 0 0 1(许雪军编发)(上接第3 1 页)泛的使用,因此目前尚没有标准的I E E E l 5 8 8 协议的软件包,用于在局域网中实现精确时间同步,所以就有必要对I E E E l 5 8 8 协议规范进行深入的理解与分析,以便于协议软件的开发。文中对I E E E l 5 8 8 的最佳主时钟算法的相关概念和时钟状态改变机制进行了介绍,同时详细的分析了算法的流程特点,并在此基础上用C 语言实现了B M C 算法,这为实现I E E E l 5 8 8 协议软件打下了良好的基础。参考文献:1 I E E ES t d 1 5 8 8 2 0 0 2I E E Es t a n d 舶-df o raP r e c i s i o nc l o c kS y n c h r o n i z a t i o nP r o t o c o lf o rN e t w o r k e dM e a s u r e m e n ta n dC o n _t r D ls y 8 t e m s s I E E E l 5 8 8 2 0 0 28 t a n d a r d,2 0 0 2 2 E i d B o n,J 0 h nc,e t8 1 M e t h o df o rR e c o g n i z i n gE v e n t sa n ds y n c h r o n i z i n gc l o c k s z 1 9 9 6(许雪军编发)万方数据IEEE1588最佳主时钟算法的分析与实现IEEE1588最佳主时钟算法的分析与实现作者:戴宝峰,崔少辉,常健,DAI Bao-feng,CUI Shao-hui,CHANG Jian作者单位:戴宝峰,崔少辉,DAI Bao-feng,CUI Shao-hui(军械工程学院,河北,石家庄,050003),常健,CHANG Jian(63988部队,山西,晋城,048000)刊名:仪表技术英文刊名:INSTRUMENTATION TECHNOLOGY年,卷(期):2008,(2)被引用次数:0次 参考文献(2条)参考文献(2条)1.IEEE Std.1588-2002.IEEE Standard for a Precision Clock Synchronization Protocol for NetworkedMeasurement and Control Systems 20022.Eidson,John C Method for Recognizing Events and Synchronizing Clocks 1996 相似文献(6条)相似文献(6条)1.期刊论文 庾智兰.李智.YU Zhilan.LI Zhi 精确时钟同步协议最佳主时钟算法-电力自动化设备2009,29(11)精确时钟同步协议(IEEE1588)是关于网络测量和控制系统的时间协议,可达到较高的网络对时精度,实现高精度的时间同步.最佳主时钟算法(BMC)是IEEE1588的最主要的核心技术之一,按IEEE1588协议进行时钟同步的系统通过运行最佳主时钟算法来选择系统中的主时钟,其他时钟全以主时钟作为参考进行时钟同步.分析了精确时钟同步协议最佳主时钟算法的组成、相关概念及原理,根据算法的原理和实际要求设计了最佳主时钟算法功能模块,在Linux下用C语言编写程序,实现了最佳主时钟算法,给出了模块的设计流程图,为测试模块的功能,设计了测试验证图.通过验证,所设计的程序能实现最佳主时钟算法.2.期刊论文 王兰.杨志家.WANG LAN.YANG ZHIJIA IEEE1588精准时钟协议的IP设计-微计算机信息2007,23(26)IEEE1588协议是一种应用于分布式测量和控制系统中的精准时钟协议,文章提出IEEE1588协议IP实现的设计架构,并详述了架构中最佳主时钟(BMC)以及时钟校准电路的设计原理和实现.通过模型仿真验证了该设计的正确性.3.期刊论文 陈兴敏.康国钦.Chen Xing-min.Kan Guo-qin LXI的精准时间同步触发方式分析-电子质量2008,(4)介绍B类LXI仪器的一个关键技术-精准时间协议(IEEE1588).并详细分析了IEEE1588的时间同步原理和基本设计框架,最后介绍了IEEE1588的一种纯软件实现的方案一PTPd.4.期刊论文 谢昊飞.王平.张健.王浩.XIE Hao-fei.WANG Ping.ZHANG Jian.WANG Hao 面向测量与控制的精确时间同步实现方法-计算机工程2008,34(10)IEEE1588协议的不同实现方法对时间同步精度具有重要影响.该文分析了PTP引擎模块体系结构,实现PTP协议状态机、最佳主时钟算法、时钟变量算法、本地时钟同步算法,优化PTP报文发送与接收的控制过程.测试表明,该精确时间同步实现方法可使同步精度达到10微秒级,能有效满足测量与控制领域对时间同步的高精确度要求.5.期刊论文 张元.况立群.韩燮.ZHANG Yuan.KUANG Li-qun.HAN Xie 基于LXI总线的时钟精确同步软件技术的实现-计算机与现代化2010,(4)根据LXI(LAN based Extensions for Instrumentation)总线技术的特点,分析基于LXI总线的网络化测试系统的体系结构,研究基于LXI时钟同步的网络化测试设备的时钟精确同步技术,基于TCP/UDP协议,讨论基于LXI总线的B类仪器的IEEE1588网络时钟同步协议的软件实现方法.结果表明,对于LXI的B类测试设备,采用纯软件的方法实现测试设备之间的时钟同步,可达到亚微秒级的同步精度.6.学位论文 王飞雪 IEEE1588时间同步协议在Linux下的实现 2006 随着控制网络发展与普及,控制网络中的时间同步技术也得到了迅速的发展,目前应用于工业控制网络测量的时间同步协议标准主要是IEEE1588标准,此标准对控制网络中的现场设备时间同步的高精度带来了希望,并使IEEE1588全面应用于工业控制领域成为可能。本文首先概述了控制网络以及它与时间同步的关系,分别介绍了传统时间同步、NTP时间同步、IEEE1588时间同步标准,指出了在各种同步协议中IEEE1588标准是时间同步精度最高的、最适用于控制网络的时间同步标准。其次对时间同步中关键技术进行了认真的阐述,对IEEE1588的同步过程作了详细的分析。然后设计了精确时间同步协议(PTP协议)引擎模块体系结构,实现了最佳主时钟算法、本地时钟同步算法以及PTP报文发送与接收的控制算法,详细描述了现场设备中IEEE1588时间同步的具体实现过程。文章还根据嵌入式系统的开发流程,对嵌入式Linux技术做了深入的探讨,对交叉编译环境和软件开发的一般过程进行了阐述。文章最后基于ARM9平台建立嵌入式Linux系统,将时间同步PTP协议应用在基于ARM9的S3C2410开发板上进行时间同步。本文的研究对于自动控制系统中网络测量与控制设备间的同步技术基于ARM9的现场设备开发有较好的借鉴作用。本文链接:http:/
展开阅读全文