江浩晨
[摘要]發電車是空調旅客列車的能源中樞。介紹發電車監測系統的功能和主機結構及要求,接著對Windows cE.NetT~I]SQL Server CE做簡單介紹,然后討論說明其在系統中的應用方法,同時以Visual Studio.NET編程環境下的c#語言為例,介紹基于該應用環境的設計和編程方法,最后通過應用測試結果,表明該系統達到預期的設計目標。
[關鍵詞]發電車嵌入式系統監測系統
中圖分類號:TP3文獻標識碼:A文章編號:1671—7597(2009)0210036-02
一、引言
發電車是空調旅客列車的能源中樞。發電車監測系統由于要安裝在運行著的發電車上,因此對系統的軟件硬件都需要符合車載系統的特殊要求。由于主機硬件運行在存在較大震動的惡劣環境下,要求硬件不能有風扇和旋轉式的硬盤這些基本要求,因此硬件性能不可能很高,而主機對通訊、數據存儲、顯示又有很高的穩定性與實時性要求,因此需要一種實時、高效的嵌入式平臺支持。本文先介紹發電車系統的應用軟件平臺需求,然后討論Windows CE.NET嵌入式系統在本系統中應用的可行性與應用編程方法,接著對SQL Server CE在本系統中的可行性和編程方法進行了探討研究。
二、發電車監控系統的應用軟件需求
(一)系統功能
監測系統實時監測與發電機組運行相關的參數,按秒記錄入數據緩存,自動計算累計開機時間和累計電能,按設定時間間隔(默認15分鐘)記錄到數據庫。對所有監測的參數均可設置上下限,參數超過規定標準值時立即報警,并將事件點前后各20秒的數據存儲到日志文件和數據庫中。
系統使用LCD彩屏顯示,圖形化展示各項參數和開關量狀態,報警時以醒目方式顯示報警參數狀態。系統在GPRS網絡允許的情況下,隨時向地面系統發送完整實時數據。
要求保存近1年內的所有數據,隨時可以通過u盤導出指定數據。在需要時可以與地面服務器進行數據庫同步操作,以便做進一步的分析挖掘。[1]

