張蓓蕾,夏偉杰,周建江
(南京航空航天大學(xué) 電子信息工程學(xué)院,江蘇 南京210016)
舵機(jī)控制是虛擬飛行實(shí)驗(yàn)中的關(guān)鍵技術(shù),為滿足測(cè)試的實(shí)時(shí)性要求,文中設(shè)計(jì)了一套基于Windows RTX環(huán)境下的舵機(jī)控制系統(tǒng),通過(guò)采集天平、陀螺儀、舵機(jī)、光電編碼器信號(hào),分析飛機(jī)各主要部件的氣動(dòng)特性。該控制系統(tǒng)的主要功能包括:舵機(jī)控制軟件可以自動(dòng)完成對(duì)舵機(jī)的上電及解鎖操作;舵機(jī)響應(yīng)可根據(jù)實(shí)際需要作出相應(yīng)的模式選擇和參數(shù)設(shè)置;采集到的數(shù)據(jù)可做到實(shí)時(shí)界面顯示,用于現(xiàn)場(chǎng)實(shí)驗(yàn)分析。
在工業(yè)控制、航空航天等領(lǐng)域,對(duì)系統(tǒng)實(shí)時(shí)性有很高的要求。系統(tǒng)的事件響應(yīng)如果不確定或超時(shí),就可能會(huì)導(dǎo)致系統(tǒng)出錯(cuò),甚至崩潰,Windows系統(tǒng)很難滿足實(shí)時(shí)性的要求。RTX正是應(yīng)這一要求,利用Windows平臺(tái)提供的豐富的設(shè)備驅(qū)動(dòng)模型,通過(guò)定制硬件抽象層(HAL,Hardware Abstraction Layer),對(duì)Windows系統(tǒng)進(jìn)行了實(shí)時(shí)擴(kuò)展。RTX使得系統(tǒng)具有較強(qiáng)的實(shí)時(shí)性,能在一個(gè)事先定義好的時(shí)間限制中對(duì)外部或內(nèi)部的事件進(jìn)行響應(yīng)和處理
RTX是一個(gè)嵌入Windows的獨(dú)立實(shí)時(shí)系統(tǒng),支持在Windows平臺(tái)下基于Visual Studio的實(shí)時(shí)應(yīng)用程序開(kāi)發(fā)[1]。RTX給開(kāi)發(fā)者提供了操作系統(tǒng)和實(shí)時(shí)性的最佳結(jié)合,既可以使用Windows的豐富資源和軟件開(kāi)發(fā)調(diào)試工具,又可以在一個(gè)獨(dú)立的控制子系統(tǒng)上實(shí)現(xiàn)硬實(shí)時(shí)。RTX Release 7.1支持絕大部分的Microsoft操作系統(tǒng),同時(shí)支持單處理器(Uniprocessor)、多處理器(Multi-processor)、移動(dòng)處理器(Mobile Processor)、超線程(Hyper-threading-enabled),以及多核平臺(tái)(Multiple-core platform)。
文中基于RTX,在Windows平臺(tái)上實(shí)現(xiàn)了舵控仿真系統(tǒng)中高確定性和高速反應(yīng)時(shí)間的應(yīng)用部件和模塊與其它非實(shí)時(shí)應(yīng)用部件的正常運(yùn)行。
該系統(tǒng)的構(gòu)成如圖1所示。硬件系統(tǒng)包括上位機(jī)-工業(yè)控制計(jì)算、下位機(jī)-PXI機(jī)箱、位于PXI機(jī)箱中的PXI測(cè)試板卡、電源和顯示器構(gòu)成,所有這些部件都組裝在一個(gè)雙聯(lián)測(cè)試機(jī)柜中。PXI測(cè)試板卡包括數(shù)字I/O板卡、A/D轉(zhuǎn)換卡、串口卡、RS422卡和PXI轉(zhuǎn)PCI套件。
圖1 舵控仿真系統(tǒng)的組成框圖
為提高Windows下數(shù)據(jù)采集的實(shí)時(shí)性,又滿足舵機(jī)控制實(shí)時(shí)性的要求,舵機(jī)控制采用模塊化的設(shè)計(jì),設(shè)計(jì)分為上下兩層,兩層之間需要共享內(nèi)存進(jìn)行數(shù)據(jù)通信[2]。軟件組成的結(jié)構(gòu)體系如圖2所示。
圖2 軟件組成的結(jié)構(gòu)體系
RTX程序開(kāi)發(fā)平臺(tái)選擇VC6.0+Ardence RTX,RTX將開(kāi)發(fā)環(huán)境直接嵌入到用戶(hù)熟悉的VC6.0中,用RTX提供的向?qū)Ъ纯缮蒖TX環(huán)境下的設(shè)備驅(qū)動(dòng)和應(yīng)用程序,大大縮短了開(kāi)發(fā)周期。RTX和Windows運(yùn)行在一臺(tái)計(jì)算機(jī)上,也節(jié)省了系統(tǒng)的硬件成本,提高了系統(tǒng)可靠性[3]。
在啟動(dòng)舵機(jī)控制程序之前,先要啟動(dòng)RTX實(shí)時(shí)環(huán)境,因?yàn)榈讓域?qū)動(dòng)程序和上層舵機(jī)控制程序是同時(shí)運(yùn)行的。軟件的具體操作流程如圖3所示。
根據(jù)舵機(jī)控制軟件對(duì)數(shù)據(jù)采集的實(shí)時(shí)性要求,首先要對(duì)各采集板卡做在RTX下的驅(qū)動(dòng)開(kāi)發(fā),這是舵機(jī)控制系統(tǒng)解決實(shí)時(shí)性問(wèn)題的重點(diǎn)和難點(diǎn)。編寫(xiě)基于RTX的驅(qū)動(dòng)程序,可以通過(guò)調(diào)用實(shí)時(shí)應(yīng)用程序編程接口(RTAPI,Real-Time Application Programming Interface)函數(shù)來(lái)訪問(wèn)實(shí)時(shí)子系統(tǒng)(RTSS,Real-Time Sub-System),并維持其系統(tǒng)的實(shí)時(shí)性。這樣處理的優(yōu)點(diǎn)是硬件可以通過(guò)RTX函數(shù)直接訪問(wèn),驅(qū)動(dòng)開(kāi)發(fā)也更加簡(jiǎn)單[4]。
圖3 軟件操作流程
所謂驅(qū)動(dòng)程序,就是直接控制設(shè)備進(jìn)行工作的底層程序,實(shí)現(xiàn)了硬件和高層應(yīng)用程序的交互[5]。如果要使用PXI總線設(shè)備上的某個(gè)功能,就需要CPU能通過(guò)某段范圍的地址訪問(wèn)或內(nèi)存訪問(wèn)的方式與該功能交互。RTX驅(qū)動(dòng)程序可以將獲得的基地址轉(zhuǎn)換成系統(tǒng)能夠識(shí)別的虛擬地址,然后通過(guò)讀寫(xiě)函數(shù)對(duì)不同板卡的底層寄存器進(jìn)行操作,從而實(shí)現(xiàn)控制板卡正常工作。PCI定位寄存器配置由BIOS自動(dòng)完成初始化,如分配總線號(hào)、中斷向量、地址空間等,驅(qū)動(dòng)程序只需要對(duì)數(shù)據(jù)偏移寄存器,即設(shè)備內(nèi)部寄存器進(jìn)行配置。訪問(wèn)內(nèi)部寄存器,首先要獲得PCI設(shè)備在BIOS上的映射基地址,然后根據(jù)設(shè)備的寄存器偏移量和格式對(duì)寄存器進(jìn)行訪問(wèn)。
在RTX環(huán)境下,PXI設(shè)備驅(qū)動(dòng)程序的基本結(jié)構(gòu)如圖4所示。其中,PXI設(shè)備和RTX位于結(jié)構(gòu)底層,PXI設(shè)備與RTX內(nèi)核通過(guò)中斷和I/O端口來(lái)進(jìn)行數(shù)據(jù)交互,RTX內(nèi)核通過(guò)庫(kù)函數(shù)和設(shè)備驅(qū)動(dòng)程序來(lái)提供所需服務(wù)。上層應(yīng)用程序與底層驅(qū)動(dòng)程序通過(guò)建立共享內(nèi)存來(lái)進(jìn)行通信[6]。
圖4 RTX下PXI驅(qū)動(dòng)程序基本結(jié)構(gòu)
在RTX環(huán)境下進(jìn)行PXI設(shè)備驅(qū)動(dòng)開(kāi)發(fā),首先需要將Windows下的設(shè)備轉(zhuǎn)換為RTX下的設(shè)備[7]。RTX提供實(shí)現(xiàn)該功能的屬性窗,如圖5所示。利用RTX屬性窗進(jìn)行轉(zhuǎn)換分主要分為兩個(gè)步驟:
(1)添加RTX的INF支持;
(2)在設(shè)備管理器中更新設(shè)備驅(qū)動(dòng),將PXI設(shè)備從Windows支持轉(zhuǎn)換為RTX支持。
圖5 屬性窗RTX Properties
RTX環(huán)境下一個(gè)完整的PXI驅(qū)動(dòng)程序至少由以下幾方面組成:
(1)設(shè)備初始化和釋放。查找PCI設(shè)備傳送設(shè)備號(hào)和廠家號(hào)兩個(gè)主要參數(shù),并遍歷所有的PCI插槽直到匹配為止。找到設(shè)備后,讀出中斷號(hào)、基地址等,為以后的工作做準(zhǔn)備。
(2)地址到虛擬地址的映射,使系統(tǒng)能夠識(shí)別硬件。由于對(duì)硬件的讀寫(xiě)操作是基于物理地址,而應(yīng)用程序?qū)崿F(xiàn)讀寫(xiě)操作使用的是虛擬地址,所以驅(qū)動(dòng)程序必須要完成地址映射。
設(shè)計(jì)的PXI板卡驅(qū)動(dòng)程序首先用接口函數(shù)DeviceSearch()在總線上輪詢(xún),并查找到設(shè)備。然后通過(guò)DeviceInit()函數(shù)獲得設(shè)備的硬件資源,如中斷號(hào)、內(nèi)存、輸入輸出I/O和DMA等。通過(guò)RtGetBus-DataByOffset()函數(shù)訪問(wèn)設(shè)備的整個(gè)PCI配置空間,得到本地配置寄存器和存儲(chǔ)空間內(nèi)存的基地址和中斷號(hào)等信息,然后根據(jù)獲得的基地址利用RtTranslateBus-Address()和RtMapMemory()函數(shù)將讀取出來(lái)的基地址轉(zhuǎn)換為系統(tǒng)能夠訪問(wèn)的虛擬地址[8]。需要指出的是,板卡的本地寄存器和存儲(chǔ)空間可以通過(guò)Memory映像和I/O直接訪問(wèn)[9],文中設(shè)計(jì)的驅(qū)動(dòng)程序的運(yùn)用的是Memory映像。如選用I/O直接訪問(wèn),可以通過(guò)調(diào)用RtEnablePortIo()和RtReadPortUchar()等函數(shù)即實(shí)現(xiàn)對(duì)端口的直接讀寫(xiě)。當(dāng)找到并打開(kāi)板卡后就可以自定義讀寫(xiě)函數(shù)對(duì)板卡進(jìn)行讀寫(xiě)操作,從而達(dá)到控制板卡的目的,具體開(kāi)發(fā)流程如圖6所示。
圖6 驅(qū)動(dòng)程序開(kāi)發(fā)流程圖
RTX環(huán)境下的驅(qū)動(dòng)程序可以通過(guò)RTX函數(shù)進(jìn)行直接訪問(wèn)的,能夠隨時(shí)停止隨時(shí)配置。文中基于RTX,在Windows平臺(tái)實(shí)現(xiàn)了風(fēng)洞虛擬飛行試驗(yàn)舵控仿真系統(tǒng)。與直接基于Windows平臺(tái)設(shè)計(jì)的系統(tǒng)相比,系統(tǒng)的響應(yīng)時(shí)間提高到ms級(jí),滿足了實(shí)時(shí)性要求。由于測(cè)試軟件是基于VC++環(huán)境開(kāi)發(fā)的可視化軟件,系統(tǒng)具有良好的可擴(kuò)展性,通用性較強(qiáng)。通過(guò)聯(lián)調(diào),驗(yàn)證了仿真系統(tǒng)的可靠性和實(shí)時(shí)性。
[1] 閆宇壯,楊祚堂.RTX在半實(shí)物仿真中的軟件開(kāi)發(fā)方法[J].兵工自動(dòng)化,2006,25(9):89-90.
[2] 黃鍵,宋曉,薛順虎.RTX平臺(tái)下實(shí)時(shí)仿真系統(tǒng)的設(shè)計(jì)方法[J].計(jì)算機(jī)應(yīng)用與軟件,2009,26(4):166-169.
[3] 王偉,袁保君,吳佳楠.基于RTX的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].測(cè)控技術(shù),2009,28(10):22-25.
[4] 談世哲,尚緒強(qiáng),趙萬(wàn)生.基于RTX的工業(yè)機(jī)器人全軟件關(guān)節(jié)位置伺服控制器的研究[J].自動(dòng)化技術(shù)與應(yīng)用,2004,23(5):34-37.
[5] 張蕾.基于RTX的全軟件數(shù)控系統(tǒng)的研究[D].秦皇島:燕山大學(xué),2006.
[6] 吳勇,熊振華,丁漢.基于RTX和MFC的后封裝平臺(tái)數(shù)據(jù)采集和控制系統(tǒng)[J].系統(tǒng)工程與電子技術(shù),2004,26(9):1257-1261.
[7] 劉紅.通用CompactPCI/PXI接口技術(shù)研究[D].成都:四川大學(xué),2005.
[8] 王道彬,陳懷民,別洪武.基于RTX的實(shí)時(shí)測(cè)控系統(tǒng)軟件設(shè)計(jì)[J].火力與指揮控制,2009,34(8):125-127.
[9] 黃鍵,宋曉,薛順虎.RTX平臺(tái)下實(shí)時(shí)仿真系統(tǒng)的設(shè)計(jì)方法[J].計(jì)算機(jī)應(yīng)用與軟件,2009,26(4):166-169.