APP下载

基于VxWorks的嵌入式二次雷达航迹记录仪设计✴

2012-07-01韩林

电讯技术 2012年4期
关键词:数组航迹队列

韩林

(中国西南电子技术研究所,成都610036)

基于VxWorks的嵌入式二次雷达航迹记录仪设计✴

韩林

(中国西南电子技术研究所,成都610036)

为实现对二次雷达航迹数据的实时记录以及事后的回放分析,设计并研制了基于VxWorks实时系统的嵌入式记录仪,采用自定义缓冲队列的数据传输机制,充分考虑了任务之间的同步及互斥,并利用PC104板卡的硬件辅助时钟进行系统设计。实践证明,在航迹数据均值速率3.84 kbyte/s(96批/秒)(峰值速率为20.48 kbyte/s即512批/秒)的情况下,能达到正常实况回放的效果。

二次雷达;航迹数据;记录仪;VxWorks嵌入式系统;缓冲队列;辅助时钟;任务互斥

1 引言

在工程项目中,二次雷达系统需要配备一套基于以太网络的记录回放设备,用作记录目标航迹数据,并在事后可对所记录的数据进行回放分析。

目前,广为实现并被使用的记录回放设备主要有雷达等高速信号或各种视频信号采集及回放系统[1],还有一部分记录回放设备被使用在了飞行器或空管系统的航迹记录与回放分系统中[2],本设备类似于后者。

该设备以VxWorks嵌入式系统为设备运作平台。VxWorks是目前嵌入式系统领域中被广泛应用且市场占有率比较高的嵌入式操作系统,同时也具有较强的网络功能。该操作系统具有高效的代码和良好的可裁剪性,以及良好的可移植性。系统提供基于优先级的任务调度、任务间同步与通信、中断处理、定时器和内存管理等功能。

本项目研发过程中利用了VxWorks系统的多任务调度机制,以由数据描述结构体组成的自定义缓冲队列[3]为记录(回放)数据的缓存及在任务间传递的方式,代替了以消息队列为任务间通信的传统方式;软件流程设计上,以命令解释任务为所有远程网络命令响应任务生成的源头,有效提升了多任务运行环境下任务之间的互斥性能,从而增加了系统运行的可靠性;同时,为了达到在数据回放时能较精确地实现数据的实况回放(回放的数据(信号)与当初采集的数据(信号)格式基本相同且速度相同),还利用到了系统运行硬件平台——PC104板卡中的辅助时钟来完成数据回放部分的设计。

2 软件设计原理及实现流程

2.1 软件设计原理

记录仪的主要软件设计原理如图1所示。描述,命令数据描述结构体成员如下:

图1 软件设计主要流程框图Fig.1 Software design flow diagram

为保证航迹数据的记录不影响对网络命令的响应,分别用两个任务来执行相关的操作,并分配各自的缓冲队列;由唯一的命令解释任务对网络命令进行分析判别,从而生成相应的执行任务。执行结果数据直接送入网络发送数据缓冲队列;若是执行回放操作,则生成两个任务——由记录文件数据读取任务负责从记录文件读取回放数据并存入航迹数据回放缓冲队列,由回放数据发送任务负责将从该缓冲队列中顺序取出的航迹数据按实况的时间间隔发送到网络发送数据缓冲队列。最后,网络发送任务将网络发送数据缓冲队列中的数据顺序无差别地发送到网络。

2.2 重点实现流程

2.2.1 数据记录任务流程

网络数据报文在收到以后存入在系统内存中开辟的缓存区,数据描述结构体在装订时间信息后也分别被加入到了命令数据缓冲队列或航迹数据接收缓冲队列中。

数据描述结构体是对接收到的网络数据报文的排列组成。

图2 数据记录流程Fig.2 Data recording process

上述的数据记录文件由收到的记录数据顺序排列组成,数据索引文件由记录数据描述结构体顺序

航迹数据完成记录后在硬盘上形成的文件结构图例如图3所示。

开始记录后即以“年-月-日”作为名称生成文件夹,该文件夹下又以该日记录工作的次序数为名称生成子目录,该子目录下包含两个文件:航迹数据文件和航迹数据索引文件,以“TRKDATA”作为数据文件名称,以“TRKDATA-INDEX”作为索引文件名称。这样的“目录+文件”的文件结构设计方式主要是为了便于后续的回放操作。

图3 硬盘文件结构图例Fig.3 Structure sketchmap of files on the hard drive

图5 航迹数据的发送流程Fig.5 The sending process of track data

2.2.2 数据回放流程(记录文件数据读取任务、回放数据发送任务)

网络发送的数据包括命令操作结果和回放的航迹数据。

航迹数据的回放流程分为数据的读取与数据的发送两个部分,之所以将数据回放分为两个任务来实现,主要是为了简化任务使命,通过系统模块化设计来提高软件可靠性,具体如图4和图5所示。

