版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 請(qǐng)輸入學(xué)校名稱(chēng) 請(qǐng) 輸 入 專(zhuān) 業(yè) 論文 串口溫度數(shù)據(jù)采集并實(shí)時(shí)顯示(上位機(jī)部分) 姓 名: 請(qǐng)輸入作者 學(xué) 號(hào): 請(qǐng) 輸 入 學(xué) 號(hào) 指導(dǎo)教師: 請(qǐng)輸入指導(dǎo)教師 2021年1月20日1、 原理 讀串口數(shù)據(jù)的原理是,只要當(dāng)有數(shù)據(jù)向串口發(fā)數(shù)據(jù)來(lái)時(shí),計(jì)算機(jī)就會(huì)自動(dòng)將其數(shù)據(jù)寫(xiě)到一個(gè)特定的緩沖區(qū),我們只要寫(xiě)程序去讀那個(gè)特定的緩沖區(qū)就可以了. 有數(shù)據(jù)向串口發(fā)過(guò)來(lái)時(shí),程序可以將數(shù)據(jù)接收到,接收的數(shù)據(jù)是字符型的,那么將數(shù)據(jù)轉(zhuǎn)化為數(shù)字型的,再將這個(gè)數(shù)據(jù)的大小作為畫(huà)圖的某一個(gè)點(diǎn)的縱坐標(biāo),橫坐標(biāo)為數(shù)據(jù)的序號(hào).將這些點(diǎn)用線連起來(lái)就是一個(gè)曲線圖了,這個(gè)就是圖形顯示基本原理.查看原來(lái)的數(shù)據(jù)的原理也是這樣的,不同的地方
2、就是,數(shù)據(jù)是從文件中來(lái),同樣的也是將多個(gè)數(shù)據(jù)分成一個(gè)一個(gè)的,然后這一個(gè)數(shù)據(jù)的大小就是畫(huà)圖的某一個(gè)點(diǎn)的縱坐標(biāo),橫坐標(biāo)同樣為數(shù)據(jù)的序號(hào),再將這些點(diǎn)用線連起來(lái)就是曲線圖. 圖形能移動(dòng)的原理,是我們首先改變的只是數(shù)據(jù),圖形并沒(méi)有變,但圖形的形式是由這些數(shù)據(jù)來(lái)確定的,當(dāng)數(shù)據(jù)發(fā)生變化后,我們通過(guò)刷新顯示區(qū)來(lái)變化的.二、程序流程發(fā)送到串口來(lái)的數(shù)據(jù)接收數(shù)據(jù)顯示保存數(shù)據(jù)查看以前的數(shù)據(jù)打開(kāi)以前的數(shù)據(jù)文件按方式查看按方式查看按方式查看選擇接收數(shù)據(jù)的方式OnButton7()OnButton6()OnButton5()OnButton4()OnComm()Display()OnPaint()OnComselect()
3、,OnComspeed()打開(kāi)以前的數(shù)據(jù)文件查看以前的數(shù)據(jù)OnComm()發(fā)送到串口來(lái)的數(shù)據(jù)3、 串口程序設(shè)計(jì)/文件 commDlg.cpp/一個(gè)類(lèi),對(duì)話(huà)框類(lèi),本程序使用的是對(duì)話(huà)框形式,這個(gè)類(lèi)是在VC用MFC自動(dòng)生成的,其中包括了對(duì)話(huà)框程序應(yīng)有的一些方法class CAboutDlg : public CDialog;/*以下的個(gè)方法也是VC的MFC的對(duì)話(huà)框程序固有的,也是MFC自動(dòng)生成的*/CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX)BEGIN_M
4、ESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()CCommDlg:CCommDlg(CWnd* pParent /*=NULL*/): CDialog(CCommDlg:IDD, pParent)void CCommDlg:DoDataExchange(CDataExchange* pDX)/下面這個(gè)包括的是界面中的組件BEGIN_MESSAGE_MAP(CCommDlg, CDialog)END_MESSAGE_MAP()/ CCommDlg message handlersBOOL CCommDlg:OnInitDialog()void CCo
5、mmDlg:OnSysCommand(UINT nID, LPARAM lParam)/ The system calls this to obtain the cursor to display while the user drags the minimized window.HCURSOR CCommDlg:OnQueryDragIcon()BEGIN_EVENTSINK_MAP(CCommDlg, CDialog)END_EVENTSINK_MAP()/*以上的個(gè)方法也是VC的MFC的對(duì)話(huà)框程序固有的,也是MFC自動(dòng)生成的*/*我在做這個(gè)程序時(shí)以上的程序并沒(méi)有手動(dòng)修改*/ 畫(huà)圖函數(shù)/
6、算法:運(yùn)用LineTo函數(shù)把120個(gè)點(diǎn)連成折線void CCommDlg:OnPaint() /對(duì)串口數(shù)據(jù)的處理,包括接收,保存等void CCommDlg:OnComm() /開(kāi)串口程序void CCommDlg:OnButton1() /清除編輯框內(nèi)容程序void CCommDlg:OnButton2() /選擇那一個(gè)串口程序void CCommDlg:OnComselect() /選擇波特率void CCommDlg:OnComspeed() /停止/繼續(xù)程序void CCommDlg:OnStoprecv()/對(duì)數(shù)據(jù)顯示前的處理:將新數(shù)年據(jù)加到左邊,原來(lái)的右移一位void CCommD
7、lg:Display()/以下四個(gè)函數(shù)是查看原來(lái)數(shù)據(jù)的程序/按鈕 程序void CCommDlg:OnButton4() /按鈕 程序void CCommDlg:OnButton5() /按鈕 程序void CCommDlg:OnButton7() /此函數(shù)用來(lái)查看最后一屏數(shù)據(jù)void CCommDlg:OnButton8() 對(duì)于其它的文件中的程序我沒(méi)有手動(dòng)修改,均為MFC自動(dòng)生成,我在這就不作詳細(xì)介紹了.共有4個(gè)程序文件,5個(gè)頭文件comm.cppcommDlg.cppmscomm.cppStdAfx.cppcomm.hcommDlg.hmscomm.hResource.hStdAfs.h
8、 源 碼 愛(ài) 好 者 提供源碼發(fā)布與下載 互助、分享、提高 田遠(yuǎn)馳 4、 數(shù)據(jù)采集實(shí)時(shí)顯示程序設(shè)計(jì)1、串口控件使用說(shuō)明本程序使用VC6.0的通用串口控件MSCOMM32.OCX來(lái)對(duì)發(fā)送到串口的數(shù)據(jù)進(jìn)行采集處理。主要使用方法串口設(shè)置:m_Comm.SetSettings(“波特率,校驗(yàn)方式,數(shù)據(jù)位數(shù),停止位數(shù)”)取串口數(shù)據(jù):m_Comm.GetInput()你只首先要確定一個(gè)mscomm32.ocx控件在system目錄下并且該控件已經(jīng)被windows注冊(cè),本程序才能正常運(yùn)行。2、串口數(shù)據(jù)的獲取if(m_Comm.GetComm
9、Event()=2)/判斷接收緩沖區(qū)內(nèi)有無(wú)數(shù)據(jù)m_input1=m_Comm.GetInput();/讀取緩沖區(qū)內(nèi)的數(shù)據(jù)m_input2.GetOneDimSize();/確定數(shù)據(jù)長(zhǎng)度m_input2.GetElement(&i,data+i);/將數(shù)據(jù)轉(zhuǎn)換為BYTE型數(shù)組由于直接獲取的數(shù)據(jù)為VARIANT型數(shù)據(jù),我們?cè)偻ㄟ^(guò)數(shù)據(jù)類(lèi)型轉(zhuǎn)換來(lái)變?yōu)槲覀兯臄?shù)據(jù)類(lèi)型INT和CString型。3、整數(shù)位與小數(shù)位的處理為了提高精度,對(duì)數(shù)據(jù)采用兩位整數(shù),一位小數(shù)年的方式,在發(fā)送數(shù)據(jù)時(shí),最前一個(gè)字節(jié)為FF起始位,接著的一個(gè)字節(jié)為整數(shù)部分,再接著發(fā)一個(gè)字節(jié)的數(shù)據(jù)為小數(shù)部分。取數(shù)算法如下:BYTE a=* (c
10、har *)(data+i)BYTE b=* (char *)(data+(+i)float c=(float)a+(float)(b%10)/104、畫(huà)圖原理我畫(huà)圖使用的是畫(huà)直線的方式(LineTo()),先定義一個(gè)全局變量用來(lái)保存采集的數(shù)據(jù)值,在畫(huà)圖函數(shù)OnPaint()中用這個(gè)全局變量來(lái)作為縱坐標(biāo),等分的120個(gè)點(diǎn)作為橫坐標(biāo),那么就有120個(gè)點(diǎn),最后用直線將這120個(gè)點(diǎn)連接起來(lái)就組成了一個(gè)完整的曲線圖。只要當(dāng)全局變量中的數(shù)值發(fā)生變化后就使用函數(shù)this-Invalidate()強(qiáng)制重載OnPaint()函數(shù),那么數(shù)據(jù)圖就可以動(dòng)起來(lái)了。OnPaint()畫(huà)圖函數(shù)如下:void CCommD
11、lg:Display()if (NextTime = 600 & stop=FALSE)LineHightNextTime/5 = LineHight121; /中保存的是最新采集的一個(gè)數(shù)據(jù)elsefor (int i=0;iInvalidate();return;5、查看以前的數(shù)據(jù)查看以前的數(shù)據(jù)的方法是,將數(shù)據(jù)從文件中取出并將每一個(gè)數(shù)據(jù)都付給那一個(gè)全局變量,最后同樣用this-Invalidate()就能顯示以前的數(shù)據(jù)了。具體算法見(jiàn)commDlg.cpp文件中的OnButton4()和OnButton5()函數(shù)。按秒移動(dòng)查看以前數(shù)據(jù)算法見(jiàn)OnButton6()和OnButton7()。voi
12、d CCommDlg:OnButton7() if (stop=FALSE)gogo=NextTime;DTemp=m_ReceiveData;for (int i =0;i=600 & NextTimeinstr.GetLength()-600) NextTime=instr.GetLength()-600;for (i=0;iInvalidate();/更新圖相在移動(dòng)數(shù)據(jù)以前要對(duì)當(dāng)前顯示的數(shù)據(jù)進(jìn)行保存:gogo=NextTime;DTemp=m_ReceiveData;for (int i =0;i120;i+) LHTempi=LineHighti;以便在繼續(xù)接收時(shí)能接著原來(lái)的。6、數(shù)據(jù)
13、保存方式對(duì)采集的數(shù)據(jù)采用文本方式保存于一文件中,保存格式為,第120數(shù)據(jù)保存一次,數(shù)據(jù)采用推算法來(lái)確定時(shí)間。如:08.9 33.5 08.8 65.4 09.8 09.3程序算法為:if (file.Open(FilePath,CFile:modeCreate|CFile:modeReadWrite)file.Write(m_ReceiveData,600);/寫(xiě)入120個(gè)數(shù)據(jù)file.Close();完整算法見(jiàn):OnComm()7、通用性為了提高程序的通用性,串口的波特率,串口號(hào)都采用下拉選擇的方式,在使用中可跟據(jù)情況選擇。 源 碼 愛(ài) 好 者 提供源碼發(fā)布與下載 http:/www.code
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度鋼結(jié)構(gòu)工程裝配式建筑產(chǎn)業(yè)政策研究與咨詢(xún)合同
- 2025年度購(gòu)房貸款擔(dān)保服務(wù)協(xié)議書(shū)
- 2025年度股東變更及二零二五年度股權(quán)轉(zhuǎn)讓與客戶(hù)關(guān)系維護(hù)協(xié)議
- 二零二五年度酒吧連鎖店加盟經(jīng)營(yíng)合同
- 二零二五年度網(wǎng)絡(luò)安全公司員工解除勞動(dòng)合同標(biāo)準(zhǔn)模板
- 二零二五年度私人房產(chǎn)買(mǎi)賣(mài)與房產(chǎn)交易全程顧問(wèn)服務(wù)合同
- 2024藥店連鎖品牌店員勞動(dòng)合同范本3篇
- 2025版土地資源整合與開(kāi)發(fā)合同協(xié)議書(shū)范本3篇
- 二零二五版民營(yíng)醫(yī)院科研合作與成果轉(zhuǎn)化合同4篇
- 2025版圖書(shū)批發(fā)市場(chǎng)加盟與銷(xiāo)售合作協(xié)議3篇
- 2024年高考語(yǔ)文備考之??甲骷易髌罚ㄏ拢褐袊?guó)現(xiàn)當(dāng)代、外國(guó)
- 《裝配式蒸壓加氣混凝土外墻板保溫系統(tǒng)構(gòu)造》中
- T-CSTM 01124-2024 油氣管道工程用工廠預(yù)制袖管三通
- 2019版新人教版高中英語(yǔ)必修+選擇性必修共7冊(cè)詞匯表匯總(帶音標(biāo))
- 新譯林版高中英語(yǔ)必修二全冊(cè)短語(yǔ)匯總
- 基于自適應(yīng)神經(jīng)網(wǎng)絡(luò)模糊推理系統(tǒng)的游客規(guī)模預(yù)測(cè)研究
- 河道保潔服務(wù)投標(biāo)方案(完整技術(shù)標(biāo))
- 品管圈(QCC)案例-縮短接臺(tái)手術(shù)送手術(shù)時(shí)間
- 精神科病程記錄
- 閱讀理解特訓(xùn)卷-英語(yǔ)四年級(jí)上冊(cè)譯林版三起含答案
- 清華大學(xué)考博英語(yǔ)歷年真題詳解
評(píng)論
0/150
提交評(píng)論