張蓓蕾,夏偉杰,周建江
(南京航空航天大學 電子信息工程學院,江蘇 南京210016)
舵機控制是虛擬飛行實驗中的關鍵技術,為滿足測試的實時性要求,文中設計了一套基于Windows RTX環境下的舵機控制系統,通過采集天平、陀螺儀、舵機、光電編碼器信號,分析飛機各主要部件的氣動特性。該控制系統的主要功能包括:舵機控制軟件可以自動完成對舵機的上電及解鎖操作;舵機響應可根據實際需要作出相應的模式選擇和參數設置;采集到的數據可做到實時界面顯示,用于現場實驗分析。
在工業控制、航空航天等領域,對系統實時性有很高的要求。系統的事件響應如果不確定或超時,就可能會導致系統出錯,甚至崩潰,Windows系統很難滿足實時性的要求。RTX正是應這一要求,利用Windows平臺提供的豐富的設備驅動模型,通過定制硬件抽象層(HAL,Hardware Abstraction Layer),對Windows系統進行了實時擴展。RTX使得系統具有較強的實時性,能在一個事先定義好的時間限制中對外部或內部的事件進行響應和處理
RTX是一個嵌入Windows的獨立實時系統,支持在Windows平臺下基于Visual Studio的實時應用程序開發[1]。RTX給開發者提供了操作系統和實時性的最佳結合,既可以使用Windows的豐富資源和軟件開發調試工具,又可以在一個獨立的控制子系統上實現硬實時。RTX Release 7.1支持絕大部分的Microsoft操作系統,同時支持單處理器(Uniprocessor)、多處理器(Multi-processor)、移動處理器(Mobile Processor)、超線程(Hyper-threading-enabled),以及多核平臺(Multiple-core platform)。
文中基于RTX,在Windows平臺上實現了舵控仿真系統中高確定性和高速反應時間的應用部件和模塊與其它非實時應用部件的正常運行。
該系統的構成如圖1所示。硬件系統包括上位機-工業控制計算、下位機-PXI機箱、位于PXI機箱中的PXI測試板卡、電源和顯示器構成,所有這些部件都組裝在一個雙聯測試機柜中。PXI測試板卡包括數字I/O板卡、A/D轉換卡、串口卡、RS422卡和PXI轉PCI套件。

圖1 舵控仿真系統的組成框圖
為提高Windows下數據采集的實時性,又滿足舵機控制實時性的要求,舵機控制采用模塊化的設計,設計分為上下兩層,兩層之間需要共享內存進行數據通信[2]。軟件組成的結構體系如圖2所示。

圖2 軟件組成的結構體系
RTX程序開發平臺選擇VC6.0+Ardence RTX,RTX將開發環境直接嵌入到用戶熟悉的VC6.0中,用RTX提供的向導即可生成RTX環境下的設備驅動和應用程序,大大縮短了開發周期。RTX和Windows運行在一臺計算機上,也節省了系統的硬件成本,提高了系統可靠性[3]。
在啟動舵機控制程序之前,先要啟動RTX實時環境,因為底層驅動程序和上層舵機控制程序是同時運行的。軟件的具體操作流程如圖3所示。
根據舵機控制軟件對數據采集的實時性要求,首先要對各采集板卡做在RTX下的驅動開發,這是舵機控制系統解決實時性問題的重點和難點。編寫基于RTX的驅動程序,可以通過調用實時應用程序編程接口(RTAPI,Real-Time Application Programming Interface)函數來訪問實時子系統(RTSS,Real-Time Sub-System),并維持其系統的實時性。這樣處理的優點是硬件可以通過RTX函數直接訪問,驅動開發也更加簡單[4]。

圖3 軟件操作流程
所謂驅動程序,就是直接控制設備進行工作的底層程序,實現了硬件和高層應用程序的交互[5]。如果要使用PXI總線設備上的某個功能,就需要CPU能通過某段范圍的地址訪問或內存訪問的方式與該功能交互。RTX驅動程序可以將獲得的基地址轉換成系統能夠識別的虛擬地址,然后通過讀寫函數對不同板卡的底層寄存器進行操作,從而實現控制板卡正常工作。PCI定位寄存器配置由BIOS自動完成初始化,如分配總線號、中斷向量、地址空間等,驅動程序只需要對數據偏移寄存器,即設備內部寄存器進行配置。訪問內部寄存器,首先要獲得PCI設備在BIOS上的映射基地址,然后根據設備的寄存器偏移量和格式對寄存器進行訪問。
在RTX環境下,PXI設備驅動程序的基本結構如圖4所示。其中,PXI設備和RTX位于結構底層,PXI設備與RTX內核通過中斷和I/O端口來進行數據交互,RTX內核通過庫函數和設備驅動程序來提供所需服務。上層應用程序與底層驅動程序通過建立共享內存來進行通信[6]。

