王海濤 付 鈞 鮮 勇 杜向輝
(武漢市長虹橋37-1號1) 武漢 430064)(中國空空導彈研究院2) 洛陽 471009)
(海軍駐洛陽地區航空軍事代表室3) 洛陽 471009)
ARINC 429是美國航空無線電設備公司(Aeronautical Radio Incorporated ARINC)資助,航空系統電子工程委員會(AEEC)制訂的一個通訊協議標準,目前版本為ARINC429-15。ARINC429總線通過一對單向、差分耦合、雙絞屏蔽線進行數據傳輸,支持最高100Kbit/s的傳輸速率,廣泛應用在航空電子設備中。
LabWindows/CVI是NI公司開發的一種可以在多種操作系統下運行的虛擬測控軟件開發平臺,它不但有豐富的函數庫,還集成了各種專業的測控工具,提供了優越的硬件接口功能,基于該環境可以充分利用各種資源配置系統結構,進而達到系統最優、成本最低的目的。
在某型產品的生產測試過程中,需要利用ARINC429數據采集設備進行數據采集和分析,本文設計一種基于LabWindows/CVI軟件開發平臺開發的USB接口的ARINC429數據采集系統,該系統通過USB連接線與測試計算機連接,支持即插即用(Plug and Play),使用簡單,安裝時無需關閉測試計算機,也不需要打開機箱安裝,避免了專用測試設備體積大、質量大的缺點。
該數據采集系統由USB接口芯片PDIUSBD12、微控制芯片AT 89C52及ARINC429控制芯片DEI1016和BD429芯片組組成。DEI1016接收到429數據后,經AT 89C52發給PDIUSBD12,通過USB總線發給上位機[1]。系統硬件結構圖如圖1所示。

圖1 數據采集系統硬件結構圖
該系統的應用程序開發選用LabWindows/CVI開發平臺,CVI是Windows環境下面向計算機測控領域的虛擬儀器軟件開發平臺。該平臺以ANSI C為核心,將功能強大的C語言與測控專業工具有機地結合起來,并支持多線程,利用它的集成開發環境,在編程過程中直接調用用戶界面函數和高級分析庫函數,能方便的實現數據存儲、波形輸出等功能[2]。
在本系統中上位機和數據采集卡之間通信的實時性要求很高,收發的數據量比較大,軟件對采集到的數據做實時處理之外還需要實時顯示與儲存,因此,保證各種任務的同時進行且互不影響是此系統軟件設計的關鍵,采用多線程技術可以很好地解決本系統的問題。
多線程技術可以實現在操作系統的一個進程中執行多個線程的并行執行。因此采用多線程的編程技術,整個系統軟件含有完成不同功能的多個線程,如數據采集、數據處理、實時數據顯示。這樣既能最大限度地保證數據采集的實時性,又能及時響應用戶的其他操作,極大地提高了CPU利用率及程序的運行效率。
LabWindows/CVI提供2種定時器機制實現多線程的方法:線程池與異步定時器。線程池適用于不連續地執行多次或在循環中執行的任務,而異步定時器適用于在固定時間間隔內執行的任務。結合本系統的實際情況,多線程的設計采用線程池機制。軟件中以用戶界面為主線程,將數據采集、數據實時顯示為次線程,在所有的并發線程中,負責數據采集線程優先權僅次于用戶界面線程。數據采集系統主要完成的任務有實時采集,將采集的存入數據庫或輸出等。
使用多線程設計,數據保護與線程間的通信安全是一個關鍵問題,否則就會造成應用程序“死鎖”。LabWindows/CVI提供了線程鎖、線程安全變量和線程安全隊列3種高級機制來解決這些問題,其中線程安全隊列方法是為多個線程之間傳遞大批量數據提供的一種保護措施,因此本設計采用線程安全隊列的方法。在建立線程安全隊列TSQ的同時,設置對應于某一事件的回調函數,當有線程向線程安全隊列TSQ添加數據或讀取數據時,就會觸發預先定義好的事件響應函數,這些函數存在于數據處理線程中,從而完成相應的數據處理功能。本設計多線程的架構流程見圖2,兩者通過線程安全隊列開辟的緩存進行線程的同步與通信[3]。

圖2 線程架構流程圖
系統用戶主界面如圖3所示。

圖3 數據采集系統用戶主界面
動態鏈接庫的設計主要解決USB板卡與應用軟件之間的通信,動態鏈接庫(DLL)是一種函數或資源庫,庫中的函數可以被應用程序或其他DLL調用。使用LabWindows/CVI平臺開發的應用程序不能直接調用Window s的 API函數。因此,DLL就成為兩者建立聯系的橋梁。對于32位標準動態鏈接庫,其DLL文件中包含了具體的實現代碼,而導出庫文件則包含函數的導出信息,即相應的函數在DLL文件中的位置和應用方法等[4]。
在為該系統的ARINC429數據采集卡開發的DLL文件中,其主要函數聲明如下:

在DLL文件的編寫中應注意以下問題:
1)DLL的聲明中不需要在函數聲明前加‘extern"C"'。
2)DLL的聲明中如果某一個函數沒有參數,應用void代替。
數據采集系統需要將采集到的數據以文檔形式保存,由于數據繁多,查找起來不是很方便,可以創建一個數據庫將有關數據索引存入數據庫中,查找過程就可大大簡化。還可將429解碼信息放入數據庫中,通過程序調用完成429數據解碼功能。利用這種體制可以方便的對程序進行擴充,完成不同編碼格式的429信息的解碼。
LabWindows/CVI并沒有提供直接通過標準函數庫提供數據庫的操作函數,也沒有在工具包中包含數據庫的驅動器。要在LabWindows/CVI的環境下使用數據庫,可以安裝一個免費的CVI數據庫工具包DatabaseToolKit。工具包中提供了豐富的數據庫函數,CVI可通過ADO接口連接多個數據源,本系統采用ODBC數據源。ODBC實際上是一個函數庫,它提供了一個連接到底層數據庫系統的公共應用程序接口。
軟件連接數據庫部分代碼如下:


數據庫查詢界面如圖4所示。

圖4 數據查詢界面
本文基于LabWindows/CVI這一軟件開發平臺,設計了一種高速ARINC429數據采集系統。運用多線程技術、DLL技術及數據庫技術極大的提高了系統性能,使采集系統具有了實時性、可擴展性等特點。系統經過測試達到了設計要求,運行情況良好。
[1]梅小冬,李玉恩.基于USB的ARINC429總線測試系統的設計[J].微計算機應用,2005(6):751~754
[2]王建新,楊世鳳,隧美麗.LabWindows/CVI測試技術及工程應用[M].北京:化學工業出版社,2006
[3]翟巍,王勇,植涌.基于 LabWindows/CVI高速數據采集系統的設計[J].鄭州輕工業學院學報,2007,22(6):83~86
[4]王紀森,周世剛.基于LabWindows/CVI的飛機加載測控系統[J].測控技術,2008,27(3):69~72