EPA工业测控网络的时钟同步分析与改进

0 前言

工业以太网技术是当今自动化领域发展的热点之一。它的出现,标志着工业控制技术领域又一新时代的开始。EPA[1](Ethernet for Plant Automation)标准作为我国的工业以太网标准,也是我国迄今为止首个被国际标准化组织接收和发布的工业自动化标准,实现了我国工业自动化领域国际标准零的突破。

以太网用于工业控制网络所遇到的最大问题是实时性问题,由于以太网是基于CSMA/CD(载波监听多路访问/冲突检测)方式工作的,报文经常会因为网络冲突而不能及时发送,故实时性难以保证。为了解决这个问题,EPA系统开创性地引入了链路层通讯调度规程。该规程仅仅通过修改部分以太网的数据链路层,就从本质上解决了一个困扰以太网进入工业控制领域已久的关键问题——实时性问题。但是宏周期的引入,使得EPA网络设备时间精度的要求变得更加严格,一两个设备的发送时间出错就可能导致整个网络发生故障。正因为EPA设备对时间精度要求严格,所以网络设备的同步精度对于EPA网络来说尤其重要。

1 工业控制网络中实现时间同步的各种方法

1.1 UTC(Coordinated Universal Time)授时

这是一种采用单向时间同步的技术,指的是作为基准的中心站把同步校正信号单向送到被校的各节点,各节点利用专用接收器接收基准时间实现同步。常见的有无线电波授时,但采用无线电波接收模块实现的UTC授时会受到授时范围和时间的限制,其中,采用卫星授时GPS(General Position System)实现的UTC授时精度相对较高,但通常适合野外环境中的应用[2]

1.2 专线直接连接

直接采用专线连接时间基准,适于对时间同步的准确度要求较高、范围集中的场合,如数据采集与监测的应用[3],该方法要求各被同步的设备有专门的通信接口。对分布式测控系统,则需要增加很多的专用时间传输连线,造成系统结构变得很复杂,当传输距离较远时会产生较大的延时。

1.3 总线型校时网络

GPSUTC源获取标准时间,再将数据源输入总线型校时网络,连接方式简单、方便扩展,但需专门的校时通信接口及遵从相应的通信协议,对通信数据的处理比较复杂。在航空、航海等应用较广的CAN(Controller Area Network)现场总线,采用短帧结构,传输时间短、受干扰概率低,具有错误检测和处理功能。对网络上的节点信息,CAN将它们划分成不同的优先级,以满足不同的实时要求,并可以对高优先级信息的最大通信延时进行估算。在应用于分布式测控系统时,由于没有全局的时钟节拍,CAN仍然不易使系统达到毫秒级的同步[4]

1.4 SNTP协议

SNTP[5](Simple Network Time Protocol, 简单时间同步协议)是由NTP改编而来,为NTP的简化模型,主要用来同步因特网中的计算机时钟。SNTP的同步方式是比较客户端和服务端的时钟差,客户端发送一个带有时间戳的时间请求包(UDP)给服务端并收到一个返回的包,SNTP客户端计算本地时钟和服务端的时间差。它以合适的算法以增强时钟的准确性,并且减轻多个由于同步源而产生的差错,实现了精确度接近毫秒的时钟服务。

1.5 精确时钟同步协议PTP(Precise Time Protocol)

IEEE1588[6][7]PTP协议提供了一种计算机网络系统中各计算机之间参照一个主时钟进行同步的方法,而且各从时钟可以自主测算到主时钟的偏差。具体同步操作过程见下图1所示。

Sync

Follow up

Delay_Req

Delay_Resp

Tmk

Tmk+1

Tmk+2

Tsk+1

Tsk+2

Tsk

          1 PTP时钟同步机制

说明:

Sync:主时钟定时发送的时钟同步报文;

Follow_up:主时钟紧随同步报文发送的跟随报文,跟随报文中存放有相应同步报文的发送时间戳;

Delay_Req:从时钟发送的线路传输延时请求报文;

Delay_Resp:主时钟发送的线路传输延时应答报文;

Tmk:主时钟第k次发送的时钟同步报文的发送时间戳;

Tsk:从时钟第k次接收到的时钟同步报文的接收时间戳;

