馬 釗,嚴 祥,丁國君,王立德
(北京交通大學 電氣工程學院,北京100044)
目前大部分舊型車和部分運行車輛還沒有安裝機車通信網絡和故障檢測智能顯示系統,駕駛員所能獲取的機車運行信息內容較少,行車故障也無法記錄,給列車安全運行帶來了隱患。因此,對其進行智能化,現代化的技術改造是必要的。目前國內機車行業使用的智能顯示單元主要有以下兩種,即基于DSP+CPLD(顯示驅動)的顯示終端和基于X86架構工業PC機的顯示終端[1]。這兩種顯示系統開發較容易,但易受振動、灰塵、潮濕、高溫以及其他環境問題的影響,電能消耗量大,運行不穩定,升級困難,容易出現故障和數據丟失。這些機車需要一套高性價比且安全穩定的列車故障檢測顯示系統。提出了基于CAN網絡、ARM和 Windows CE5.0嵌入式系統的車載網絡智能顯示終端(IDT)。通過車載網絡、數據采集模塊和故障檢測模塊將采集到的機車狀態和故障信息發送到司機室顯示屏,提示司機采取相應的故障處理措施。同時機車運行數據由顯示模塊以無線方式傳回地面機務段,地面人員可以及時跟蹤了解機車狀態。
設計的核心處理器采用32位RISC的ARM920T內核S3C2440A處理器,配備64 MB的NAND Flash和64 MB的SDRAM。S3C2440處理器是一款低功耗、高度集成的微處理器,主頻達到了400 MHz,具有豐富的接口資源,能夠滿足本系統的設計需求。LCD顯示屏采用的10英寸LCD工業屏,能夠保證在較寬的溫度范圍正常工作;控制接口采用9個按鍵的按鍵條,相比觸摸屏,雖然犧牲了性能但保證了控制的穩定性。系統對外接口主要有以太網接口、USB主機及設備接口、按鍵IO接口、SPI接口、串口等。由于S3C2440本身并沒有集成CAN控制器,因此本設計采用其SPI接口與外部設備C8051F041單片機進行,再通過CAN網絡與列車上其他網絡節點相連。

圖1 系統硬件結構
圖1中可以看到,Flash存儲系統引導數據;SDRAM作為系統運行動態內存;SD卡用于故障信息存儲;LCD模塊顯示信息;鍵盤鼠標通過USB口輸入;串口實現對GPRS的控制和通訊;按鍵IO接口實現對顯示屏的相關操作。由于列車工作環境惡劣,在硬件設計時為了保證抗電磁干擾性和系統穩定性,核心板采用6層設計,底板采用4層設計。其中S3C2440處理器和NAND FLASH、SDRAM設計在核心板上,其余接口和電源電路設計在底板。
機車網絡的信息量比較多,對于顯示終端來說,需要同時進行較多的任務以完成網絡傳輸,數據分離,人機界面,外設控制等功能,因此,選用具有多任務、具備多媒體特性的操作系統是必要的。文中選用Windows CE嵌入式操作系統,其開發軟件豐富,模塊化的設計使系統可大可小,可根據需求進行定制,穩定性和移植性好,支持多種CPU,并對各種文件系統提供完備支持[2]。Windows CE操作系統的開發工具為微軟提供的Platform Builder 5.0(后文簡稱PB),用來定制和生成系統鏡像,并導出對應鏡像的SDK(Software Development Kit)。SDK應用于編寫基于該系統鏡像的應用程序[3]。操作系統開發流程如圖2所示。

圖2 Win CE系統開發流程
通常Wince會給出支持多種CPU常用設備的驅動程序,如LCD驅動、USB驅動、串口驅動等;但有時由于平臺采用了特定的硬件設備,其驅動程序在PB中并沒有給出,這時就需要用戶針對實際的硬件自行開發,以滿足個性化的需求。本系統所涉及的SPI接口驅動就屬于此類。所以自行開發了SPI流接口驅動程序,供上層操作界面應用程序調用。采用流接口方式編寫系統SPI驅動程序,主要涉及 3部分:編寫驅動程序;編寫SPI.def文件;將驅動導入注冊表。
以PB為開發工具進行驅動程序編寫,首先在項目工程中包含S2440.H頭文件[4],然后直接調用VirtualAlloc命令,申請虛擬內存,VirtualAlloc函數是最底層的分配虛擬地址空間的函數。它用進程的地址空間或者全局地址空間內分配符合條件的地址空間并且自動用0初始化提交的物理存儲器。其函數如下所示:
VirtualAlloc(0,sizeof(SSPreg),MEM-RESERVE,PAGE-NOACCESS);
函數若執行成功,將返回已分配好的虛擬空間的首地址,用一個指向結構體的指針變量來接收。在VirtualAlloc函數成功返回后,調用VirtualCopy函數將映射的物理地址綁定到剛剛分配好的虛擬空間地址。
VirtualCopy((PVOID)v-pSSPregs,(PVOID)(SSP-BASE),sizeof(SSPreg),PAGE-READWRITE|PAGE-NOCACHE);
運行在用戶狀態的驅動程序或應用程序必須用此函數,因為用戶模式下的線程沒有直接訪問物理內存的權利。
有了上述準備工作后,我們可以進行I/O和SPI內存映射函數SPI-InitAddrSPI(void)、SPI-InitAddrIO(void)的編寫。以前者為例關鍵代碼如下:
//申請內存空間,大小等同SSPreg結構體,返回空間起始地址指針
v-pSSPregs=(volatile SSPreg*)VirtualAlloc(0,sizeof(SSPreg),MEM-RESERVE,PAGE-NOACCESS);
//虛擬內存映射,將申請的地址綁定到 SSPBASE指向的地址。
VirtualCopy((PVOID)v-pSSPregs,(PVOID)(SSP-BASE),sizeof(SSPreg),PAGE-READWRIT E|PAGE-NOCACHE));
映射成功后,通過對v-SSPregs的操作可以實現SPI相關底層硬件的寄存器配置和讀寫。接下來就可以進行SPI流接口函數的編寫,主要是通過以下幾個模塊來實現驅動的[5]:SPI-Open();SPI-Close();SPIInit();SPI-Deinit();SPI-Read();SPI-Write();SPIIST()。根據SPI的技術文檔,通過上述幾個模塊對SPI的寄存器進行控制,實現SPI的收發數據。控制通信程序示例如下:

