,, ,
(1.海軍航空大學 岸防兵學院,山東 煙臺 264001; 2.中國人民解放軍 91115部隊,浙江 舟山 316000;3.北京航天測控技術(shù)有限公司,北京 100411)
隨著軍事技術(shù)發(fā)展,武器系統(tǒng)中數(shù)字化程度越來越高,RS485、RS422、MIL-1553B等通信總線也逐步成熟運用。其中,ARINC429總線因其可靠度高、誤碼率低等優(yōu)點,近年來在多種武器平臺中得到廣泛應用。而武器系統(tǒng)的技術(shù)發(fā)展對裝備測試設(shè)備的研制提出了更高的技術(shù)要求,特別是通信總線的實時性要求。但是目前常用的實時控制系統(tǒng)實現(xiàn)過程比較復雜,開發(fā)成本較高,兼容性較差。[1-4]
目前自動測試技術(shù)飛速發(fā)展,PXI總線已經(jīng)取代VXI總線廣泛應用于武器裝備的自動測試領(lǐng)域。PXI總線由PCI總線擴展而來,保留了PCI總線帶寬高,速度快等優(yōu)點,性能指標遠優(yōu)于GPIB總線和VXI總線,體積上又比LXI總線更有優(yōu)勢,因此廣受開發(fā)人員歡迎,可以預見在下一代自動測試系統(tǒng)中PXI總線仍有一席之地。而且,基于PXI總線的ARINC429通信板卡也已經(jīng)比較成熟,總線轉(zhuǎn)換速度快、誤碼低,已有多款貨架產(chǎn)品可供選用。
本文針對某型裝備ARINC429總線實時通信要求,研究了基于RTX的PXI總線ARINC429板卡實時通信方法,通過雙系統(tǒng)的方法實現(xiàn)了PXI總線板卡的硬實時控制,保證了ARINC429總線的通信效果。
為了使航空電子設(shè)備的技術(shù)指標、電器性能、外形和插接件的規(guī)范統(tǒng)一,1977年美國官方頒布由美國航空無線電公司(ARINC)制定的民用航空數(shù)字總線傳輸標準ARINC429,它是機載電子設(shè)備之間進行數(shù)據(jù)傳輸約定的一種標準。ARINC429為單向串行總線設(shè)計,它為在航空電子設(shè)備之間傳輸數(shù)字信息制定了航空運輸工業(yè)標準。ARINC429屬廣播方式單總線,每個總線連接有一個發(fā)送者和最多20個接收者。一個終端可以在多個總線上有許多發(fā)送者和接收者。源帶負載能力最大為400歐姆,接收端最小有效輸入阻抗為8 K歐姆。ARINC 429規(guī)范沒有總線長度要求,大多數(shù)系統(tǒng)設(shè)計連接方式為兩種:星型和線型方式。ARINC429有兩種速度:12.5 KHz(12.5 KHz到14.5 KHz),100 KHz。32位數(shù)據(jù)以RZ格式、3種狀態(tài)、LSB優(yōu)先方式傳輸,字與字之間間隔至少4位字長。
如圖1所示,ARINC 429數(shù)據(jù)傳輸是以電脈沖形式發(fā)送的,一個電脈沖就是1位。1個字(有32位)被分為5段,即:標志段,第1~8位;源目的地識別碼,第9~10位;數(shù)據(jù)區(qū),第11~28位;符號狀態(tài)碼,第29~31位;奇偶校驗位,第32位。一個數(shù)字字傳輸1個參數(shù),如速度、溫度等。兩個數(shù)字字之間有4位間隔,這個間隔也作為字同步用,跟在這一間隔后面發(fā)送的第1位,就表示另一個新的數(shù)字字的開始。每個數(shù)字字的32位數(shù)據(jù)是以雙極歸零碼的形式發(fā)送出去的,如圖1所示。所謂雙極歸零調(diào)制就是指發(fā)送出去的脈沖串有3個電平,即高電平,邏輯1(+10 V);中電平(0 V);低電平,邏輯0(-10 V);中電平為發(fā)送自身時鐘脈沖。
圖1 ARINC 429數(shù)據(jù)傳輸
隨著工業(yè)技術(shù)不斷發(fā)展,實時性要求越來越高,目前常用的實時操作系統(tǒng)有VxWorks、RtLinux等,但大多實現(xiàn)成本較高,領(lǐng)域受限,而RTX(real-time extension實時擴展)系統(tǒng)作為Windows下的硬實時操作系統(tǒng),可以將windows擴展到實時測控領(lǐng)域,擁有著不可比擬的優(yōu)勢。RTX的時鐘分辨率100納秒,定時器最小周期100微秒[5-6]。
RTX進程工作原理如圖2所示,RTX系統(tǒng)可以和Windows共存,在Windows系統(tǒng)內(nèi)安裝,卻又通過RTX HAL實現(xiàn)了強實時性,同時保留了Windows程序與RTX程序的相互操作與調(diào)用[7-9]。Windows程序通過調(diào)用Windows的內(nèi)核與驅(qū)動,進而分時占用CPU資源,而這種多任務(wù)分時復用機制必然會帶來時間上的不確定性,使得工業(yè)控制上的一些實時性指標無法得到滿足。RTX程序通過Rtapi_w32庫占用CPU資源,與Windows不同的是,RTX系統(tǒng)是個單任務(wù)系統(tǒng),通過內(nèi)核及驅(qū)動與Windows在一定程度上的隔離來單獨占用CPU。單任務(wù)獨占CPU的模式使得RTX系統(tǒng)具備一定程度的實時性。
圖2 RTX進程工作原理
在具體應用中,針對用戶往往基于Windows平臺編寫可視化應用程序,而基于RTX編寫底層控制程序的問題,一般采用共享內(nèi)存進行兩個程序間數(shù)據(jù)交互的解決方案。雙方程序通過同一個互斥量的判讀,分時操作共享內(nèi)存,即實現(xiàn)了數(shù)據(jù)交互,又避免了程序報錯。
本文方法基于PXI總線設(shè)計實現(xiàn),PXI總線是目前自動測試領(lǐng)域最為流行的總線形式,其板卡體積小、速度快、通用化標準化程度高,在系統(tǒng)集成領(lǐng)域具有一定的優(yōu)勢。
通常一個PXI系統(tǒng)由PXI機箱、控制器、功能板卡組成,其中本項目選擇了使用嵌入式零槽控制器,如圖3所示??紤]到通信總線控制的實時性要求,本文方法為了達到理想的響應速度和時間精度,零槽控制器安裝了Windows和RTX雙系統(tǒng),Windows系統(tǒng)作為基礎(chǔ)負責其他模塊的控制及對外數(shù)據(jù)傳遞,RTX系統(tǒng)完成429模塊的實時控制。
機箱本項目選用NI公司的PXI-1045,PXI-1045是18槽通用AC PXI機箱,專為各種測試和測量應用而設(shè)計。該模塊具有很寬的工作溫度范圍、兩個外部參考時鐘BNC連接器,以及采用通用交流輸入的可移動高性能電源。
零槽控制器選用NI公司的PXI-8115控制器,PIX-8155是一款針對PXI系統(tǒng)的Intel Core i5嵌入式控制器,適用于處理器密集型、模塊化儀器和數(shù)據(jù)采集、通信等高速應用。PXI-8115包含兩個10/100/1000BASE-TX以太網(wǎng)端口和6個高速USB端口以及一個集成硬盤驅(qū)動器、一個串行端口和其他外設(shè)IO,可以提供高達8GB/s的系統(tǒng)吞吐量和2GB/s的插槽吞吐量。
本項目選用北京航天測控AMC5206B-J作為ARINC429總線通信模塊。AMC5206B-J ARINC429通訊接口模塊就是一種符合ARINC 429標準PXI總線產(chǎn)品,它可以將PXI測試系統(tǒng)作為一個終端連接到ARINC429總線上實現(xiàn)與其它設(shè)備或系統(tǒng)的通訊。AMC5206B-J模塊提供由軟件控制的3種速率,可選擇的數(shù)據(jù)字間隙時間,可設(shè)定的數(shù)據(jù)幀間隔時間,循環(huán)發(fā)送控制以及雙向緩沖FIFO功能,可滿足目前測試系統(tǒng)的不同應用需求。
AMC5206B-J ARINC 429通訊接口模塊采用HS-3282和HS-3182實現(xiàn)ARINC 429電平驅(qū)動及協(xié)議轉(zhuǎn)換電路功能,F(xiàn)PGA作為嵌入式處理器實現(xiàn)部分處理控制功能,SDRAM實現(xiàn)接收128 KB和發(fā)送128 KB的緩沖器電路功能,F(xiàn)PGA內(nèi)部的PXI軟核IP實現(xiàn)PXI總線接口電路功能。
為了保證通信板卡的實時性,本文方法使用Windows和RTX雙系統(tǒng),兩個系統(tǒng)中各有一個應用程序,Windows下為exe文件,RTX系統(tǒng)下為RTSS文件。
考慮到一個測試系統(tǒng)中不可能只有AMC5206B一塊板卡,而其他板卡還是要再Windows下進行控制的,因此,本文方法軟件由Windows應用程序和RTX應用程序兩部分組成。這種設(shè)計方案以Windows為基礎(chǔ),RTX僅作為429通信的控制程序,升級能力和擴展性都更佳,也使得本文方法可以簡單移植融合入其他系統(tǒng)中。
如圖3所示,在一套測試系統(tǒng)中Windows應用程序應是核心測試程序,其功能包括界面顯示、人機交互、測試板卡控制、測試流程調(diào)度等,本文方法僅涉及AMC5206B板卡部分,其組成由顯示、RTSS程序的啟動、數(shù)據(jù)處理、共享內(nèi)存控制等模塊。為了實現(xiàn)強實時性,本文方法對AMC5206B的控制、數(shù)據(jù)存儲等均有RTX系統(tǒng)完成,因此開發(fā)RTX應用程序,其包括應用、初始化、驅(qū)動、共享內(nèi)存控制等模塊。
圖3 軟件組成
共享內(nèi)存是進程間通信最高效的一種方法,本文方法將其作為Windows程序與RTX程序交互的橋梁,可以很方便的在多個進程間交換信息,Windows程序和RTX程序分別將共享內(nèi)存映射到自己的私有地址空間,直接進行讀取操作。同時,為了避免沖突操作,引入互斥量。
(1)定義共享內(nèi)存變量:
typedef struct _ShMemStr
{
unsigned short obmen0;
unsigned short obmen1;
DWORD obmen2;
unsigned short obmen3;
} ShMemStruct,*PShMemStruct;
PshMemStruct obmen;
定義了一個共享內(nèi)存結(jié)構(gòu)體obmen,其中含有4個共享內(nèi)存變量obmen0,obmen1,obmen2,obmen3。
(2)創(chuàng)建共享內(nèi)存:
hMyMem=RtOpenSharedMemory(SHM_MAP_WRITE,0,(LPCTSTR)SH_MEMORY_NAME,(VOID**)&obmen);
打開共享內(nèi)存,屬性設(shè)置為可讀寫,返回共享內(nèi)存地址到obmen,此函數(shù)在Windows程序和RTX程序中都要運行,返回變量名稱需保持一致,讀寫屬性可分別設(shè)置。
(3)創(chuàng)建互斥量:
MyMutex= RtCreateMutex( NULL,FALSE,FALSE(LPCTSTR)MUTEX_NAME);
需要在兩個程序中創(chuàng)建統(tǒng)一的互斥量,用來避免兩邊同時對共享內(nèi)存進行操作而帶來的沖突問題。
(4)判斷互斥量:
RtWaitForSingleObject(hMyMutex, INFINITE);
用以在流程中判讀互斥量的狀態(tài),進而得到共享內(nèi)存的狀態(tài),判斷為空閑狀態(tài)后才可進行讀寫操作。
(5)釋放互斥量:
RtReleaseMutex( hMyMutex);
對共享內(nèi)存讀寫操作完成后,釋放互斥量,另一個操作系統(tǒng)下的程序才可以操作,避免沖突。
首先需要將PXI總線的AMC5206B在Windows下的驅(qū)動程序轉(zhuǎn)換為RTX系統(tǒng)下的驅(qū)動程序。
儀器驅(qū)動層分為初始化、發(fā)送數(shù)據(jù)、讀取數(shù)據(jù)、中斷服務(wù)等函數(shù),其中主要難點在于中斷服務(wù)函數(shù)的設(shè)計,具體流程如圖4所示。
圖4 中斷服務(wù)程序
PXI總線是一種即插即用總線,在板卡初始化時首先通過驅(qū)動程序進行PCI總線尋址,通過PCI地址空間的映射找到AMC5206B板卡,h獲得句柄和ID。為了進行中斷操作還需要獲得中斷號和中斷級別,PXI總線的中斷號每個機箱一般分配4個,采用菊花鏈的形式分配。然后加載中斷服務(wù)函數(shù),在流程中根據(jù)需要是能中斷,再順序進行其他函數(shù)操作不影響中斷的發(fā)生。當中斷請求發(fā)生時,停止正在進行的流程,中斷響應函數(shù)自動運行,首先獲取中斷標識符判斷中斷源。AMC5206B不同通道觸發(fā)中斷都會返回不同的標識符。根據(jù)標識符讀取相應通道的數(shù)據(jù)個數(shù),然后讀取數(shù)據(jù)個數(shù),將數(shù)據(jù)存儲到設(shè)計好的數(shù)組格式中,完成這些后返回主程序模塊。主程序模塊會對讀取的數(shù)據(jù)有進一步的處理應用。
AMC5206ADriverIST是中斷服務(wù)程序,在中斷使能之前通過中斷配置函數(shù)加載至內(nèi)存
RtAttachInterruptVector(NULL, 0, AMC5206ADriverIST, mh, RT_PRIORITY_MAX, PCIBus,intbusnumb,IrqLevel,IrqLevel);
設(shè)置中斷觸發(fā)的字個數(shù)為nIntCount,在硬件板卡存儲器接收到nIntCount個字后,中斷服務(wù)程序啟動依次操作。
1) 判斷中斷源:
AMC5206B_readInterFlag(mh,&bInter00,&bInter01,&bInter10, &bInter11);
判斷中斷源,bInter00、bInter01、bInter10 bInter11分別表示4個接受通道,為1表示有中斷請求,0表示沒有。
2) 獲取存儲器中的數(shù)據(jù)個數(shù),讀取數(shù)據(jù),數(shù)據(jù)處理:
if(bInter00)
{
AMC5206B_getDataCount(mh,GROUP0_RX0, &size);
AMC5206B_MsgDataRd(mh,GROUP0_RX0, RXdata, size);
for (i=0; i { //數(shù)據(jù)處理 } 首先獲取中斷通道數(shù)據(jù)寄存器中數(shù)據(jù)個數(shù),然后讀取相應個數(shù)的數(shù)據(jù)存入RXdata。 3) 清除中斷標識: AMC5206B_clearInterFlag (mh,GROUP0_RX0); 中斷處理程序結(jié)束后要清除中斷標示,回到正常狀態(tài)。 其他中斷源同樣模式處理。 Windows應用程序如圖5所示,GPIO_IN、GPIO_OUT兩個按鈕完成板載IO的控制,服務(wù)端程序調(diào)用AMC5206B_GPIO_IN.RTSS、AMC5206B_GPIO_OUT.RTSS兩個RTX程序。start_pk按鈕實現(xiàn)429總線通信功能,遠程客戶端啟動,服務(wù)端程序調(diào)用AMC5206B_start_pk.RTSS程序。 圖5 Windows應用程序 本文方法的實時性保證依靠的是RTX操作系統(tǒng)的獨特優(yōu)勢,而劉曉川、樊子明指出“實時”并不意味著“快”,而是指系統(tǒng)的響應時間確定性。對實時性最重要的測量因素不是平均響應時間,而是最大響應時間。衡量操作系統(tǒng)實時性最重要的兩個性能指標是中斷響應時間和上下文切換時間[10]。 本文方法著眼于ARINC429總線的數(shù)據(jù)傳輸,其上下文切換時間體現(xiàn)在發(fā)送數(shù)據(jù)的字間隔,而AMC5206B具備強大的數(shù)據(jù)存儲能力,數(shù)據(jù)發(fā)送是先下載后觸發(fā)的,并且字間隔可編程控制,因此實驗僅需驗證其中斷響應時間。AMC5206B是為俄標429總線設(shè)計的一款PXI總線通信板,板上配置了16路數(shù)字IO用以做握手信號線,因此本文以IO的輸入作為中斷觸發(fā)源,設(shè)計外部觸發(fā)與計時電路,其效果與數(shù)據(jù)觸發(fā)應為等同的,而在實際應用場景中也是以IO作為發(fā)送和接收的中斷觸發(fā)源的。 本文根據(jù)文獻[10]提供的方法對本文方法進行了驗證,設(shè)計實驗如圖6所示。采用100 M晶振作為時鐘源,分頻后產(chǎn)生1次/1 000 ns的中斷和10 ns的計數(shù)器時鐘。實驗外圍電路1 000 ns產(chǎn)生一次中斷,通過觸發(fā)AMC5206B的數(shù)字量輸入通道1引起RTSS程序中斷服務(wù),中斷服務(wù)程序控制DO輸出高電平,此兩個信號輸入起??刂破?,事件作為計時的起點與終點。同樣,按照文獻[10]要求,測試過程中運行復雜顯示程序和頻繁的磁盤讀寫程序。 圖6 實時性驗證 多次測試后的統(tǒng)計結(jié)果為:中斷響應時間最大值9.33 μs,最小值4.24 μs,可以認為本文方法達到了μs級的實時性水平。 本文針對武器裝備ARINC429總線實時性要求,提出了一種基于RTX系統(tǒng)的ARINC429總線實時通信方法,通過雙操作系統(tǒng)的設(shè)計既保持了Windows下的擴展性又通過RTX操作系統(tǒng)擴展了系統(tǒng)的實時性能,編寫了RTX下的驅(qū)動程序,通過共享內(nèi)存實現(xiàn)了對板卡的有效控制。實驗結(jié)果表明,本文方法實時性強,擴展性好。3.4 Windows應用程序
4 系統(tǒng)實現(xiàn)與驗證
5 結(jié)束語