计算公式如下:

    (1.1)

   1.2

            1.3

式中为主时钟到从时钟的线路延时,系统启动时其初始值设置为0为第k次时钟同步时从时钟计算出的与主时钟的时间偏差,Tmk+1为主时钟第k + 1次收到Delay_Req报文的时间戳,Tsk+1为从时钟第k + 1次发送Delay_Req报文的时间戳,为第k次时钟同步时,同步修改前的从时钟本地时间,为第k次时钟同步时,同步修改后的从时钟本地时间。

    整个时钟同步过程如图1所示。主时钟在Tmk时刻发送时钟同步报文,之后记录下同步报文发送的精确时间,将该时间打包进Follow-up报文里并随Follow-up报文一同被发出。从时钟于Tsk时间收到同步报文,之后将收到的Follow-up报文里的序列号与同步报文的序列号进行比较,如果一致,则从Follow-up报文取出相应同步报文的精确发送时间,按照公式计算出主、从时钟的时间偏差,对从时钟的本地时间进行较准,这样就完成了一次时钟同步。

2 基于IEEE1588时钟同步的实现

本系统采用AT91R40008单片机,软件实现是对基于uIP提供完整的说明文档及开源C语言代码进行移植,适用于8/16位单片机,采用模块化设计,完全适应当前的嵌入式系统。移植中需要注意的是,ARM为一款32位处理器,通常C语言中的结构体要求4字节对齐,这样处理器存取数据的速度最快。但在uIP中,通常情况下多个数据紧缩在一个4字节中,移植中可以使用_packed关键字定义结构体,生成紧缩的数据段。此外uIP1.0/uIP子目录中包括了TCP/IP协议栈实现的核心源代码文件,移植过程中需要对该部分进行重点修改。

为了尽可能提高控制器的时钟同步精度,将网络芯片AX88796设置为双向接收模式,既可接收从网络电缆送来的报文,也可接收自己发出的任何报文。同时,采用中断的方式记录报文的时间戳(使用AT91R40008的快速中断请求引脚-FIQ)。这种记录时间戳的方式比纯软件方式在精度上有明显的数量级上的提高。考虑到AT91R40008的工作量以及其能即时快速的响应中断,系统专门开辟了一个循环队列用于在中断服务程序内记录报文的接收时间戳,虽然占用了一点AT91R40008的宝贵内存空间,但通过实际测试发现循环队列最多有一百字节(10个时间戳左右)的空间足以记录任何被接收的报文时间戳,基本不会有漏记或覆盖报文时间戳的情况发生。

       通信接口控制器上电后,PTP时钟同步

系统随即启动,时钟端口首先进入到初始化阶段,负责初始化端口相关的数据集、配置网络相关的端口参数等,初始化完成之后,时钟端口切换到监听状态,此后端口会有两种可能的状态选择,主时钟或从时钟,如果端口收到子域内其他端口发送的同步报文则切换到从时钟,如果在规定的时间内没有能够收到任何同步报文,则端口自动切换到主时钟的状态,并开始向网络发送同步报文,将整个子域的时钟同步起来。如果端口最终切换到了从时钟,则其会根据同步报文、跟随报文、延时请求报文、延时应答报文中的时间戳及其他信息,计算出主时钟到从时钟的延时、从时钟到主时钟的延时、报文传输单向延时、从时钟与主时钟的时间偏差。

在对uIP代码移植后,并成功升级到EPA协议栈,整个PTP时钟同步系统得以实现,并测试得下图,图2中表示了三个从时钟的时间同步偏差实时曲线,与主时钟的偏差都在10us范围之内。该测试软件由笔者设计,基于MFC编程思想,使用多线程技术处理测试请求报文的发送以及测试应答报文的接收。对应答报文的时间戳进行计算、分析,得出主、从时钟的偏差结果,并以曲线的方式在程序界面上动态显示偏差比较结果。


                        2 从时钟时间同步偏差实时曲线


3 对时钟同步系统的改进

    从时钟同步实时曲线分析得出,每次同步后设备的偏差逐渐呈一定的斜率进行变化。在主时钟发布同步报文进行同步的时刻,从时钟的时间发生了跳变,同步偏差变小。每次同步完毕后PTP系统的偏差虽然很小,但还没有达到标准的完全同步。造成同步偏差较大的原因有:线路延时计算不准、晶振与时钟定时器分频存在偏差、时间戳记录存在偏差、中断响应时间的影响等。下面将针对这些影响时钟同步精度的不利因数提出改进方案。

