APP下载

基于1553B的综合导航系统总线信息监测仪*

2011-06-07聂浩翔卞鸿巍王荣颖

舰船电子工程 2011年12期
关键词:板卡高精度中断

聂浩翔 卞鸿巍 王荣颖

(海军工程大学电气与信息学院 武汉 430033)

1 引言

MTL-STD-1553B是20世纪70年代发展起来的“飞机内部时分制指令/响应式多路传输数据总线”[1],具有可靠性高、速度快、双冗余、便于提高电子系统集成等优点[6]。经过30多年的发展,MTL-STD-1553B已经成为国际公认的用于军用平台信息交换的总线标准[2]。

目前,我国海军、空军的一些武器平台已经采用 GJB289A(MTL-STD-1553B)数据总线[2]。如某综合导航系统中的若干个分系统通过1553B总线与其计算机进行数据交换。为了保证系统正常运行,使系统在联调测试过程中,对发生的故障、问题能够准确定位,及时排除,需要对1553B数据监测技术进行研究。

本文以某综合导航系统联调为背景,研制出一种对1553B总线系统信息进行监测的系统。该1553B总线监测系统初始化作为总线监视器MT挂在总线系统上,监视、记录整个总线系统的数据,为故障定位提供可靠的通信数据,为日后建立相应的故障诊断系统积累大量的试验数据。

2 1553B总线监测系统方案

总线监测系统主要由硬件和软件两部分组成。其中硬件部分主要由加固机和1553B板卡组成。根据系统需求,采用低功耗、散热良好、性能稳定的加固机作为系统应用软件的硬件载体。

为了加快硬件应用软件的开发速度,选用了符合1553B 标 准 的 ELCUS 公 司 的 TEI-PCI4-01-C板卡,此板卡支持由ELCUS公司提供的源代码级API,在1553B总线环境下,能实现总线控制器(BC)、总线监视器(MT)、远程终端(RT)功能。

图1 综导系统总线信息监测仪连接示意图

此板卡的源代码级API函数提供了操作系统和硬件之间的接口,方便用户进行程序设计和二次开发。该板卡应用平台广泛,针对DOS、Windows 98、XP、2000、ME、NT 4.0以及 Linux kernel 2.4等操作系统,驱动都给出了相应的板卡通用接口函数。另外,通过软件编程可任意更改板卡的工作模式(某些板卡要通过设备上的焊接或跳线来设置),方便开发人员灵活处理具体通讯问题。

3 软件设计及关键技术

软件部分是在Windows XP系统下采用VC++6.0作为开发环境,调用ELCUS公司的API函数来实现监测总线数据通信的功能。

3.1 软件组成和工作流程

总线监测仪软件采用程序设计中常用的模块化思想。根据1553B通讯协议,总线监视器的功能不响应总线控制器的任何命令,用于监视总线数据及提取数据以便以后的数据分析[3]。因此软件主要由主模块和五个主要的模块:初始化模块、数据监控模块、数据解析模块、数据显示模块和数据保存模块组成。

图2 总线监测仪软件组成图

主模块负责整个系统的软件流程;初始化模块主要用来对板卡和系统运行时所需要的一些参数如采样时间进行初始化;数据监控模块以各种方式对用户关心的消息进行选择监控;数据解析模块把监控的数据按照一定的格式解析成为具体的物理含义;数据显示模块是用编辑框或图表把监控解析后的数据进行显示;数据保存模块是保存解析后的数据以便事后分析。

3.2 基于多线程和板卡中断机制的数据采集

该综合导航系统交联关系十分复杂,1553B总线承担着所有消息的传输,消息多而且传输频率比较高,因此,1553B总线信息监测系统必须具有实时性[8~9],才能监控总线上传输的所有消息,不会出现消息丢失的情况。

中断技术是解决实时性较好的办法,即每个消息传输结束,产生消息中断,中断服务程序对传输完的消息进行处理。然而由于Windows操作系统对中断不完全开放,在Windows下开发中断处理程序非常困难。但是Windows提供了消息循环机制和多线程机制[4,7],采用 Windows的多线程机制和板卡的中断机制可以解决这个问题[5]。

图3 软件流程图

1553B板卡底层通信软件的运行由总线接口板上的微处理器直接管理,因此,它不直接由Windows操作系统管理,具有实时性。一条消息运行结束时,总线接口板产生消息结束中断,微处理器组织将消息数据存储到双口存储器中。

