張蓓蕾,夏偉杰,周建江
(南京航空航天大學(xué) 電子信息工程學(xué)院,江蘇 南京210016)
舵機(jī)控制是虛擬飛行實(shí)驗(yàn)中的關(guān)鍵技術(shù),為滿足測試的實(shí)時(shí)性要求,文中設(shè)計(jì)了一套基于Windows RTX環(huán)境下的舵機(jī)控制系統(tǒng),通過采集天平、陀螺儀、舵機(jī)、光電編碼器信號,分析飛機(jī)各主要部件的氣動(dòng)特性。該控制系統(tǒng)的主要功能包括:舵機(jī)控制軟件可以自動(dòng)完成對舵機(jī)的上電及解鎖操作;舵機(jī)響應(yīng)可根據(jù)實(shí)際需要作出相應(yīng)的模式選擇和參數(shù)設(shè)置;采集到的數(shù)據(jù)可做到實(shí)時(shí)界面顯示,用于現(xiàn)場實(shí)驗(yàn)分析。
在工業(yè)控制、航空航天等領(lǐng)域,對系統(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)模型,通過定制硬件抽象層(HAL,Hardware Abstraction Layer),對Windows系統(tǒng)進(jìn)行了實(shí)時(shí)擴(kuò)展。RTX使得系統(tǒng)具有較強(qiáng)的實(shí)時(shí)性,能在一個(gè)事先定義好的時(shí)間限制中對外部或內(nèi)部的事件進(jìn)行響應(yīng)和處理
RTX是一個(gè)嵌入Windows的獨(dú)立實(shí)時(shí)系統(tǒng),支持在Windows平臺(tái)下基于Visual Studio的實(shí)時(shí)應(yīng)用程序開發(fā)[1]。RTX給開發(fā)者提供了操作系統(tǒng)和實(shí)時(shí)性的最佳結(jié)合,既可以使用Windows的豐富資源和軟件開發(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測試板卡、電源和顯示器構(gòu)成,所有這些部件都組裝在一個(gè)雙聯(lián)測試機(jī)柜中。PXI測試板卡包括數(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程序開發(fā)平臺(tái)選擇VC6.0+Ardence RTX,RTX將開發(fā)環(huán)境直接嵌入到用戶熟悉的VC6.0中,用RTX提供的向?qū)Ъ纯缮蒖TX環(huán)境下的設(shè)備驅(qū)動(dòng)和應(yīng)用程序,大大縮短了開發(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ī)控制軟件對數(shù)據(jù)采集的實(shí)時(shí)性要求,首先要對各采集板卡做在RTX下的驅(qū)動(dòng)開發(fā),這是舵機(jī)控制系統(tǒng)解決實(shí)時(shí)性問題的重點(diǎn)和難點(diǎn)。編寫基于RTX的驅(qū)動(dòng)程序,可以通過調(diào)用實(shí)時(shí)應(yīng)用程序編程接口(RTAPI,Real-Time Application Programming Interface)函數(shù)來訪問實(shí)時(shí)子系統(tǒng)(RTSS,Real-Time Sub-System),并維持其系統(tǒng)的實(shí)時(shí)性。這樣處理的優(yōu)點(diǎn)是硬件可以通過RTX函數(shù)直接訪問,驅(qū)動(dòng)開發(fā)也更加簡單[4]。
圖3 軟件操作流程
所謂驅(qū)動(dòng)程序,就是直接控制設(shè)備進(jìn)行工作的底層程序,實(shí)現(xiàn)了硬件和高層應(yīng)用程序的交互[5]。如果要使用PXI總線設(shè)備上的某個(gè)功能,就需要CPU能通過某段范圍的地址訪問或內(nèi)存訪問的方式與該功能交互。RTX驅(qū)動(dòng)程序可以將獲得的基地址轉(zhuǎn)換成系統(tǒng)能夠識(shí)別的虛擬地址,然后通過讀寫函數(shù)對不同板卡的底層寄存器進(jìn)行操作,從而實(shí)現(xiàn)控制板卡正常工作。PCI定位寄存器配置由BIOS自動(dòng)完成初始化,如分配總線號、中斷向量、地址空間等,驅(qū)動(dòng)程序只需要對數(shù)據(jù)偏移寄存器,即設(shè)備內(nèi)部寄存器進(jìn)行配置。訪問內(nèi)部寄存器,首先要獲得PCI設(shè)備在BIOS上的映射基地址,然后根據(jù)設(shè)備的寄存器偏移量和格式對寄存器進(jìn)行訪問。
在RTX環(huán)境下,PXI設(shè)備驅(qū)動(dòng)程序的基本結(jié)構(gòu)如圖4所示。其中,PXI設(shè)備和RTX位于結(jié)構(gòu)底層,PXI設(shè)備與RTX內(nèi)核通過中斷和I/O端口來進(jìn)行數(shù)據(jù)交互,RTX內(nèi)核通過庫函數(shù)和設(shè)備驅(qū)動(dòng)程序來提供所需服務(wù)。上層應(yīng)用程序與底層驅(qū)動(dòng)程序通過建立共享內(nèi)存來進(jìn)行通信[6]。
圖4 RTX下PXI驅(qū)動(dòng)程序基本結(jié)構(gòu)
在RTX環(huán)境下進(jìn)行PXI設(shè)備驅(qū)動(dòng)開發(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è)備號和廠家號兩個(gè)主要參數(shù),并遍歷所有的PCI插槽直到匹配為止。找到設(shè)備后,讀出中斷號、基地址等,為以后的工作做準(zhǔn)備。
(2)地址到虛擬地址的映射,使系統(tǒng)能夠識(shí)別硬件。由于對硬件的讀寫操作是基于物理地址,而應(yīng)用程序?qū)崿F(xiàn)讀寫操作使用的是虛擬地址,所以驅(qū)動(dòng)程序必須要完成地址映射。
設(shè)計(jì)的PXI板卡驅(qū)動(dòng)程序首先用接口函數(shù)DeviceSearch()在總線上輪詢,并查找到設(shè)備。然后通過DeviceInit()函數(shù)獲得設(shè)備的硬件資源,如中斷號、內(nèi)存、輸入輸出I/O和DMA等。通過RtGetBus-DataByOffset()函數(shù)訪問設(shè)備的整個(gè)PCI配置空間,得到本地配置寄存器和存儲(chǔ)空間內(nèi)存的基地址和中斷號等信息,然后根據(jù)獲得的基地址利用RtTranslateBus-Address()和RtMapMemory()函數(shù)將讀取出來的基地址轉(zhuǎn)換為系統(tǒng)能夠訪問的虛擬地址[8]。需要指出的是,板卡的本地寄存器和存儲(chǔ)空間可以通過Memory映像和I/O直接訪問[9],文中設(shè)計(jì)的驅(qū)動(dòng)程序的運(yùn)用的是Memory映像。如選用I/O直接訪問,可以通過調(diào)用RtEnablePortIo()和RtReadPortUchar()等函數(shù)即實(shí)現(xiàn)對端口的直接讀寫。當(dāng)找到并打開板卡后就可以自定義讀寫函數(shù)對板卡進(jìn)行讀寫操作,從而達(dá)到控制板卡的目的,具體開發(fā)流程如圖6所示。
圖6 驅(qū)動(dòng)程序開發(fā)流程圖
RTX環(huán)境下的驅(qū)動(dòng)程序可以通過RTX函數(shù)進(jì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級,滿足了實(shí)時(shí)性要求。由于測試軟件是基于VC++環(huán)境開發(fā)的可視化軟件,系統(tǒng)具有良好的可擴(kuò)展性,通用性較強(qiáng)。通過聯(lián)調(diào),驗(yàn)證了仿真系統(tǒng)的可靠性和實(shí)時(shí)性。
[1] 閆宇壯,楊祚堂.RTX在半實(shí)物仿真中的軟件開發(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].測控技術(shù),2009,28(10):22-25.
[4] 談世哲,尚緒強(qiáng),趙萬生.基于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í)測控系統(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.