3.1 增加滤波算法

考虑到在对线路延时及偏差计算上存在的不精确,引入两个滤波器分别对时钟偏差及单向延时进行滤波,其公式如下:

FIR低通滤波器[8](对时钟偏差滤波):

   (3.1)

IIR滤波器(对单向延时滤波):

                         (3.2)

3.2 晶振的补偿[9]

在实际系统中,每个同步设备的本地时钟有一个本地的时钟源,由于晶振和时钟定时器分频偏差等原因导致每个设备的时钟运行速度都不一样。假设主时钟本地时钟速度为Ym,从时钟本地速度为Ys,同步间隔为△T, 则每次同步间隔中引起的最大偏差为:

      (3.3)

一般系统中,当同步间隔为2s,晶振精度为100ppm时,在系统运行过程中任意两台设备产生的最大偏差,一般情况是在几十微妙之内。为此,引入补偿算法   (3.4)

 

式中Ys为调整后的从时钟速率,为调整前的从时钟速率,分子和分母分别表示了主时钟和从时钟在n个调整周期内的运行时间。补偿的目的是使Ym=Ys,从而使△Tmax=0。3.3 提高时间戳的准确性

时钟同步的精确性从另一方面来说也直接取决于时间戳的准确性。通常有三个位置可以获得时间戳,首先在socket套接口应用层时可以处理时间戳,但由于受协议栈和负载的影响,此方法只有适中的准确性。另外获得时间戳较好的位置是网络驱动,出口帧在帧交给MAC(Media Access Control)控制器的时刻加上时间戳。入口帧在网络接口中断服务子程序的入口处加上时间戳。但这种方法的准确性决定于操作系统的计时特性和负载。

最准确的方法是使用硬件检测PTP帧。当入口帧和出口帧经过媒体独立接口(Media Independent Interface, MII)时,可以容易地将其捕捉和解码。当然,这种方法的准确性还和物理芯片计时特性有关。另外,在报文接收时间戳时要对中断响应时间进行过滤;在报文发送时间戳过程中,网卡报文发送驱动的最后一条指令时,需要关闭中断进行时间戳的记录。

3.4 改进后的同步结构

通过以上的改进使PTP同步的精度在原来的基础上有了比较明显的改善,很大程度上提高了PTP的同步精度。选择6个设备,在IP地址范围内:128.128.1.1-128.128.1.6,并采用最优主时钟算法动态确定主时钟,在60分钟内,对改进后的系统进行测试,并与改进前的进行比较,结果如下表1所示:


改进前的测试结果

该进后的测试结果

设备状态

采样点数

偏差平均值(ns)

最大偏差(ns)

设备状态

采样点数

偏差平均值(ns)

最大偏差(ns)

Master

5000

0

0

Master

5000

0

0

Slave

5000

-5258

-8754

Slave

5000

-1200

-3621

Slave

5000

-4956

-9045

Slave

5000

-9652

-3152

Slave

5000

-6132

-9212

Slave

5000

-1165

-3247

                        1 PTP系统改进前后的测试结果


上表1中记录了6个设备的PTP系统在改进前后的同步测试结果。从对比数据可以看出同步精度有明显提高。最大偏差由原来的10us左右减小到3us左右,平均偏差也由原来的5us左右减小到1us左右。整个系统达到了高精度的时间同步。

4 结束语

时钟同步协议是工业以太网系统的重要组成部分。本文对比分析了目前在工业网络应用中的几类时钟同步协议。对应用在EPA中的IEEE1588时钟同步协议作了重点分析,深入探讨了PTP系统的实现,并对软件实现的细节作了重要说明,在分析同步测试结果后提出了对原有时钟同步系统需改进的地方,并给出了具体的改进方案,使得整个PTP系统的同步精度更上一层。然而要达到纳秒级的同步精度仍需要不断探索新方案、新技术,随着研究的深入,相信此目标已离我们不远。

你可能感兴趣的:(网络,测试,delay,算法,network,网络应用)