王 豐,劉 娜,肖雅靜,趙歲花
(中國電子科技集團公司第四十五研究所,北京 100176)
隨著現(xiàn)代科技的發(fā)展,工業(yè)控制系統(tǒng)一直在不斷尋求更高的精度和速度,因此實時控制系統(tǒng)在越來越多的方面得到應(yīng)用。無論是在航空、航天、醫(yī)療、軍事還是在工業(yè)制造、仿真測試上,都可以看到實時系統(tǒng)的身影。
所謂的實時系統(tǒng)是指系統(tǒng)在接收到一個不可預(yù)測的事件后,能夠迅速對其做出正確響應(yīng)。它的最大特點在于:一個正確的程序運行不僅取決于結(jié)果的準(zhǔn)確,更取決于功能實現(xiàn)的時間。當(dāng)然,“實時”并不意味著“快”,它指的是系統(tǒng)的時間響應(yīng)特性。換句話說,實時性的衡量標(biāo)準(zhǔn)不是系統(tǒng)的平均響應(yīng)時間而是最壞情況下的響應(yīng)時間。
實時系統(tǒng)具有不同的分類,按實時性能來分,實時系統(tǒng)可以分為硬實時系統(tǒng)和軟實時系統(tǒng)。硬實時系統(tǒng)對響應(yīng)時間的要求是嚴(yán)格的、絕對的,響應(yīng)時間為微秒級或更強;軟實時系統(tǒng)允許有一些小的誤差,響應(yīng)時間為毫秒級。通常情況下我們所說的實時系統(tǒng)都是指硬實時系統(tǒng)。一個實時系統(tǒng)除了其響應(yīng)時間確定外,還具有其他一些優(yōu)點:多線程優(yōu)先級調(diào)度器;可預(yù)測的線程同步機制;具有優(yōu)先級繼承;快速的時鐘和定時器。
Windows系統(tǒng)作為一種通用操作系統(tǒng)平臺,以其友好的人機界面交互功能,在工業(yè)控制中被廣泛應(yīng)用。但不足之處在于Windows系統(tǒng)屬于一個軟實時、多任務(wù)系統(tǒng),其響應(yīng)時間無法滿足某些高精度的控制領(lǐng)域。雖然隨著微處理芯片領(lǐng)域的發(fā)展,其處理能力和響應(yīng)時間得到顯著提高,但是其最差響應(yīng)時間的提高不能總是被保證,而且其線程優(yōu)先級太少,隱含著不確定的線程調(diào)度機制。因此,對Windows平臺進行實時擴展就顯得尤為必要。
美國Ardence公司推出了一套純軟件的硬實時擴展子系統(tǒng)Real-Time Extension for Windows(即RTX),提供了專門針對Windows系統(tǒng)的嵌入式實時解決方案。相比其他的實時系統(tǒng),RTX具有開發(fā)周期短,成本低等優(yōu)點,并且RTX支持VC++6.0與VS.NET開發(fā)環(huán)境。RTX并不對Windows系統(tǒng)本身進行任何封裝或修改,通過在HAL層(硬件抽象層)增加實時HAL擴展來實現(xiàn)基于優(yōu)先級的搶占式實時任務(wù)的管理和調(diào)度。RTX實時子系統(tǒng)的線程優(yōu)先于所有Windows線程,提供了對IRQ、I/O、內(nèi)存的精確直接控制,以確保實時任務(wù)的可靠性。通過高速的IPC通信和同步機制,RTX方便地實現(xiàn)與Windows之間的數(shù)據(jù)交換。Windows的定時器時鐘分辨率為1 ms,而RTX的定時器時鐘分辨率為100 ns,最低定時器周期為 100 μs。
RTX被實現(xiàn)為一套庫的集合 (動態(tài)庫與靜態(tài)庫),RTSS(Real-Time Sub System)作為 Windows 的內(nèi)核設(shè)備驅(qū)動與HAL擴展,其主要目的是管理實時任務(wù)的強占運行,為應(yīng)用提供各種便利,快速響應(yīng)外部事件,實現(xiàn)實時處理。RTSS通過RtWinAPI動態(tài)庫的實時API提供對外部對象的訪問方法。RtWinAPI可以被標(biāo)準(zhǔn)Win32環(huán)境和RTSS環(huán)境調(diào)用,將Win32程序轉(zhuǎn)化為RTX程序只需要重新鏈接一套不同的庫,Windows服務(wù)控制管理器直接將RTX進程和動態(tài)鏈接庫(DLL)的可執(zhí)行映像裝入內(nèi)核的不分頁內(nèi)存中。
RTX的主要體系結(jié)構(gòu)如圖1所示。
圖1 RTX體系架構(gòu)
大多數(shù)硬件設(shè)備的驅(qū)動程序,都是基于Windows環(huán)境開發(fā)的,無法在RTX環(huán)境中使用。如果要在RTX環(huán)境中訪問此類設(shè)備,就必須把該設(shè)備導(dǎo)入到RTX環(huán)境中,編寫專門的驅(qū)動程序。
如圖2所示 (以RTX8.1.2版本為例),打開RTX Properties面板,選擇Hardware選項,在Devices欄點擊Setting按鈕,在彈出的Pnp Devices Setting面板上可以看到當(dāng)前Windows系統(tǒng)下所有的即插即用設(shè)備,選擇需要在RTX下訪問的設(shè)備,點擊鼠標(biāo)右鍵,在彈出的菜單中選擇Add RTX INF Support,確認(rèn)后在Windows設(shè)備管理器中即可把設(shè)備導(dǎo)入到RTX環(huán)境中(圖2)。
圖2 RTX中導(dǎo)入硬件設(shè)備
RTX下編寫驅(qū)動程序相對簡單,因為應(yīng)用程序可以直接訪問硬件設(shè)備的I/O端口。以PCI設(shè)備為例,RTX提供了相關(guān)的頭文件與庫函數(shù),開發(fā)人員可以使用RTX Driver Wizard創(chuàng)建驅(qū)動程序框架,在創(chuàng)建的過程中根據(jù)應(yīng)用需要可以添加中斷服務(wù)程序,共享中斷,I/O訪問,內(nèi)存映射等功能函數(shù)。創(chuàng)建好的驅(qū)動程序包含2個重要部分:
(1)初始化設(shè)備。RTX下的硬件驅(qū)動程序首先使用DeviceSearch()函數(shù)查找PCI設(shè)備,通過指定的廠商號與設(shè)備號,遍歷查找所有的PCI的插槽,找到匹配的設(shè)備以后,記錄下當(dāng)前的總線編號、內(nèi)存與I/O端口的基地址以及相關(guān)的中斷資源。
(2)內(nèi)核與硬件的數(shù)據(jù)交換。開發(fā)驅(qū)動程序的目的就是為了與硬件設(shè)備進行數(shù)據(jù)交換,但硬件設(shè)備讀寫數(shù)據(jù)使用的是物理地址,而應(yīng)用程序讀寫數(shù)據(jù)使用的是虛擬地址,RTX中提供RtTranslateBusAddress()和 RtMapMemory()函數(shù)來完成物理地址到虛擬地址的轉(zhuǎn)化,從而完成應(yīng)用程序與硬件設(shè)備的數(shù)據(jù)交換。
一般的設(shè)備控制程序需要有一個良好的圖形操作界面,RTX作為一個嵌入式的實時系統(tǒng),并不直接提供支持類似MFC的圖形界面類庫。因此,在一個通用的控制程序中RTX常用來完成實時控制部分,而Windows用來完成與用戶的交互部分,二者之間通過共享內(nèi)存與互斥信號量來完成數(shù)據(jù)通訊。
共享內(nèi)存是在內(nèi)存中開辟一塊指定大小的區(qū)域,不同的進程都可以共享此區(qū)域,包括RTSS進程與Win32進程都可以對其進行讀寫訪問。要使用共享內(nèi)存通訊,首先必須創(chuàng)建共享內(nèi)存對象,然后在另外一個需要通訊的進程中打開該共享內(nèi)存對象。RTX中使用RtCreateSharedMeory()和RtOpenSharedMeory()來實現(xiàn)共享內(nèi)存的創(chuàng)建與打開。通常情況下是在RTX應(yīng)用程序中創(chuàng)建一個共享內(nèi)存對象,創(chuàng)建的同時會產(chǎn)生一個該對象的句柄,其他進程通過獲取該句柄來完成不同進程間的數(shù)據(jù)傳輸。
由于Windows與RTX都可以對共享內(nèi)存進行讀寫操作,為避免出現(xiàn)讀寫沖突,所以需要引入信號量機制。當(dāng)RTX需要訪問共享內(nèi)存時,首先會向共享內(nèi)存發(fā)送一個請求訪問的信號量,共享內(nèi)存收到此信號量后會向Windows發(fā)送一個詢問的信號量。如果Windows此時已經(jīng)準(zhǔn)備好,就會給共享內(nèi)存發(fā)回一個準(zhǔn)備好的信號量,共享內(nèi)存收到后再給RTX發(fā)回一個可以訪問的信號量,RTX就可以對共享內(nèi)存進行讀寫操作了。同理,當(dāng)Windows需要訪問共享內(nèi)存時,也需要同樣的操作,如圖3所示。
圖3 Windows與RTX通訊
在一臺主機上,RTX與Windows之間可以通過共享內(nèi)存來通訊。在實際應(yīng)用當(dāng)中,有時候需要實現(xiàn)2臺主機之間互相通訊,普通的以太網(wǎng)通訊無法保證數(shù)據(jù)傳輸?shù)膶崟r性。但RTX提供了實時性能較好的RT-TCP/IP,它通過RTSS實現(xiàn)對底層網(wǎng)卡的實時支持。RTX在子系統(tǒng)中建立獨立的TCP/IP協(xié)議。該協(xié)議棧建立在NetSilicon公司的Fusion TCP/IP協(xié)議棧的基礎(chǔ)上,為了實現(xiàn)更好的實時性能,RTX對TCP/IP協(xié)議棧作了部分修改。RTX將TCP/IP協(xié)議的實現(xiàn)和硬件的操作集成在網(wǎng)卡的實時驅(qū)動中,用戶無需加載額外的鏈接庫。RT-TCP/IP給終端用戶提供了許多重要參數(shù)設(shè)置,使其更加適合實時傳輸。另外,RTX開放了大量網(wǎng)卡的驅(qū)動程序源代碼,給用戶開發(fā)RTX下的網(wǎng)絡(luò)通訊程序帶來了極大的幫助。
RTX可靠的實時性已經(jīng)在眾多的平臺上得到了驗證,本文簡單介紹了RTX下開發(fā)實時控制程序的一個大概流程。由于RTX只是對Windows系統(tǒng)的一個擴展,并不對Windows系統(tǒng)本身做任何改變,而且RTX對微軟編譯環(huán)境的支持,使得需要更高實時性能的Windows程序可以很容易地移植到RTX下,相信RTX會在實時控制中得到更多的應(yīng)用。
[1] 劉心語,楊煜普.基于RTX實時環(huán)境的1394驅(qū)動程序開發(fā)[B].微計算機信息,2009,25(11-2):75-76.
[2] 方澄,徐琦.基于RTX的飛行模擬器分布式實時仿真系統(tǒng)[A].測控技術(shù),2007,26(7):86-87.
[3] 劉曉川,樊子明.Windows2 000(X P)+R TX的實時性分析與測試[J].艦船電子程,2007,27(6):135-138.
[4] 付文芳,張萍.RTX下PCI9052驅(qū)動程序的開發(fā)[A].科技廣場,2006(8):97-100.
[5] 呂瑛,陳懷民等。RTX環(huán)境下某智能串口卡的驅(qū)動開發(fā)[A].科學(xué)技術(shù)與工程,2007,7(5):761-764.