在程序中创建一个MTProc线程,该线程一般处理“睡眠等待”状态,当查询到有中断产生时,线程被“唤醒”,中断服务程序对消息进行处理,这样,采用Windows消息循环机制和底层板卡实时中断机制相结合,保证了消息采集的实时性。流程图如图3所示。具体过程如下:

在初始化模块中创造一个事件对象并返回句柄hEvent,并将事件对象置为无信号状态。调用板卡API函数tmkdefevent定义当前板卡事件对象,驱动利用该句柄通知进程接收设备中断。在MTProc线程中,由于事件处于“非信号状态”,通过调用WaitForSingleObject()函数来监视这个信号。如果检测到有信号则返回WAIT_OBJECT_0,按照需求进行操作;如果超过了超时间隔,事件对象仍然为信号,则返回WAIT_TIMEOUT。

3.3 高精度定时器的设计

目前系统定时器是在Visual C++6.0中常用的定时器,即使用SetTimer()函数进行初始化,应用程序响应SetTimer()函数发送的消息 WM_TIMER。该定时器在用Visual C++6.0编程时使用较多,但是它的最大缺点是其最小定时时间约为55.0722ms[11],只能满足测控软件的一般定时需求。

本文针对1553B通信速率高的特点,在多线程的基础上,利用QueryPerformanceCounter函数和QueryPerformanceFrequency函数设计了高精度定时器。

两个函数的原型为

两个函数均在MTProc线程中调用。

1)首先调用QueryPerformanceFrequency函数取得高精度运行计数器的频率f。单位是次/秒(n/s),该数值一般很大。

2)在需要定时的代码两端分别调用QueryPerformanceCounter以取得高精度运行计数器的数值n1,n2。两次数值的差值通过f换算成时间间隔t=(n2-n1)/f。

3)建立一个while(t≥time)循环,time为采样时间,若满足条件,则进行相应的处理。

测试证明,设计的高精度定时器满足数据采集的要求。

4 结语

1)针对某综合导航系统设计了一种总线监测仪器,重点介绍了系统的组成和程序设计中的关键问题。

2)在软件设计中采用了多线程和硬件板卡中断技术进行数据采集,在此基础上设计了一种高精度定时器保证了数据的实时性。

3)测试表明,该总线监测仪能较好地接收综导总线数据,人机界面良好,工作稳定,为系统数据分析、故障定位提供了支持,可以为综合导航系统联调提供有力支持。

[1]MARC R P.MIL-STD-1553Bdesigner's guide[S].6th edition.New York:ILC Data Device Corportion,1998:2~4

[2]周明光,马海潮.计算机测试系统原理与应用[M].北京:电子工业出版社,2005:35~36

[3]王少蕾,朱华兵,周强.1553B总线系统通信软件设计[J].火炮发射与控制学报,2008(4):87~88

[4]Jim Beveridge,Robert Wiener.Win32multithreading application in Win32[M].侯捷,译.武汉:华中科技大学出版社,2002:121~132

[5]赵永库.MIL-STD-1553B总线综合测试系统设计[J].计算机技术与应用,2005,25(3):42~44

[6]陈凯,阎杰,苗睿锋.MIL-STD-1553B总线测试仪软件开发[J].弹箭与制导学报,2005:264~266

[7]David J Kruglinski.Visual C++技术内幕[M].第四版.北京:清华大学出版社,2002

[8]DOUGIAS E C.MIL-STD-1553Bvalidation and test facility[J].IEEE AIAA 9th Conference 2proceeding,1990,15(2):23~31

[9]郭泽仁.1553B总线系统优化及可靠性设计[J].山东理工大学学报:自然科学版,2008,22(1):67

[10]徐欣.无线网络导航服务系统的设计与实现[J].计算机与数字工程,2008,36(12)

[11]吴正平,等.用Visual C++6.0实现高精度定时器[J].江汉石油学院学报,2002,24(3):87

猜你喜欢

板卡高精度中断
MACH2系统板卡程序下装平台的研制
车载控制器CVRE板卡显红故障分析及处理
“单片机中断概述”微课教学设计
一种考虑GPS信号中断的导航滤波算法
Linux中断线程化分析及中断延时测试
基于Niosll高精度超声波流量计的研究
高精度PWM式DAC开发与设计
高精度PWM式DAC开发与设计
高抗扰高精度无人机着舰纵向飞行控制
跟踪导练(二)(5)