圖4 RTX下PXI驅動程序基本結構
在RTX環境下進行PXI設備驅動開發,首先需要將Windows下的設備轉換為RTX下的設備[7]。RTX提供實現該功能的屬性窗,如圖5所示。利用RTX屬性窗進行轉換分主要分為兩個步驟:
(1)添加RTX的INF支持;
(2)在設備管理器中更新設備驅動,將PXI設備從Windows支持轉換為RTX支持。

圖5 屬性窗RTX Properties
RTX環境下一個完整的PXI驅動程序至少由以下幾方面組成:
(1)設備初始化和釋放。查找PCI設備傳送設備號和廠家號兩個主要參數,并遍歷所有的PCI插槽直到匹配為止。找到設備后,讀出中斷號、基地址等,為以后的工作做準備。
(2)地址到虛擬地址的映射,使系統能夠識別硬件。由于對硬件的讀寫操作是基于物理地址,而應用程序實現讀寫操作使用的是虛擬地址,所以驅動程序必須要完成地址映射。
設計的PXI板卡驅動程序首先用接口函數DeviceSearch()在總線上輪詢,并查找到設備。然后通過DeviceInit()函數獲得設備的硬件資源,如中斷號、內存、輸入輸出I/O和DMA等。通過RtGetBus-DataByOffset()函數訪問設備的整個PCI配置空間,得到本地配置寄存器和存儲空間內存的基地址和中斷號等信息,然后根據獲得的基地址利用RtTranslateBus-Address()和RtMapMemory()函數將讀取出來的基地址轉換為系統能夠訪問的虛擬地址[8]。需要指出的是,板卡的本地寄存器和存儲空間可以通過Memory映像和I/O直接訪問[9],文中設計的驅動程序的運用的是Memory映像。如選用I/O直接訪問,可以通過調用RtEnablePortIo()和RtReadPortUchar()等函數即實現對端口的直接讀寫。當找到并打開板卡后就可以自定義讀寫函數對板卡進行讀寫操作,從而達到控制板卡的目的,具體開發流程如圖6所示。

圖6 驅動程序開發流程圖
RTX環境下的驅動程序可以通過RTX函數進行直接訪問的,能夠隨時停止隨時配置。文中基于RTX,在Windows平臺實現了風洞虛擬飛行試驗舵控仿真系統。與直接基于Windows平臺設計的系統相比,系統的響應時間提高到ms級,滿足了實時性要求。由于測試軟件是基于VC++環境開發的可視化軟件,系統具有良好的可擴展性,通用性較強。通過聯調,驗證了仿真系統的可靠性和實時性。
[1] 閆宇壯,楊祚堂.RTX在半實物仿真中的軟件開發方法[J].兵工自動化,2006,25(9):89-90.
[2] 黃鍵,宋曉,薛順虎.RTX平臺下實時仿真系統的設計方法[J].計算機應用與軟件,2009,26(4):166-169.
[3] 王偉,袁保君,吳佳楠.基于RTX的數據采集系統設計[J].測控技術,2009,28(10):22-25.
[4] 談世哲,尚緒強,趙萬生.基于RTX的工業機器人全軟件關節位置伺服控制器的研究[J].自動化技術與應用,2004,23(5):34-37.
[5] 張蕾.基于RTX的全軟件數控系統的研究[D].秦皇島:燕山大學,2006.
[6] 吳勇,熊振華,丁漢.基于RTX和MFC的后封裝平臺數據采集和控制系統[J].系統工程與電子技術,2004,26(9):1257-1261.
[7] 劉紅.通用CompactPCI/PXI接口技術研究[D].成都:四川大學,2005.
[8] 王道彬,陳懷民,別洪武.基于RTX的實時測控系統軟件設計[J].火力與指揮控制,2009,34(8):125-127.
[9] 黃鍵,宋曉,薛順虎.RTX平臺下實時仿真系統的設計方法[J].計算機應用與軟件,2009,26(4):166-169.