趙 峰 沈一凡 李晨輝長(zhǎng)安大學(xué)電控學(xué)院
基于TeeChart的89C51與PC串口通信與數(shù)據(jù)曲線繪制
趙峰沈一凡李晨輝
長(zhǎng)安大學(xué)電控學(xué)院
在控制系統(tǒng)中,有時(shí)候需要對(duì)采樣所得數(shù)據(jù)的曲線進(jìn)行繪制以便對(duì)被研究對(duì)象進(jìn)行建模、數(shù)據(jù)分析。同時(shí),圖像分析的方法由于它獨(dú)特的優(yōu)點(diǎn)被廣泛的運(yùn)用,實(shí)時(shí)繪圖技術(shù)就顯得十分重要。
Teechart 曲線繪制 串口
近些年來(lái),由于控制工程發(fā)展的實(shí)際需要,控制過(guò)程中需要依賴上位機(jī)對(duì)某些重要數(shù)據(jù)進(jìn)行記錄、分析與處理,有的控制過(guò)程需要對(duì)所得數(shù)據(jù)進(jìn)行精確的繪圖用以追蹤數(shù)據(jù)變化曲線。目前現(xiàn)有的繪圖軟件也不少,但是主要是由于各種產(chǎn)品的制作風(fēng)格,設(shè)計(jì)功能千差萬(wàn)別,很多時(shí)候難以滿足控制工程人員的需求。這對(duì)標(biāo)準(zhǔn)化、模塊化、個(gè)性化、多元化的繪圖程序設(shè)計(jì)軟件提出了要求,而TeeChart控件作為一款優(yōu)秀的繪圖控件,兼容多種程序語(yǔ)言可以降低軟件開(kāi)發(fā)的難度,同時(shí)也兼顧了縮短了軟件開(kāi)發(fā)周期,也提高了系統(tǒng)的可靠性等優(yōu)點(diǎn)。
單片機(jī)開(kāi)發(fā)板核心采用的是STC公司的89c52開(kāi)發(fā)板,內(nèi)部ROM為8Kb,256個(gè)字節(jié)的RAM,通過(guò)MAX232芯片與單片機(jī)連接并進(jìn)行電平轉(zhuǎn)換后通過(guò)RS232直接與PC機(jī)串口連接。電路如下圖所示:
3.1程序說(shuō)明
設(shè)計(jì)一個(gè)可以使得單片機(jī)持續(xù)向PC機(jī)發(fā)送ASCII碼的程序,波特率設(shè)置為9600,這主要是因?yàn)镻C上位機(jī)與下位機(jī)是以ASCII碼的形式通信,人為的在單片機(jī)端進(jìn)行16進(jìn)制與ASCII碼轉(zhuǎn)換,保持51單片機(jī)一直向串口發(fā)送數(shù)據(jù)“25”。程序流程圖如下:
4.1程序特征說(shuō)明
采用VS2010開(kāi)發(fā)環(huán)境中的C++語(yǔ)言進(jìn)行設(shè)計(jì),通過(guò)建立MFC程序以調(diào)用較多的附加庫(kù)函數(shù),其強(qiáng)大的MSCOMM串口通信控件可以滿足相當(dāng)多的通信要求,諸如,串口數(shù)據(jù)開(kāi)放與關(guān)斷、接收與處理等相關(guān)的庫(kù)函數(shù),同時(shí)子函數(shù)的調(diào)用與開(kāi)發(fā)很方便,可以大大降低編程的。
4.2TeeChart軟件設(shè)計(jì)
(1)串口號(hào)與相應(yīng)波特率的選擇
在表格里設(shè)置兩個(gè)下拉菜單欄,波特率從300設(shè)置到43000變化,串口號(hào)從1到15,這樣,串口選擇可以更加靈活,為了方便起見(jiàn),預(yù)設(shè)波特率為9600與單片機(jī)通信速率相同。程序添加在MFC圖表程序初始化程序中:
m_comsel.SetCurSel(0);//預(yù)置COM口
m_bandratesel.SetCurSel(5);//預(yù)置波特率為”9600”
(2)串口開(kāi)放與關(guān)閉程序設(shè)計(jì)
在圖表框中程序中加入兩個(gè)按鈕,分別用于控制串口開(kāi)通與關(guān)斷。
(3)在圖表框程序中加入兩個(gè)編輯框,分別用recieve與send表示,一方面可以用于檢驗(yàn)得到的數(shù)據(jù)是否正確,另一方面可以判斷串口輸入的數(shù)據(jù)與圖像進(jìn)行比較。在后期處理的過(guò)程中,可以將兩個(gè)編輯框縮小或直接去除。
(4)設(shè)置Teechart曲線的橫軸與縱軸,以及部分?jǐn)?shù)據(jù)的初始化,這些處理程序可以放入MSCOMM處理函數(shù)中,時(shí)間軸從電腦當(dāng)前時(shí)間選擇作為參考,但是進(jìn)行處理后均默認(rèn)從0時(shí)0分
CSeries(m_chart.Series(0)).Clear();//清空曲線
CPage(m_chart. get_Page()).p u t_ MaxPointsPerPage(80);//設(shè) 置80個(gè)數(shù)據(jù)點(diǎn)
COleDateTime CurTime = COleDateTime::GetCurrentTi me();//獲取當(dāng)前時(shí)間
COleDateTimeSpan tmSpan= COleDateTimeSpan(0,0,1,0);//設(shè)置時(shí)間間隔為1分鐘。
(5)讀取時(shí)間與緩沖區(qū)的字符,由于圖像處理程序嵌入到了串口通信程序中,所以數(shù)據(jù)一被接受便被處理并暫存在PC機(jī)內(nèi)。
(6)繪圖部分中不僅執(zhí)行繪圖功能,在繪圖結(jié)束后進(jìn)行延時(shí)設(shè)計(jì),這里不使用精確延時(shí)功能,一方面對(duì)于短時(shí)間的檢測(cè)(這里是1s)間隔而言使用Sleep函數(shù)或定時(shí)器對(duì)于程序造成的停滯非常嚴(yán)重,所以這里采用GetTickCount函數(shù)編寫(xiě)延時(shí)程序,每隔1s檢測(cè)串口端是否有數(shù)據(jù),若不是則繼續(xù)保持等待,當(dāng)然這樣的等待時(shí)間相對(duì)程序工作時(shí)間來(lái)說(shuō)是微不足道的。
上位機(jī)程序流程圖如下圖所示:
結(jié)束總結(jié):本文主要針對(duì)單片機(jī)與PC機(jī)通信并進(jìn)行實(shí)時(shí)通信繪制曲線進(jìn)行分析,搭建了一個(gè)基本功能齊備的曲線處理程序,特別是針對(duì)8位的單片機(jī)提供了一個(gè)較好的圖像處理平臺(tái),可以為相關(guān)工作人員進(jìn)行單片機(jī)與PC機(jī)進(jìn)行圖像數(shù)據(jù)處理提供參考。實(shí)際上機(jī)測(cè)試通過(guò),程序可以實(shí)現(xiàn)功能,實(shí)際測(cè)序測(cè)試結(jié)果如下圖所示。
[1]劉戰(zhàn)坤,曾水平,基于DSP28335與TeeChart控件的數(shù)據(jù)采集與顯示系統(tǒng)[J].中國(guó)科技信息2013.11; 113-114
[2]梁增欣,李維嘉,TeeChart控件介紹及在實(shí)時(shí)監(jiān)控系統(tǒng)中的應(yīng)用[J].工業(yè)控制計(jì)算機(jī)2010,23(12);9-10