图4 航迹数据的读取流程Fig.4 The reading process of track data

上述的回放流程最后只是将回放的数据添加到了网络发送缓冲队列中,并没有完成网络发送。当回放数据被添加到网络数据发送队列时,其数据描述结构体可简化为命令数据描述结构体cmdSingle。

命令结果数据在相关命令执行后直接添加到网络数据发送队列中,其元素结构体同上。

最后的网络发送是单独由专门负责网络发送的任务统一执行的,在该任务中,对回放数据和命令结果数据进行无差别的网络发送。

2.3 软件设计中的重点

2.3.1 数据描述结构体的采用

软件设计中,各记录回放数据的缓冲队列均以数据描述结构体为队列元素,同时以“数据文件+数据索引文件”的方式作为存储机制。

数据描述结构体以定长数据作为数组成员,且可以在该数据描述结构体中通过增加新的结构体成员来增加对原数据的特征描述,从而为不定长的原数据提供了一个较友好的封装。同一数据在两个队列中传递时,也可以通过以数据描述结构体在两个队列数组中的传递来代替数据的传递,这样可以减少内存资源的申请占用次数,从而提高了程序效率。

“数据文件+数据索引文件”的存储机制也正是在上述基础上建立起来的,不定长的数据在存储时,必然需要加入额外的一些信息,从而才能避免读取时出错。数据索引(即数据描述结构体)中就包含了这样的信息,而将数据与数据索引分开存储,就避免了数据与其相关描述信息存储在一个文件里面造成的信息杂乱,又减少了数据文件的存储空间。从另一个角度来看,若善加利用此索引文件,也能达到对数据进行简单加密的效果。

2.3.2 缓冲队列的实现

缓冲队列其实就是以在2.2.1节中提到的数据描述结构体为元素组成的数组。该数组为全局变量数组,这样就可被两个任务函数访问,一个任务向该数组添加元素,一个任务从该数组取元素,因此为了让这两个任务在添加(取)元素之前能知道(或者之后能更新)数组的当前有效元素个数或其他状态,还需要设置一些能表明当前数组状态的全局变量(比如数组中的元素个数、数组头元素位置等)。同时又为了让这些全局变量不会因为同时被访问而产生混乱,就还需要设置一个互斥信号量来供这两个任务争夺,谁得即谁访问,访问完后即刻释放。

由此可知,缓冲队列的构成主要是以下3个要素组成:数组或链表(全局变量);表队列(即数组)当前状态的全局变量,包括队列长度(即数组当前有效元素个数)、队列头(即数组当前第一个元素位置);互斥信号量。

用缓冲队列代替消息队列,有以下两个好处:

(1)不论是队列元素的添加任务或者读取任务,均是处于不停的轮转中,没有任务的阻塞发生。这种情况下,当需要任务退出时,可以很方便地通过设置表需任务退出的全局变量来让各个任务即刻跳出任务循环而自动退出,防止了通过直接删除任务造成的部分资源未释放的情况发生。

(2)当缓冲队列中的元素被取出而未被正确使用时,可以简单地通过不删除队列头的操作来使下一次的循环可以仍然从该位置获取到此元素。而消息队列在消息被取出后即自动更新队列,若出现上述情况,则可能出现数据被遗漏处理的情况,即便可以通过在程序结构设计更多的嵌套判断来避免此种情况发生,其设计也相对较复杂。特别是在两个上下游队列中转移元素时,此情况尤为突出。

2.3.3 任务之间的互斥

由于需要记录仪具有可通过网络命令进行远程操作的功能,而多命令必定形成多任务的同时执行,这就涉及到可能存在的多任务互斥问题。除了使用VxWorks系统的各种信号量来进行任务的同步与互斥之外,所有的任务都是通过唯一的命令解释任务生成。这样一来,对各个任务在生成前的必要判断(比如是否重入、是否有资源冲突等)就变得比较简单了。

3 试验结果

测试时,模拟发送目标航迹报文M个,每个航迹报文之间的发送时间间隔为T1。回放时检测到的航迹报文为N个,每个航迹报文之间的时间间隔为T2。

若T2=T1,则表明对航迹数据的回放能够达到实况回放的效果;否则,反之。若N=M,则表明对顺序记录的航迹报文能完成全部记录,并能完成顺序回放。若N<M,则表明记录的航迹报文有漏记、错记或回放错误的情况发生。

测试发现,在其他条件不变的情况下,若T1越小,则N<M的情况越容易发生,同时T2与T1之间的偏差也越明显。

