王海濤 付 鈞 鮮 勇 杜向輝
(武漢市長(zhǎng)虹橋37-1號(hào)1) 武漢 430064)(中國(guó)空空導(dǎo)彈研究院2) 洛陽(yáng) 471009)
(海軍駐洛陽(yáng)地區(qū)航空軍事代表室3) 洛陽(yáng) 471009)
ARINC 429是美國(guó)航空無(wú)線電設(shè)備公司(Aeronautical Radio Incorporated ARINC)資助,航空系統(tǒng)電子工程委員會(huì)(AEEC)制訂的一個(gè)通訊協(xié)議標(biāo)準(zhǔn),目前版本為ARINC429-15。ARINC429總線通過(guò)一對(duì)單向、差分耦合、雙絞屏蔽線進(jìn)行數(shù)據(jù)傳輸,支持最高100Kbit/s的傳輸速率,廣泛應(yīng)用在航空電子設(shè)備中。
LabWindows/CVI是NI公司開(kāi)發(fā)的一種可以在多種操作系統(tǒng)下運(yùn)行的虛擬測(cè)控軟件開(kāi)發(fā)平臺(tái),它不但有豐富的函數(shù)庫(kù),還集成了各種專(zhuān)業(yè)的測(cè)控工具,提供了優(yōu)越的硬件接口功能,基于該環(huán)境可以充分利用各種資源配置系統(tǒng)結(jié)構(gòu),進(jìn)而達(dá)到系統(tǒng)最優(yōu)、成本最低的目的。
在某型產(chǎn)品的生產(chǎn)測(cè)試過(guò)程中,需要利用ARINC429數(shù)據(jù)采集設(shè)備進(jìn)行數(shù)據(jù)采集和分析,本文設(shè)計(jì)一種基于LabWindows/CVI軟件開(kāi)發(fā)平臺(tái)開(kāi)發(fā)的USB接口的ARINC429數(shù)據(jù)采集系統(tǒng),該系統(tǒng)通過(guò)USB連接線與測(cè)試計(jì)算機(jī)連接,支持即插即用(Plug and Play),使用簡(jiǎn)單,安裝時(shí)無(wú)需關(guān)閉測(cè)試計(jì)算機(jī),也不需要打開(kāi)機(jī)箱安裝,避免了專(zhuān)用測(cè)試設(shè)備體積大、質(zhì)量大的缺點(diǎn)。
該數(shù)據(jù)采集系統(tǒng)由USB接口芯片PDIUSBD12、微控制芯片AT 89C52及ARINC429控制芯片DEI1016和BD429芯片組組成。DEI1016接收到429數(shù)據(jù)后,經(jīng)AT 89C52發(fā)給PDIUSBD12,通過(guò)USB總線發(fā)給上位機(jī)[1]。系統(tǒng)硬件結(jié)構(gòu)圖如圖1所示。
圖1 數(shù)據(jù)采集系統(tǒng)硬件結(jié)構(gòu)圖
該系統(tǒng)的應(yīng)用程序開(kāi)發(fā)選用LabWindows/CVI開(kāi)發(fā)平臺(tái),CVI是Windows環(huán)境下面向計(jì)算機(jī)測(cè)控領(lǐng)域的虛擬儀器軟件開(kāi)發(fā)平臺(tái)。該平臺(tái)以ANSI C為核心,將功能強(qiáng)大的C語(yǔ)言與測(cè)控專(zhuān)業(yè)工具有機(jī)地結(jié)合起來(lái),并支持多線程,利用它的集成開(kāi)發(fā)環(huán)境,在編程過(guò)程中直接調(diào)用用戶(hù)界面函數(shù)和高級(jí)分析庫(kù)函數(shù),能方便的實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)、波形輸出等功能[2]。
在本系統(tǒng)中上位機(jī)和數(shù)據(jù)采集卡之間通信的實(shí)時(shí)性要求很高,收發(fā)的數(shù)據(jù)量比較大,軟件對(duì)采集到的數(shù)據(jù)做實(shí)時(shí)處理之外還需要實(shí)時(shí)顯示與儲(chǔ)存,因此,保證各種任務(wù)的同時(shí)進(jìn)行且互不影響是此系統(tǒng)軟件設(shè)計(jì)的關(guān)鍵,采用多線程技術(shù)可以很好地解決本系統(tǒng)的問(wèn)題。
多線程技術(shù)可以實(shí)現(xiàn)在操作系統(tǒng)的一個(gè)進(jìn)程中執(zhí)行多個(gè)線程的并行執(zhí)行。因此采用多線程的編程技術(shù),整個(gè)系統(tǒng)軟件含有完成不同功能的多個(gè)線程,如數(shù)據(jù)采集、數(shù)據(jù)處理、實(shí)時(shí)數(shù)據(jù)顯示。這樣既能最大限度地保證數(shù)據(jù)采集的實(shí)時(shí)性,又能及時(shí)響應(yīng)用戶(hù)的其他操作,極大地提高了CPU利用率及程序的運(yùn)行效率。
LabWindows/CVI提供2種定時(shí)器機(jī)制實(shí)現(xiàn)多線程的方法:線程池與異步定時(shí)器。線程池適用于不連續(xù)地執(zhí)行多次或在循環(huán)中執(zhí)行的任務(wù),而異步定時(shí)器適用于在固定時(shí)間間隔內(nèi)執(zhí)行的任務(wù)。結(jié)合本系統(tǒng)的實(shí)際情況,多線程的設(shè)計(jì)采用線程池機(jī)制。軟件中以用戶(hù)界面為主線程,將數(shù)據(jù)采集、數(shù)據(jù)實(shí)時(shí)顯示為次線程,在所有的并發(fā)線程中,負(fù)責(zé)數(shù)據(jù)采集線程優(yōu)先權(quán)僅次于用戶(hù)界面線程。數(shù)據(jù)采集系統(tǒng)主要完成的任務(wù)有實(shí)時(shí)采集,將采集的存入數(shù)據(jù)庫(kù)或輸出等。
使用多線程設(shè)計(jì),數(shù)據(jù)保護(hù)與線程間的通信安全是一個(gè)關(guān)鍵問(wèn)題,否則就會(huì)造成應(yīng)用程序“死鎖”。LabWindows/CVI提供了線程鎖、線程安全變量和線程安全隊(duì)列3種高級(jí)機(jī)制來(lái)解決這些問(wèn)題,其中線程安全隊(duì)列方法是為多個(gè)線程之間傳遞大批量數(shù)據(jù)提供的一種保護(hù)措施,因此本設(shè)計(jì)采用線程安全隊(duì)列的方法。在建立線程安全隊(duì)列TSQ的同時(shí),設(shè)置對(duì)應(yīng)于某一事件的回調(diào)函數(shù),當(dāng)有線程向線程安全隊(duì)列TSQ添加數(shù)據(jù)或讀取數(shù)據(jù)時(shí),就會(huì)觸發(fā)預(yù)先定義好的事件響應(yīng)函數(shù),這些函數(shù)存在于數(shù)據(jù)處理線程中,從而完成相應(yīng)的數(shù)據(jù)處理功能。本設(shè)計(jì)多線程的架構(gòu)流程見(jiàn)圖2,兩者通過(guò)線程安全隊(duì)列開(kāi)辟的緩存進(jìn)行線程的同步與通信[3]。
圖2 線程架構(gòu)流程圖
系統(tǒng)用戶(hù)主界面如圖3所示。
圖3 數(shù)據(jù)采集系統(tǒng)用戶(hù)主界面
動(dòng)態(tài)鏈接庫(kù)的設(shè)計(jì)主要解決USB板卡與應(yīng)用軟件之間的通信,動(dòng)態(tài)鏈接庫(kù)(DLL)是一種函數(shù)或資源庫(kù),庫(kù)中的函數(shù)可以被應(yīng)用程序或其他DLL調(diào)用。使用LabWindows/CVI平臺(tái)開(kāi)發(fā)的應(yīng)用程序不能直接調(diào)用Window s的 API函數(shù)。因此,DLL就成為兩者建立聯(lián)系的橋梁。對(duì)于32位標(biāo)準(zhǔn)動(dòng)態(tài)鏈接庫(kù),其DLL文件中包含了具體的實(shí)現(xiàn)代碼,而導(dǎo)出庫(kù)文件則包含函數(shù)的導(dǎo)出信息,即相應(yīng)的函數(shù)在DLL文件中的位置和應(yīng)用方法等[4]。
在為該系統(tǒng)的ARINC429數(shù)據(jù)采集卡開(kāi)發(fā)的DLL文件中,其主要函數(shù)聲明如下:
在DLL文件的編寫(xiě)中應(yīng)注意以下問(wèn)題:
1)DLL的聲明中不需要在函數(shù)聲明前加‘extern"C"'。
2)DLL的聲明中如果某一個(gè)函數(shù)沒(méi)有參數(shù),應(yīng)用void代替。
數(shù)據(jù)采集系統(tǒng)需要將采集到的數(shù)據(jù)以文檔形式保存,由于數(shù)據(jù)繁多,查找起來(lái)不是很方便,可以創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)將有關(guān)數(shù)據(jù)索引存入數(shù)據(jù)庫(kù)中,查找過(guò)程就可大大簡(jiǎn)化。還可將429解碼信息放入數(shù)據(jù)庫(kù)中,通過(guò)程序調(diào)用完成429數(shù)據(jù)解碼功能。利用這種體制可以方便的對(duì)程序進(jìn)行擴(kuò)充,完成不同編碼格式的429信息的解碼。
LabWindows/CVI并沒(méi)有提供直接通過(guò)標(biāo)準(zhǔn)函數(shù)庫(kù)提供數(shù)據(jù)庫(kù)的操作函數(shù),也沒(méi)有在工具包中包含數(shù)據(jù)庫(kù)的驅(qū)動(dòng)器。要在LabWindows/CVI的環(huán)境下使用數(shù)據(jù)庫(kù),可以安裝一個(gè)免費(fèi)的CVI數(shù)據(jù)庫(kù)工具包DatabaseToolKit。工具包中提供了豐富的數(shù)據(jù)庫(kù)函數(shù),CVI可通過(guò)ADO接口連接多個(gè)數(shù)據(jù)源,本系統(tǒng)采用ODBC數(shù)據(jù)源。ODBC實(shí)際上是一個(gè)函數(shù)庫(kù),它提供了一個(gè)連接到底層數(shù)據(jù)庫(kù)系統(tǒng)的公共應(yīng)用程序接口。
軟件連接數(shù)據(jù)庫(kù)部分代碼如下:
數(shù)據(jù)庫(kù)查詢(xún)界面如圖4所示。
圖4 數(shù)據(jù)查詢(xún)界面
本文基于LabWindows/CVI這一軟件開(kāi)發(fā)平臺(tái),設(shè)計(jì)了一種高速ARINC429數(shù)據(jù)采集系統(tǒng)。運(yùn)用多線程技術(shù)、DLL技術(shù)及數(shù)據(jù)庫(kù)技術(shù)極大的提高了系統(tǒng)性能,使采集系統(tǒng)具有了實(shí)時(shí)性、可擴(kuò)展性等特點(diǎn)。系統(tǒng)經(jīng)過(guò)測(cè)試達(dá)到了設(shè)計(jì)要求,運(yùn)行情況良好。
[1]梅小冬,李玉恩.基于USB的ARINC429總線測(cè)試系統(tǒng)的設(shè)計(jì)[J].微計(jì)算機(jī)應(yīng)用,2005(6):751~754
[2]王建新,楊世鳳,隧美麗.LabWindows/CVI測(cè)試技術(shù)及工程應(yīng)用[M].北京:化學(xué)工業(yè)出版社,2006
[3]翟巍,王勇,植涌.基于 LabWindows/CVI高速數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)[J].鄭州輕工業(yè)學(xué)院學(xué)報(bào),2007,22(6):83~86
[4]王紀(jì)森,周世剛.基于LabWindows/CVI的飛機(jī)加載測(cè)控系統(tǒng)[J].測(cè)控技術(shù),2008,27(3):69~72