從端口讀數據,SPI為按字節收發方式,每收發一個字節調用一次SPI-Write()函數UINT8 SPI-Write(UINT8 Data)

應用程序調用函數CreateFile獲取SPI設備句柄,文件系統將會調用SPI驅動例程中的SPI-Open()來響應應用程序的請求。當應用程序調用ReadFile函數讀取SPI設備上的字符時,文件系統將會調用SPI驅動例程中的SPI-Read()函數來讀取SPI接口設備上的數據。編寫完SPI驅動程序后,使用Platform Builder編寫并生成DLL文件,定義SPI.def文件,最終生成CEC文件,將其導入Win CE系統后重新編譯鏡像,修改相應注冊表項,就完成了SPI流接口驅動程序的編寫。
采用Visual Studio.NET 2003來開發基于.NET Compact Framework的應用程序,使用C++語言,安裝上之前生成的SDK,即可進行人機界面應用程序的開發。由于本系統網絡數據龐雜,復合度較高,在數據處理同時需要進行界面刷新等任務,是一個多任務系統。因此筆者應用多線程技術,并根據任務的重要性進行線程優先級劃分,以充分利用系統資源,保證系統實時性和網絡傳輸的效率。除主線程外,應用程序主要包括3個線程,根據優先級從高到低依次是:(1)SPI通信線程;(2)界面控制線程;(3)按鍵響應線程。
司機室IDT最主要的功能就是實現故障數據的接收顯示和存儲功能,將采集模塊和故障檢測儀送來的故障代碼、狀態信息進行顯示存儲。機車的故障記錄是一個相對復雜的過程,主要有兩種情況:(1)瞬間故障,觸發后又自我恢復;(2)持續性故障,需要人工操作后排除。基于這兩種情況,顯示屏在顯示故障時分兩個類別:當前故障和歷史故障。當前故障界面為司機提供當前運行狀況下依然存在的故障,并根據故障發生的原因給出排除故障的操作提示。歷史故障界面提供曾經發生的故障,包括瞬時恢復的故障和已經手動排除的故障,為行車提供一個有力的數據記錄,為地面指揮甄別行車故障的發生原因和責任追查提供可靠依據。
設計采用SQL Server CE、RDA(遠程數據訪問)技術和ADOCE訪問數據庫實現故障數據的實時顯示和存儲。在每頁可根據按鍵提示查詢需要的故障信息和當前故障。當機車發生故障時,程序主界面的故障標志變紅并且閃爍,提示司機查看當前故障頁面及相應的指導操作。故障處理功能是在程序中用定時器定時查詢實現的。
如圖3所示,SPI接口收到的數據是實時接收的,應用程序進行數據分離:由采集模塊傳送來的數據為機車狀態燈信號,如主斷、預備、零位、主接地和輔過流等;由故障檢測儀傳來的數據為網壓、電機電壓和電流以及故障數據。通過SQL Server CE和ADOCE編程,將故障數據與標準無故障數據進行比較,得到故障號,然后記錄當前故障,刷新顯示。圖4是應用程序其中的一個主界面,此界面主要實現故障數據的實時顯示和司機操作提示。

圖3 故障處理流程

圖4 人機界面當前故障頁面
另外,本系統通過GPRS,采用RDA方式使SQL Server CE與地面監控站的SQL Server進行數據同步,使得地面實時掌握機車運行狀態,對機車安全運行起到了很好的保障作用。
本文設計的新型列車智能顯示終端,將32位多任務嵌入式實時操作系統Window s CE.NET技術引入設計中,用戶操作界面友好,系統可擴展能力強,各項功能均達到預期的標準。其發熱量低,噪聲小,系統穩定可靠,滿足應用需求,且擁有體積小,質量輕,安裝方便,移動性強,軟件更新維護方便等傳統工控系統所不具備的優勢,為其他嵌入式檢測顯示系統提供了良好軟、硬件設計參考。系統當前安裝應用于昆明機務段SS3型電力機車上,運行狀態良好。
[1] 王永翔.機車故障診斷系統中的司機室顯示屏[J].鐵道學報,2006,28(3):67-70.
[2] 何宗鍵.《Windows CE嵌入式系統》[M].北京:北京航天航空大學出版社,2006:10-22.
[3] 張東泉.Windows CE開發實例精粹[M].北京:電子工業出版社,2007:18-28.
[4] 汪 兵.EVC高級編程及其應用開發[M].北京:中國水利水電出版社,2005:253-273.
[5] 劉學貴.基于Windows CE的SPI驅動程序設計[J].單片機與嵌入式系統應用,2007(7):75-77.