基于VC++的數(shù)據(jù)監(jiān)視系統(tǒng)
引言: 目前主要的監(jiān)視系統(tǒng)軟件大多是由組態(tài)軟件或VB實(shí)現(xiàn)的。組態(tài)軟件將功能模塊化,對(duì)于較小的系統(tǒng)有一些多余的功能是用不上的,導(dǎo)致了資源的浪費(fèi)。而VB功能有限,運(yùn)行效率不高。隨著Windows操作系統(tǒng)的普及和其強(qiáng)大的功能,越來越多的程序支持Windows操作系統(tǒng)。由于VC是微軟的產(chǎn)品,用它來編寫Windows程序有強(qiáng)大的程序接口和豐富的開發(fā)資源的支持,加之VC嚴(yán)謹(jǐn)?shù)膬?nèi)存管理,在堆棧上良好的分配處理,生成代碼的體積小,穩(wěn)定性高的優(yōu)點(diǎn),所以VC++就成為目前程序的主流開發(fā)工具。本文主要介紹如何用VC++編寫監(jiān)控程序,本程序用在基于凌陽單片機(jī)SPCE061A的數(shù)據(jù)采集及無線傳輸系統(tǒng)中監(jiān)視現(xiàn)場采集的數(shù)據(jù)。
1 .系統(tǒng)筐架及各部分的功能
本系統(tǒng)分兩大部分:數(shù)據(jù)采集及發(fā)送部分,數(shù)據(jù)接收部分。如圖1所示:
圖1 系統(tǒng)框圖
其中:數(shù)據(jù)采集部分采集外界電壓值并將電壓的模擬值轉(zhuǎn)換成數(shù)字值。
無線傳輸模塊負(fù)責(zé)收發(fā)轉(zhuǎn)換后的數(shù)字值。
顯示模塊將數(shù)字值經(jīng)過處理后顯示出測量的電壓值。
數(shù)據(jù)監(jiān)視部分將接收模塊接收到的數(shù)據(jù)經(jīng)過處理后顯示出測量的電壓值。
2 .數(shù)據(jù)監(jiān)視程序的設(shè)計(jì)
要實(shí)現(xiàn)數(shù)據(jù)監(jiān)視的功能要解決三個(gè)問題:
1.上位機(jī)(PC機(jī))如何接收數(shù)據(jù)。
2.接收到數(shù)據(jù)后如何處理使顯示在屏幕上的數(shù)據(jù)更加直觀。
3.由于有測量誤差,如何用軟件的方法減少誤差。
2.1 接收數(shù)據(jù)
在無線接收模塊接收到遠(yuǎn)處的數(shù)據(jù)后將數(shù)據(jù)發(fā)送到上位機(jī)的串口。VC++ 6.0提供的MSComm控件通過串行端口發(fā)送和接收數(shù)據(jù),為應(yīng)用程序提供串行通信功能。當(dāng)串口接收緩沖區(qū)中有字符時(shí),可以利用 MSComm 控件的 OnComm 事件捕獲并處理這些數(shù)據(jù)。在編程過程中,可以在OnComm事件處理函數(shù)中加入自己的處理代碼處理得到的數(shù)據(jù)。
2.2 處理數(shù)據(jù)
從串口接收到的數(shù)據(jù)是16位2進(jìn)制碼。直接顯示不直觀,需要將其轉(zhuǎn)化為電壓值。
2.2.1.原始數(shù)據(jù)的格式
因?yàn)楸鞠到y(tǒng)采集兩路數(shù)據(jù),為了分辨電壓值是哪一路的,我們將16位2進(jìn)制碼的最高位(第15位)設(shè)置為路數(shù)識(shí)別位,0代表第一路1代表第二路。第14位到10位數(shù)據(jù)無用為0,第9位到0位為電壓數(shù)據(jù)。結(jié)構(gòu)如圖2所示:
2.2.2 數(shù)據(jù)的處理
假設(shè)接收的16位數(shù)據(jù)為X
先判斷是哪一路電壓的數(shù)據(jù):若X ≥32768(2進(jìn)制數(shù)1000000000000000對(duì)應(yīng)的10進(jìn)制數(shù))說明數(shù)據(jù)來自第2路。將X減去32768得到真實(shí)的電壓數(shù)據(jù)Y,再通過公式運(yùn)算得到測量電壓值:公式為:V=Y*6.6/1024 (此公式是根據(jù)電壓采集模塊而定的這里就不再詳述了)。若X< 32768說明數(shù)據(jù)來自第1路,直接用上述公式得出電壓值V。
2.3 顯示電壓值
程序?qū)陕窋?shù)據(jù)分別顯示在兩個(gè)文本框中。如圖3所示:
圖3 程序界面圖
左邊顯示第1路右邊顯示第2路,先收到的數(shù)據(jù)顯示在文本框的最上面后收到的數(shù)據(jù)依次排在下面,點(diǎn)擊“清空”鍵時(shí)文本框清空。
2.4 減少誤差
由于電壓采集模塊本身有一定的阻值,電壓測量值總是小于實(shí)際的值我們用軟件的方法將2.2.2中得到的Y乘以一個(gè)固定的數(shù)(經(jīng)過多次試驗(yàn)將此數(shù)定為1.023)使測量值于實(shí)際值更接近。以下是實(shí)驗(yàn)所得結(jié)果:
第一路A/D轉(zhuǎn)換,如表1所示。
表1 A/D1轉(zhuǎn)換對(duì)照表 單位:伏
實(shí)際電壓 | 4.902 | 4.466 | 3.970 | 3.570 | 2.996 | 2.462 | 1.994 | 1.550 | 1.042 |
顯示電壓 | 4.9 | 4.5 | 4.0 | 3.5 | 3.0 | 2.5 | 2.0 | 1.5 | 1.0 |
接收電壓 | 4.90 | 4.46 | 3.96 | 3.51 | 3.00 | 2.46 | 1.99 | 1.50 | 1.03 |
第二路A/D轉(zhuǎn)換,如表2所示。
表2 A/D2轉(zhuǎn)換對(duì)照表 單位:伏
實(shí)際電壓 | 4.982 | 4.472 | 4.040 | 3.464 | 2.992 | 2.504 | 1.990 | 1.538 | 0.996 |
顯示電壓 | 5.0 | 4.5 | 4.0 | 3.5 | 3.0 | 2.5 | 2.0 | 1.5 | 1.0 |
接收電壓 | 4.98 | 4.47 | 4.03 | 3.47 | 2.99 | 2.50 | 1.98 | 1.53 | 0.99 |
2.5 程序框圖
如圖4所示
圖4 程序框圖
3.結(jié)束語
本文結(jié)合實(shí)際應(yīng)用介紹了基于VC++的監(jiān)視程序的設(shè)計(jì)過程。設(shè)計(jì)的程序具有接受數(shù)據(jù),顯示數(shù)據(jù),糾正誤差等功能。并且結(jié)構(gòu)簡單,運(yùn)行效率高,占系統(tǒng)資源少,體現(xiàn)了VC的優(yōu)越性。在誤差矯正的功能上還可以針對(duì)A/D轉(zhuǎn)換帶來的誤差設(shè)計(jì)一種算法使顯示的電壓值更為精確,這將在下一步的工作中的繼續(xù)研究。
本文作者創(chuàng)新點(diǎn):不同于大多數(shù)監(jiān)視軟件使用組態(tài)軟件或VB實(shí)現(xiàn),本文使用VC++編寫監(jiān)視程序。
參考文獻(xiàn):
1 羅亞非等編著.凌陽16位單片機(jī)應(yīng)用基礎(chǔ).北京:北京航空航天大學(xué)出版社,2005.
2 陳偉,陳法國,王世勛.無線數(shù)據(jù)通信技術(shù)在TPMS中的應(yīng)用.武漢理工大學(xué)報(bào),2005,27 (5):241~244
3 PTR8000.pdf.訊通科技.www.freqchina.com
4 nRF905.pdf.訊通科技.www.freqchina.com
5 丁立波,江小華,張河.基于無線數(shù)字傳輸技術(shù)的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì).無線發(fā)送/接收IC芯片及其數(shù)據(jù)通訊技術(shù)選編(2):168~171
6 施運(yùn)梅,劉梅彥,楊根興.網(wǎng)絡(luò)資源管理研究[J].微計(jì)算機(jī)信息 2006(1);109—11
評(píng)論