時間:2009-05-13 14:04:17來源:ronggang
摘 要:機(jī)車數(shù)據(jù)監(jiān)控系統(tǒng)運用VC++實現(xiàn)了對一內(nèi)燃機(jī)車運行數(shù)據(jù)的實時監(jiān)控。通過計算機(jī)的串口傳輸內(nèi)燃機(jī)車數(shù)據(jù)儀中采集到的各種數(shù)據(jù),如機(jī)車型號、機(jī)車類型、累計運行時間等等,監(jiān)控機(jī)車的運行狀態(tài)以實現(xiàn)對機(jī)車的控制。設(shè)計的重點在于系統(tǒng)管理的軟件方面,具體來說是系統(tǒng)上位機(jī)的設(shè)計。以MFC (Microsoft Foundation Class Library)思路用類來實現(xiàn)串行通信和多線程編程, 并輔助以開放式數(shù)據(jù)接口(ODBC)在應(yīng)用程序中實現(xiàn)數(shù)據(jù)庫功能。
關(guān)鍵詞:監(jiān)控系統(tǒng);串行通信;多線程;ODBC; MFC
Abstract: The Diesel Monitor System effects the real-time monitoring on the diesel with vc++6.0, which regulates data flow by correspondencing between two serial ports. All kinds of data acquired by data graphic instrument e.g. locomotive ID, locomotive type and cumulative run-time etc. is transmitted for monitoring and control the diesel. The important point in this design is developing upper machine. Using the conception of Class in MFC (Microsoft Foundation Class Library) to effect multi-thread and serial communication, and with auxiliary to ODBC (Open Database Connectivity) the application program can have database.
Key Words: Monitor system; Serial Communication; Multi-thread; ODBC; MFC
1 引言
隨著鐵路信息化數(shù)字化的發(fā)展,提出了機(jī)車的在線實時監(jiān)控,要求對車載設(shè)備的相關(guān)數(shù)據(jù)進(jìn)行實時采集和存儲。這對為技術(shù)人員提供及時準(zhǔn)確的機(jī)車信息,保證列車運行的安全有著重要的意義。
本文介紹一種基于VC++的機(jī)車實時監(jiān)控系統(tǒng),是由后臺控制監(jiān)控系統(tǒng)和前臺采集系統(tǒng)所組成的一個分布式集成網(wǎng)絡(luò)。當(dāng)控制監(jiān)控系統(tǒng)與內(nèi)燃機(jī)車進(jìn)行通訊,則后臺控制監(jiān)控系統(tǒng)顯示計算機(jī)顯示的就是機(jī)車數(shù)據(jù)記錄儀采集到的各種機(jī)車數(shù)據(jù)。
2 功能分析
2.1 上位機(jī)的軟件功能主要有以下幾點:
1)與下位機(jī)(機(jī)車數(shù)據(jù)儀)進(jìn)行通信,完成對下位機(jī)的讀寫;
2)能夠?qū)?shù)據(jù)進(jìn)行有效的識別,提取數(shù)據(jù)中的有用信息(如機(jī)車型號,機(jī)車編號,機(jī)車標(biāo)稱功率等);
3)對有效數(shù)據(jù)進(jìn)行處理,能夠以曲線或圖表形式顯示車輛運行狀況;
4)為數(shù)據(jù)的查找與定位提供方便的手段,便于局部數(shù)據(jù)分析;
5)具有存檔、打印功能。
2.2 上位機(jī)主控程序功能劃分:
3 軟件實現(xiàn)
3.1 通訊協(xié)議
所謂通訊協(xié)議就是通訊雙方為了達(dá)到正確傳送和接收數(shù)據(jù)而達(dá)成的一組通訊規(guī)定。它包括發(fā)送/接收數(shù)據(jù)的格式、數(shù)據(jù)編寫與解讀方法以及通訊參數(shù)的設(shè)定。在通訊協(xié)議中,通訊參數(shù)的設(shè)定是通訊的前提,包括串口的選取,波特率設(shè)定,有無奇偶校驗,數(shù)據(jù)位的位數(shù),以及停止位的位數(shù)。下面介紹一下數(shù)據(jù)的格式和數(shù)據(jù)傳送。
數(shù)據(jù)格式: 定位數(shù)據(jù)從0開始。第0-第3字節(jié)=0x57, 0x77, 0x44, 0x4C為當(dāng)量里程記錄儀轉(zhuǎn)儲數(shù)據(jù)文件類型標(biāo)識頭;累計數(shù)據(jù)共176字節(jié),占數(shù)據(jù)文件中的第24字節(jié)到第199字節(jié);瞬時數(shù)據(jù)從第256字節(jié)開始,一直到結(jié)束,數(shù)據(jù)長度=瞬時數(shù)據(jù)的數(shù)據(jù)幀數(shù)×數(shù)據(jù)幀長;瞬時數(shù)據(jù)幀長包含幀校驗碼。文件尾占3字節(jié)=0x45, 0x4e, 0x44。
數(shù)據(jù)傳送:累積數(shù)據(jù)每176個字節(jié)數(shù)據(jù)為一個數(shù)據(jù)塊;瞬時數(shù)據(jù)的數(shù)據(jù)長度=瞬時數(shù)據(jù)的數(shù)據(jù)幀數(shù)×數(shù)據(jù)幀長;瞬時數(shù)據(jù)幀長包含幀校驗碼。
下位機(jī)每發(fā)送一個數(shù)據(jù)塊,隨即就發(fā)該數(shù)據(jù)塊的校驗和,如果檢驗和有誤,就重發(fā)該數(shù)據(jù)塊;如果數(shù)據(jù)未讀完,重復(fù)本操作,直到數(shù)據(jù)讀完。 命令中的校驗占一個字節(jié),[校驗]=([命令]+[目標(biāo)代碼]+[數(shù)據(jù)].字節(jié)1+…+[數(shù)據(jù)].字節(jié)n)mod 0x100。執(zhí)行結(jié)果返回值中的校驗也占一個字節(jié),[校驗]=([執(zhí)行結(jié)果代碼]+[數(shù)據(jù)].字節(jié)1+…+[數(shù)據(jù)].字節(jié)n)mod 0x100。
3.2 通訊流程
監(jiān)控系統(tǒng)與下位機(jī)(機(jī)車數(shù)據(jù)記錄儀)的通訊只需用到以下幾條命令:查詢下位機(jī)硬件工作狀態(tài)、查詢下位機(jī)數(shù)據(jù)紀(jì)錄狀態(tài)、讀累計數(shù)據(jù)、讀瞬時數(shù)據(jù)、寫數(shù)據(jù)。在上位機(jī)發(fā)出命令之前,下位機(jī)處于等待狀態(tài);當(dāng)命令發(fā)出之后,下位機(jī)探測所發(fā)出的命令并判斷該命令是否對自己操作。如果是,則按命令要求返回所要求的數(shù)據(jù);如果不是,則不回應(yīng);下位機(jī)收到采集系統(tǒng)送過來的數(shù)據(jù)以后,對它進(jìn)行分析和數(shù)據(jù)轉(zhuǎn)換,然后進(jìn)行顯示和保存。
將上位機(jī)的各種命令獨立地建立一個類MasterCommand,就用來處理上位機(jī)向下位機(jī)發(fā)送的命令。以下是對這個類的定義。
//命令碼,命令碼長度,命令顯示字串,獲取的數(shù)據(jù)長度/最大長度,數(shù)據(jù)放置起始位置,數(shù)據(jù)標(biāo)識定義位置
MasterCommand(char *comCode, const int &comCodeLen, CString comDispStr, const int &getDataLen, const int &dataPos, const int &dataSignPos)
{
init(comCode, comCodeLen, comDispStr, getDataLen, dataPos, dataSignPos);
}
3.2.1 查詢
A. 查詢下位機(jī)硬件工作狀態(tài)
用戶通過串口發(fā)送命令,如果命令正確執(zhí)行,則返回硬件的工作狀態(tài),根據(jù)數(shù)據(jù)交換
命令集可以判斷硬件工作得是否正常。程序?qū)⒂布ぷ鳡顟B(tài)顯示在用戶界面上,讓用戶可以很方便地了解硬件的工作狀態(tài),如果發(fā)現(xiàn)硬件有工作不正常的狀態(tài),就可以對硬件進(jìn)行相應(yīng)的處理。
B. 查詢下位機(jī)數(shù)據(jù)紀(jì)錄狀態(tài)
用戶通過串口發(fā)送命令,如果命令正確執(zhí)行,則返回下位機(jī)數(shù)
據(jù)記錄狀態(tài),根據(jù)數(shù)據(jù)交換命令集可以判斷數(shù)據(jù)記錄是否正常。如果數(shù)據(jù)記錄不正常,用戶也可以在界面上看到是哪方面出了問題,可以進(jìn)行相應(yīng)的處理。
3.2.2 讀數(shù)據(jù)
A. 讀累計數(shù)據(jù)
用戶在上位機(jī)發(fā)送讀累計數(shù)據(jù)的命令,下位機(jī)收到命令后向上位機(jī)返回執(zhí)行結(jié)果。執(zhí)行結(jié)果返回值:[執(zhí)行結(jié)果代碼] [數(shù)據(jù)] [校驗]。
其中: [執(zhí)行結(jié)果代碼] 和 [校驗] 均占一個字節(jié)。當(dāng)命令校驗失敗或執(zhí)行失敗時,下位機(jī)只返回 [執(zhí)行結(jié)果代碼] 和 [校驗] 碼。累計數(shù)據(jù)一共占176個字節(jié),在當(dāng)量儀數(shù)據(jù)存儲格式中對每一個字節(jié)都有詳細(xì)的定義。在程序中按照格式將數(shù)據(jù)取出來,并在用戶界面顯示出來。在所有數(shù)據(jù)正確接收后用戶可以選擇保存數(shù)據(jù),以供以后進(jìn)一步地查看,對數(shù)據(jù)進(jìn)行分析。
B. 讀瞬時數(shù)據(jù)
瞬時數(shù)據(jù)從第256字節(jié)開始,數(shù)據(jù)長度=瞬時數(shù)據(jù)的數(shù)據(jù)幀數(shù)×數(shù)據(jù)幀長;瞬時數(shù)據(jù)幀長包含幀校驗碼。
3.2.3 寫數(shù)據(jù)
主機(jī)下送數(shù)據(jù)到從機(jī),寫當(dāng)量記錄儀中的所有累計數(shù)據(jù)。執(zhí)行正確時返回上位機(jī)要求寫入的數(shù)據(jù)(二進(jìn)制表示)。便于上位機(jī)校驗。
4. 界面設(shè)計
控制系統(tǒng)的界面共有四個,它們是主界面、累計數(shù)據(jù)顯示界面、選擇寫入下位機(jī)數(shù)據(jù)界面。
(1)主界面
主界面是系統(tǒng)運行的主要界面,它的作用向下位機(jī)是發(fā)送各種命令和對串口通訊的參數(shù)進(jìn)行設(shè)置,通過各種命令才會實現(xiàn)系統(tǒng)采集實時數(shù)據(jù)和進(jìn)行監(jiān)控的功能。也只有在發(fā)送各種命令時才會調(diào)用和顯示其他功能界面(如累計數(shù)據(jù)顯示界面等),也就是說主界面是其他功能界面的聯(lián)系紐帶。
在主界面的設(shè)計中采用了組合框、樹形視圖、列表框等控件,在界面下方的列表框中可以顯示運行的程序、出錯報告及系統(tǒng)的狀態(tài)等。
(2)累計數(shù)據(jù)顯示界面
此界面的作用是當(dāng)上位機(jī)完成了采集下位機(jī)的累計數(shù)據(jù)時,可以由用戶選擇是否顯示采集的累計數(shù)據(jù)。用戶檢查了機(jī)車的累計數(shù)據(jù)后,可以在界面對累計數(shù)據(jù)進(jìn)行更改,然后就將數(shù)據(jù)進(jìn)行保存,以便將來對數(shù)據(jù)進(jìn)行管理。
(3)選擇寫入下位機(jī)數(shù)據(jù)界面
上位機(jī)采集到的數(shù)據(jù)都可以保存,若下位機(jī)此時的數(shù)據(jù)有必要進(jìn)行更改,可以從以前采集到的數(shù)據(jù)中選擇一份寫入下位機(jī),也就實現(xiàn)了系統(tǒng)的控制功能。
5. 小結(jié)
本系統(tǒng)在實際應(yīng)用中運行良好,數(shù)據(jù)的完整性、實時性和程序的可靠性高。它操作簡便,具有很強(qiáng)的易用性。
參考文獻(xiàn)
[1] 李現(xiàn)勇.Visual C++串口通信技術(shù)與工程實踐[M],人民郵電出版社,2002年.
[2] 李博軒.Visual C++圖形用戶界面開發(fā)指南[M],清華大學(xué)出版社,2000年.
[3] 劉刀柱.Visual C++6.0實踐與提高 數(shù)據(jù)庫篇[M],中國鐵道出版社,2001年.
[4] 網(wǎng)冠科技.Visual C++6.0程序設(shè)計工程師[M],機(jī)械工業(yè)出版社,2001年.
[5] Booch,G. Object-Orinted Analysis and Design[J],MA:AddisonWesley Publishing Company,1994.
[6] Pohl,I. Object-Oriented Programming Using C++[J], MA:AddisonWesley Publishing Company,1997.
標(biāo)簽:
中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(m.u63ivq3.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。