聶浩翔 卞鴻巍 王榮穎
(海軍工程大學電氣與信息學院 武漢 430033)
MTL-STD-1553B是20世紀70年代發展起來的“飛機內部時分制指令/響應式多路傳輸數據總線”[1],具有可靠性高、速度快、雙冗余、便于提高電子系統集成等優點[6]。經過30多年的發展,MTL-STD-1553B已經成為國際公認的用于軍用平臺信息交換的總線標準[2]。
目前,我國海軍、空軍的一些武器平臺已經采用 GJB289A(MTL-STD-1553B)數據總線[2]。如某綜合導航系統中的若干個分系統通過1553B總線與其計算機進行數據交換。為了保證系統正常運行,使系統在聯調測試過程中,對發生的故障、問題能夠準確定位,及時排除,需要對1553B數據監測技術進行研究。
本文以某綜合導航系統聯調為背景,研制出一種對1553B總線系統信息進行監測的系統。該1553B總線監測系統初始化作為總線監視器MT掛在總線系統上,監視、記錄整個總線系統的數據,為故障定位提供可靠的通信數據,為日后建立相應的故障診斷系統積累大量的試驗數據。
總線監測系統主要由硬件和軟件兩部分組成。其中硬件部分主要由加固機和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等操作系統,驅動都給出了相應的板卡通用接口函數。另外,通過軟件編程可任意更改板卡的工作模式(某些板卡要通過設備上的焊接或跳線來設置),方便開發人員靈活處理具體通訊問題。
軟件部分是在Windows XP系統下采用VC++6.0作為開發環境,調用ELCUS公司的API函數來實現監測總線數據通信的功能。
總線監測儀軟件采用程序設計中常用的模塊化思想。根據1553B通訊協議,總線監視器的功能不響應總線控制器的任何命令,用于監視總線數據及提取數據以便以后的數據分析[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。
目前系統定時器是在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為采樣時間,若滿足條件,則進行相應的處理。
測試證明,設計的高精度定時器滿足數據采集的要求。
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