N<M的情况发生,主要与系统在生成记录任务之初对需记录航迹报文的接收缓冲队列的长度设置有关。若该队列设置得越长,则能保证在数据记录任务还来不及把后续收到的航迹数据写入记录文件的时候,能有更多的内存空间可以先将这些航迹数据暂存下来,从而不至于造成航迹报文的丢失,也就不会导致数据漏记的情况发生。错记与回放错误造成的N<M主要与程序逻辑错误或存储硬件有关,在此不作考虑。此外,也不考虑程序逻辑错误造成的数据漏记。

T2与T1之间的偏差主要来自两个队列元素在接收之初装订的时间信息之间的差值与时间真值差之间的偏差,同时也与系统辅助时钟计数精度有关,这两方面均与系统整体及底层软硬件有关。由于每个航迹报文均有专门字段标明其生成的精确时间真值信息,故T2与T1之间的偏差不会对航迹数据的事后分析造成任何影响。

航迹数据的记录与回放功能测试试验结果表明,若在对记录文件进行两次批量写操作之间设置了合适的间隔时间(3 s),只要设置足够长的接收缓冲队列(600条,30字节/条),同时在一次批量写操作过程中设置合适的写入数据条数(400条,30字节/条),就可以保证在均值速率3.84 kbyte/s(96批/秒)(峰值速率为20.48 kbyte/s即512批/秒)的情况下,不漏记航迹数据。虽然在突然断电的情况下会最多漏记最后3 s的航迹数据,但对于航迹记录这样非重大事件的记录工作来说,这个时间值应该是可以允许的。

4 结束语

本文采用“数据文件+数据索引文件”的存储机制,实现了对不定长数据的记录与回放;通过以缓冲队列代替VxWorks消息队列机制以实现各个任务之间数据(消息)的传递,良好地防止了数据被遗漏处理;以命令解释任务作为任务生成的唯一入口简化了任务之间的互斥处理;利用PC104板卡中的硬件辅助时钟实现了回放精度较高的实况回放效果。上述几点被良好的应用在了本项目之中,在此提出进一步改进建议如下:

(1)回放数据时增加如下功能:查找到指定时间后开始回放,回放后退操作;

(2)文件的存储结构可以再进行优化,从而细化到可对文件进行维护操作,如删除、转存等;

(3)增加采样及数据压缩编码设计,从而增加系统在出现已定义情况时对信号采集记录回放的功能。

[1]李永冰.实时高速高分辨率信号采集存储与回放系统[J].国外电子元器件,2007(4):73-75. LIYong-bing.Real time high speed signal collection storage and playback system[J].International Electronic Elements,2007(4):73-75.(in Chinese)

[2]张五二,游志胜,杨波,等.记录回放在空管系统中的一种实现[J].中国民航飞行学院学报,2005,16(3):47-49. ZHANGWu-er,YOU Zhi-sheng,YANG Bo,et al.An implementationmethod about record and replay in ATC system[J].Journalof China Civil Aviation Flying College,2005,16(3):47-49.(in Chinese)

[3]程敬原.VxWorks软件开发项目实例完全解析[M].北京:中国电力出版社,2005. CHEN Jing-yuan.VxWorks software development project instance is fully resolved[M].Beijing:China Electric Power Press,2005.(in Chinese)

Design of Record and Replay M odule Based on VxW orks for Secondary Surveillance Radar Tracks

HAN Lin
(Southwest China Institute of Electronic Technology,Chengdu 610036,China)

Themodule based on Vxworks is designed and developed to record and replay the tracks in the Secondary Surveillance Radar(SSR).Themechanism ofbuffer queue customed is used in software design,in which the synchronization and mutex between tasks is considered,and the auxiliary clock of PC104 is adopted.The practice shows that the tracks relayed in themonitor can achieve the effect like live Telecast video after the data in the average 3.84 kbyte/s rate(96 packet/s)(the peak 20.48 kbit/s rate or 512 packet/s))is recorded. Key words:secondary surveillance radar;track data;recorder;VxWorks embedded system;buffer queue;auxiliary clock;mutex between tasks

the B.S.degree from University of Electronic Science and Technology of China in 2002.He is now an assistant engineer.His research concerns the secondary surveillance radar.

1001-893X(2012)04-0581-05

2011-11-25;

2012-03-23

TN957

A

10.3969/j.issn.1001-893x.2012.04.032

韩林(1979—),男,四川江油人,2002年于电子科技大学获工学学士学位,现为助理工程师,主要从事二次雷达方面的研发工作。

Email:hanlinxx@163.com

HAN Lin was born in Jiangyou,Sichuan Province,in 1979.He

猜你喜欢

数组航迹队列
JAVA稀疏矩阵算法
JAVA玩转数学之二维数组排序
队列里的小秘密
基于多队列切换的SDN拥塞控制*
梦的航迹
在队列里
自适应引导长度的无人机航迹跟踪方法
丰田加速驶入自动驾驶队列
Excel数组公式在林业多条件求和中的应用
视觉导航下基于H2/H∞的航迹跟踪