(二)主機結構及運行環境
發電車監控系統通過485總線,與各遠程監測模塊通信,獲取實時數據,并對數據進行存儲、分析、報警和顯示等操作。其主機功能結構如圖1所示:
該主機為系統的核心,負責數據的采集、存儲與顯示等操作。主機安裝在運行中的發電車中,由于工況的需求,主機密封無風扇,存儲使用工業級cF卡。其中單板機與GPS模塊及GPRS模塊的通訊都是通過獨立的Rs一232接口。
(三)軟件系統平臺要求
因以上需求,要求系統為嵌入式系統,較小的系統核心,較快的啟動和運行速度,需要有友好的人機交互界面,且要求可以進行多線程多端口的串口通信(本系統使用4個串口)。
另外要求編程和維護盡可能方便。
(四)數據存儲要求
系統的數據存儲分為日志文件存儲和數據庫存儲。其中,數據庫中存儲的數據主要用于簡單快速的檢索。數據庫存儲的數據量根據設計,每年150M左右,循環清除。界面操作中包括查詢在內的各項數據庫操作不能有明顯延遲。
三、Windows CE.NET的在系統中的應用研究
(一)Windows CE.NET系統介紹與討論
Windows CE.Net是Windows CE 3.0的后續產品,它是一個功能強大的實時嵌入式操作系統,由于有眾多強大工具支持,用戶利用它可以快速開發出下一代的智能化小體積連接設備。借助于完善的操作系統功能和開發工具,Windows CE.Net提供了構建、調試和部署基于Windows CE.Net的定制設備所需的一切特性。Windows CE.Net的最大好處是具有可定制性。當它自帶的驅動程序不能滿足用戶的要求時,需要用戶自己編寫相應的驅動程序。Windows CE.Net的開發工具Platform Builder就可以完成系統的定制和相應的驅動程序開發。[2]根據Windows CE.Net的特性,其嵌入式系統的各種特性非常適合發電車監測系統。
(二)編程方式
本系統使用Windows CE.NET 4.2,操作系統支持Microsoft.NETCompact Framework,系統編程軟件使用微軟的VisuaStudio.Net 2003(也可使用更高版本,如2005版,但聯機方式會有所不同),編程使用c#語言。
安裝Windows cE.NET Utilities v1.1 for Visual Studio.NET20031具包后,可通過以太網方式,將編程開發的Pc機與運行WindowscE.NET 4.2的主機設備進行連接,直接進行聯機編程和調試。由于有.NETFramework的支持,使得用嵌入式環境下的c#編程方法和桌面機程序基本一致,作為嵌入式應用,其支持的Microsoft.NET Compact Framework是精簡版的,支持的組件比標準版少一些。
在系統軟硬件定制時,設計有4個串口,1個用于與GPS設備通訊(Rs一232),1個與GPRS設備通訊(RS-232),另兩個與485總線上的設備通訊。每個串口設備都在不同線程中獨立打開和通訊,串口調用API接口函數CreateFile打開,同樣調用API函數ReadFile和WriteFile來對串口進行數據讀取和寫入。
主機系統軟件結構如圖2所示。
軟件用面向對象方法,封裝各個功能模塊,并在不同線程中同步運行[3]。其中主要分兩個采集數據的通信模塊,和4個讀取數據的后期數據處理模塊。
其中,實時數據實例為一個數據緩存類的實例,為程序的數據核心[4]。在對其讀取和寫入過程中會發生各個線程間的并發沖突問題。因此在可能并發出現的程序代碼段使用以下代碼控制:
System.Threading.Monitor.Enter(對象1)://防止沖突加鎖
try
{
//需要防止并發沖突的代碼段
………………
)
finally
{
System.Threading.Monitor.Exit(對象1)://防止沖突解鎖
)
在需要防止并發沖突的代碼開始的地方使用System.Threading.Monitor.Enter方法在指定對象上加排他鎖,完成后再System.Threading.Monitor.Exit方法解鎖,以防止此并發問題的出現[5][6]。
四、SQLCE在系統中的應用研究
(一)SOLCE介紹與應用討論
SOL Server cE是用作快速開發的關系型精簡數據庫,它將企業級數據管理能力擴展到了基于Windows cE操作系統的嵌入式移動設備上。本系統使
用Visual Studio.NET編程,通過.NET Compact Framework支持下的ADO.NET技術訪問操作SOL Server cE 2.0數據庫。
SOL Server cE提供遠程數據訪問和合并復制功能,在需要的時候,可以實現與SQL Server服務器同步。本系統在正常使用情況下不需要使用這項功能,但這個功能使得本系統具有良好的擴展性。
(二)SOL Server CE編程方法
數據庫設計好后,在項目中添加對System.Data.SqlServerCe組件的引用,可以編程實現對SQL Server cE的各項操作。以下以c#語言為例實現對數據庫的連接準備[7][8]:
SqlCeConnection DBConnection;
//數據庫連接
SqlCeCommand DBComand;
//命令對象
DBConnection=new SqlCeConnection(AConnectStrings)://通過連接串字符定義連接
DBCommand=new SqlCeCommand():
DBComand.Connection=DEConnection;
由于程序中有多個線程同時運行(如圖1,至少有3個主要模塊在獨自的線程中對數據庫有讀寫操作),而SQL Server CE2.0只支持單進程單線程的讀寫操作,因此對數據庫操作同樣需要進行防止沖突的代碼保護,以下以c#語言為例,對數據庫提交一個SQL命令,做一個刪除一個臨時表的操作:
System.Threading.Monitor.Enter(this)://防止沖突加鎖
try
{
DBConnection.open();
DBCommand.CommandText=“drop table tabletemp”:
int Result=DBComand.ExecuteNonQuery()://通過Result獲取操作影響到的行數
}
catch(Exception E)
(
//此處進行錯誤處理
)
finally
(
DBConnection.Close():
System.Threading~Monitor.Exit(this)://防止沖突加鎖后解鎖
)
在實際運行中,因SQL Server CE的單線程訪問特性,數據庫操作類被編程封裝,并在系統中僅創建一個實例,多個線程可以并發調用。以上代碼在實踐中證明,在多線程并發調用訪問時,運行穩定。
在停機維護時,可能需要與地面服務器中的SOL Server數據庫進行數據同步,可以使用RSQL Server cE自帶的emote Data Access(RDA)對象,它為Windows cE應用程序訪問遠程的SQL Server數據庫提供了一種簡單的訪問方式。使用其Push方法,可以將保存在Windows cE.NET上的數據直接寫人到遠程的SQI Server數據庫中,使用Pull方法,可以將遠程的SQL Server數據庫的數據下載到Windows cE.NET中的SOL Server cE數據庫中,這樣就可以實現數據的交換和同步。[9]
(三)SOL Server CE在發電車監測系統中的應用
本發電車監測系統通過串口通信,實時獲取各遠程測量模塊的測量數據,并記錄在一個緩存實例中,通過界面模塊實時在屏幕上顯示當前各項參數,并通過人工觸發方式記錄數據到數據庫,同時通過界面操作,對系統進行設置以及對數據庫中歷史數據的查詢:通過數據庫存儲模塊,按設置定時記錄實時參數數據到數據庫;通過事件報警分析模塊判斷報警,并記錄到數據庫;通過GPRS通訊模塊實現與地面系統的數據通訊。
而SQL Server cE 2.0作為一個嵌入式數據庫,在本系統的應用中,不可能記錄海量數據,并進行大數據量的檢索查詢或其它操作,否則會造成系統運行效率下降或不穩定,因此優化數據庫的設計和優化數據量在本系統設計中也很重要。
五、應用測試結果
本發電車監測系統,在Windows cE.NET~I]SQL Server cE的平臺基礎上完成開發,并進行了實際的裝車測試,比較其他同類產品有以下優點:
1、系統穩定:嵌入式平臺加上.NET Compact Framework的支持,系統運行穩定性很高,同時,由于對多線程操作的保護較好,使多線程操作更具有高效性和穩定性。
2、運行效率高:4個串口與各模塊設備通訊,平均單次輪詢時間為0.5s,低于系統要求的1s的時間間隔。由于嵌入式系統占資源較小,程序響應速度很快。SOL Server CE存儲數據效率高,查詢速度也很快,操作中無明顯延遲現象,數據安全性好。
3、界面友好:Windows cE.NET的圖形界面友好,在此基礎上開發的程序也有同樣的優點。
4、系統擴展性強:在需要時,可將數據通過SQL Server CE的同步功能,將車載主機中的數據直接同步到地面機SQL Server數據庫,用于進行進一步的數據分析與挖掘。
六、結論
本文研究討論了發電車監測系統中使用Windows cE.NET和SQL Serverce的可行性以及其使用及編程方法,并用應用測試結果證明該平臺下開發的監測系統完全可以達到預期的設計目標。該系統中使用到的軟件技術都是目前市場上較為成熟的技術,其應用領域也在逐漸擴大,在鐵路系統的其它信息化建設中也將發揮重要作用。