某火炮总线网络交换机时间同步软件的设计与应用
2016-11-21翟二宁
张 卓,翟二宁,何 浩
(西北机电工程研究所,陕西 咸阳 712099)
某火炮总线网络交换机时间同步软件的设计与应用
张 卓,翟二宁,何 浩
(西北机电工程研究所,陕西 咸阳 712099)
设计了一种时间同步软件,该软件能够使某火炮总线网络系统实现同步控制。它的硬件平台以X86为核心,配合网络协议芯片,硬件定时终端及外部接口组成。在其上移植VxWorks实时操作系统,并对VxWorks的启动、中断与时钟管理、存储与总线管理等进行了详细论述。在VxWorks开发调试环境Tornado 2.2中首先创建时间同步消息结构体,然后利用UDP套接字实现时间同步消息的组播通信,终端节点根据消息内的时间信息进行同步。该嵌入式软件应用于某火炮总线网络交换机,并进行了性能评估,结果表明该软件满足系统对时间同步精度的要求。
X86;VxWorks;组播;总线网络
随着火炮系统中电子控制单元数量越来越多,功能日益复杂,总线通信数据量不断增大,要求总线通信数据传输具有更高实时性和可靠性。因此在某火炮总线网络的研制过程中,为保证实时数据的传输质量,同时尽量降低系统对专用技术和专用硬件的依赖,总线网络采用全系统软同步方式进行实时数据通信。
交换机是总线网络的数据交换处理中心,也是网络实时性数据的调度和管理节点。笔者设计的时间同步软件是交换机内部业务处理板上的嵌入式软件,接收定时终端发送的20 ms中断信号,采用基于实时操作系统VxWorks组播通信方式传输时间同步消息。
笔者构建了时间同步软件的硬件平台。根据具体的目标机硬件环境完成操作系统的移植,在其上利用组播通信技术实现了时间同步消息的传输。将时间同步软件应用于交换机,并从时间同步消息的同步时统精度方面对软件性能进行了评估。
1 硬件平台
时间同步软件的硬件平台由CPLD(Complex Programmable Logic Devices)定时终端和嵌入式X86计算机模块组成,通过PC104总线连接,使得硬件平台体积小,结构紧凑,总线驱动电流小,功耗低。为了缩短开发周期,选取技术成熟的相关模块。CPLD选用Altera公司的MAX7000S系列产品EPM7128SLC84-15。计算机模块采用Intel Atom N270处理器,主频为1.6 GHz,总线频率533 MHz,并采用Intel 945GSE和ICH7-M桥片,1路82574IT千兆以太网控制器,2路兼容串口控制器,支持1×16 bit PC104总线等[1]。
2 VxWorks的移植与驱动开发
在硬件平台建立起来之后,需要移植VxWorks搭建软件应用程序开发平台。VxWorks是由美国Windriver(风河)公司研制的一个高性能实时操作系统,该操作系统的移植涉及VxWorks板级支持包BSP(Board Support Packet)和设备驱动程序的开发[2]。
如图1所示,BSP在系统中的层次清楚地展现了其与VxWorks之间的具体关系以及在目标机应用系统中所处的地位。
在VxWorks系统中,BSP简单描述为介于底层硬件环境和VxWorks之间的一个软件接口,它的主要功能是系统加电后初始化目标机硬件、初始化操作系统及提供部分硬件的驱动程序。BSP的开发需要理解VxWorks的启动顺序、中断控制器和时钟接口以及存储和总线接口等。
2.1 VxWorks的启动顺序
对于X86体系架构来说,系统冷启动后首先开始初始化CPU、北桥和南桥。在VxWorks中,对应汇编文件romInis.s的romInit()函数,其功能主要是对处理器、内存、堆栈的初始化,然后调用第1个C函数romStart()完成代码段以及数据段初始化,调用usrInit(),完成基本硬件(如中断控制器、串口、时钟等)和系统内核初始化。同时根据系统中所安装硬件的实际情况,调用sysHwInit()初始化其他必要的硬件,接下来,调用usrKernelInit()函数初始化内核的必要组件(消息队列、看门狗、信号量),通过Kernelinit()激活多任务环境,产生根任务usrRoot()。该任务主要功能包括连接系统时钟、初始化并设置I/O系统、安装驱动程序、创建设备、执行用户初始应用程序等,usrRoot()是驱动程序的入口点,用户编写的驱动程序一般都挂接在例程 usrRoot()中,最后usrRoot()将启动用户的应用入口程序usrAppInit()。至此,系统映像初始化完毕,整个系统开始工作,用户应用程序也开始执行[3]。整个初始化过程如下图2所示。
在VxWorks启动过程设计中,对于采用由引导程序装载到内存的VxWorks映像,其入口程序是sysInit()。在sysInit()中不需要重新初始化内存,仅仅是关闭中断,设置堆栈,然后将CPU执行权交给usrInit()。
2.2 中断控制器及时钟接口
中断是CPU和外部设备进行通信的有效方法,同时也是系统定时的基础。所以首先要实现中断控制器4个控制接口,即中断使能、中断响应、总线中断响应和产生总线中断。对于选用的CPU模块来说,中断的使能和禁止只需要操作中断屏蔽寄存器,使能则中断屏蔽寄存器为1,禁止则置为0。中断禁止的程序与中断使能程序类似,只是将对应的中断屏蔽位设置为0。总线中断响应和产生总线中断只需将操作命令按照一定的顺序写入到固定的端口来实现。
时钟芯片为VxWorks系统操作和调度提供了时间基础,VxWorks在时钟中断上连接了系统时间片通告程序。BSP所需的时钟接口包括使能和禁止时钟、获取和设置时钟速率、连接时钟中断。使能和禁止时钟是寄存器的操作。设置时钟速率只需将计算所得值写入寄存器。时钟中断函数sysClkConnect()在usrRoot()中调用,并且将usrClock()接口挂接为每次时钟中断到来时需要调用的函数。
2.3 存储及总线接口
X86体系结构的存储管理包括段式存储管理和页式存储管理。全局描述表被段式存储管理所使用。页目录和页表被MMU(Memory Management Unit)所使用。VxWorks使用平坦(flat)段模式。代码和数据段被映射到整个32位线性地址空间。
在VxWorks中,根据目标机的具体情况对ROM和RAM的空间布局进行配置,主要有ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS等,还包括用户主流程序的内存基地址、局部总线内存基地址、内存基地址以及内存大小等[4]。
另外还需要提供PCI总线接口,需要实现的接口包括:sysPciInByte(),sysPciInWord(),sysPciOutByte(),sysPciOutWord()。根据PCI总线规范的定义,访问PCI配置空间的操作是由一系列的端口组合而成,sysPciInByte()和sysPciOutByte()在本质上是一样的[5]。
此外,为了实现VxWorks的应用,还需要设计如串口、网络控制器和SCSI控制器等设备驱动程序[6]。
3 时间同步软件的实现
时间同步软件可设置硬件定时器,接收它发送的定时信号,周期性向网络发送时间同步消息,实现全网的软同步。同时,当总线网络采用冗余组网方式时,冗余网络通常具有至少2台交换机,每个交换机内部都含有1块业务处理板,其上的时间同步软件不但要建立用于周期性发送时间同步消息的发送进程,还要建立一个用于感知其他业务处理板存在的时间同步消息接收进程。接收进程一旦接收到来自其他节点发出的时间同步消息,立即对该消息进行解析,若其主机标示符小于本节点的主机标示符,则立即发信号给发送进程,暂停本节点的时间同步消息发送;若接收线程发现连续3个周期没有收到其他节点发送的时间同步消息,则认定网络上不存在其他的业务处理板(或认定其发生了故障),则立即发信号给发送进程,恢复本节点的发送过程。时间同步软件的处理流程图如图3所示。
某火炮总线网络是基于IEEE 802.3和IP技术的通信网络。在数据链路层遵循IEEE 802.3标准规范,在网络层采用IPv4网络协议,在传输层采用UDP协议,在会话层采用消息报协议。UDP是无连接的传输层协议,其结构简单,只实现了应用程序之间的互相映射。因此在会话层协议中,需要设计时间同步消息进行完善,然后利用组播通信技术实现时间同步消息的发送和接收。
3.1 时间同步消息简要说明
时间同步消息的结构如图4所示。该消息的长度为24字节,共包含6个字段。
1)消息头:该字段为4字节无符号字符型,标识消息的属性。
2)主机标示符:该字段为4字节无符号整型,记录发出消息的主机标示符。
3)消息序列号:该字段为4字节无符号整型,记录消息的序号,当计数值达到232-1后翻转为0。
4)时戳秒部分:该字段为4字节无符号整型,记录消息发出时刻的秒部分。该数值起始于1970年1月1日0时0分0秒。
5)时戳纳秒部分:该字段为4字节无符号整型,记录消息发出时刻的秒以下部分,单位为纳秒。
6)时间间隔:该字段为4字节无符号整型,记录本消息与上一消息间的时间间隔,单位为微秒。
根据时间同步消息结构图,定义时间同步消息结构体和时间戳结构体。
3.2 组播通信的实现
组播是同一数据报对多个IP地址的传送。组播是IP层的功能,但是应用程序需要通过UDP套接字才能使用该功能[7]。可以调用函数socket()打开套接字。进行组播的IP地址范围从224.0.0.0到239.255.255.255。这些地址也称之为D类地址和组播地址。以D类地址作为目的地址的数据报将被传送到加入到组播地址组中的每个进程。可以调用函数bind()分配一个网络地址给指定的套接字。VxWorks的一个进程要想组播一个数据报,只需发送到正确的组播地址。进程可以使用任何的UDP常规数据报。可以调用函数setsockopt()配置套接字,同时调用函数mRouteAdd()来设定到组播的地址的路由。VxWorks进程要想接收到组播数据报,必须加入到组播地址组。这可以通过设置正确的套接字选项实现[8],如表1所示。
表1 组播套接字选项
具体实现时间同步消息的发送和接收,需要在程序中创建并激活2个不同优先级的接收和发送任务来实现组播通信,同时基于任务优先级创建并初始化1个二值信号量。
在创建的2个任务中,组播通信定义了2个函数:mcastSend()和mcastRcv()。这些函数使用UDP套接字进行发送和接收组播通信。函数mcastSend()将一个缓存区的内容传送给指定的组播地址。函数的输入参数应该包含:组播目的地址、端口号、缓存区指针和缓存区大小。
函数mcastRcv()接收发送到特定组播地址的任何数据报。函数的输入参数应该包含:数据报发送方地址、组播地址、端口号和从数据报读出字节数。该函数的返回值是指向包含读取字节缓存区的指针。
通过调用函数完成基于组播通信UDP套接字的配置和绑定,创建不同优先级的任务完成时间同步消息的发送和接收,从而用组播通信实现时间同步。
4 应用与性能评估
为了在某火炮武器系统总线网络交换机中部署应用时间同步软件,设置交换机对组播数据采用泛洪方式处理,即组播数据被转发到交换机的每个端口上,从而实现总线网络中每个终端节点都可以接收到时间同步消息。如图5所示,总线网络采用周期方式通信时,每个通信周期都是交换机发出的时间同步消息发起的,并且不断循环。每个通信周期可具体划分为多个专属时隙,这些专属时隙将根据通信需要分配给网络中的各个终端。终端节点在收到同步消息后,根据消息内包含的时间信息进行同步,然后按照预先安排的时隙分配表,决定在本周期内的具体发送时刻,并设置软/硬件定时器,在定时器计时到达时传输实时数据。
时间同步消息在总线网络中的传输延时是对时间同步软件性能最主要的评估,反映了总线网络系统同步时统的精度。
1)存储转发时延dSF为
dSF=l/C
(1)
式中:l为数据帧长度;C为链路带宽。
2)MAC层交换时延dSW一般为固定值,通常有
dSW≤5 μs
(2)
3)当采用双绞线作为传输介质时,传输时延dWL为
dWL=DTR/vTP
(3)
式中:DTR为收发双方之间的双绞线长度,DTR≤400 m;vTP为电信号在双绞线的传输速度,这个值大致为真空光速的2/3,即vTP≈2×108m/s,于是可得
dWL≤2 μs
(4)
4)协议处理时间dpp
在目前主流计算机配置(Intel Core2 2 GHz)下,典型的协议处理时间可控制在20 μs。
dpp≤20 μs
(5)
一个时间同步消息从源节点发出,经过传输和交换,最终到达目的节点,这个过程总的时延 为dTOTAL
dTOTAL=dSF+dSW+dWL+2dpp
(6)
时间同步消息数据长度l=24 Byte,对于100 Mbps网络,可得dTOTAL≤87 μs。
笔者利用网络抓包工具记录时间同步消息与上一个消息间的时间间隔,计算统计传输延时。每个测试用例运行3次,一次测试时间为3 h,测得的传输延时统计数据如表2所示。通过分析发现与理论值基本吻合,满足火炮总线网络交换机同步精度要求。
表2 传输延时统计数据 μs
5 结束语
为了缩短系统开发时间、减小质量、尺寸和功耗等,笔者选取技术成熟的硬件平台,结合X86处理器体系设计了一种基于VxWorks组播通信的时间同步软件。就VxWorks在硬件平台上的移植和组播通信技术等进行了详细描述;并将时间同步软件应用于某火炮武器系统总线网络交换机并进行性能评估。设计的基于VxWorks组播通信的时间同步软件可满足武器系统对同步时统精度的要求,提高了火炮武器系统总线网络内外信息的共享和交互能力。
References)
[1]LIPPERT Embedded Computers Gmbh.Cool road runner-945GSE technical manual[M].Berlin:Lippert Embedded Computers Gmbh,2009:1-2.
[2]WIND Rinver Systems Inc.VxWorks programmer’s guide[M].Alameda:Wind Rinver Systems Inc,2003:1-5.
[3]WIND Rinver Systems Inc.VxWorks BSP developer’s guide[M].Alameda:Wind Rinver Systems Inc,2003:33- 41.
[4]WIND Rinver Systems Inc.Tonardo 2.2 users guide[M].Alameda:Wind Rinver Systems Inc,2002:10-15.
[5]WIND Rinver Systems Inc.VxWorks network programmer’s guide[M].Alameda:Wind Rinver Systems Inc,2003:22- 27.
[6]李立志,张朝阳,陈文正.实时操作系统VxWorks设备驱动程序的编写[J].计算机工程,2003,29(4):182- 184.
LI Lizhi,ZHANG Zhaoyang,CHEN Wenzheng.Progrmming of a device driver for VxWorks[J].Computer Engineering,2003,29(4):182-184.(in Chinese)
[7]李金库,张德运,杨振江,等. Vxworks下组播路由体系研究与实现[J].计算机工程与设计,2005,26(2):299- 301.
LI Jinku,ZHANG Deyun,YANG Zhenjiang,et al.Research and implementation of multicast routing architecture based on VxWorks[J].Computer Engineering and Design,2005,26(2):299-301.(in Chinese)
[8]杨武军,郭娟.IP网络技术与应用[M].北京:北京邮电大学出版社,2010:82-100.
YANG Wujun,GUO Juan.IP network technology and application[M].Beijing:Beijing Posts and Telecommunications University Press,2010:82-100.(in chinese)
Design and Application of Bus Network Switch Time Synchronization Software of the Gun
ZHANG Zhuo, ZHAI Erning, HE Hao
(Northwest Institute of Mechanical and Electrical Engineering, Xianyang 712099, Shaanxi, China)
A time synchronization software is designed,which make an artillery bus network system to realize synchronization control.The hardware platform is consist of X86,network protocol chips,hardware timing terminal and external in-terfaces.A real time operating system Vxworks was transplanted on it, the start-up, interrupt and clock management,memory and bus management in VxWorks is depicted as well. Time synchronization message structure is created in the VxWorks development environment Tornado 2.2,the socket is used to implement time synchronization message multicast communication,the terminal nodes are synchronized according to the time information in the message.The software was applied to the bus network switch of an artillery, the performance evaluation is conducted, which indicates this software meets the requirements of the system on time synchronization accuracy.
X86; VxWorks; multicasting; bus network
10.19323/j.issn.1673-6524.2016.03.014
2015-11-30
张卓(1983—),男,硕士,工程师,主要从事火炮武器系统通信技术研究。E-mail:l_dullboy@126.com
TP393
A
1673-6524(2016)03-0065-05