找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6085|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于MATLAB實(shí)時(shí)串口數(shù)據(jù)采集與曲線顯示設(shè)計(jì)論文

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:376039 發(fā)表于 2018-7-20 17:32 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
最近在做一個(gè)傳感器和51單片機(jī)結(jié)合采集動(dòng)態(tài)數(shù)據(jù)并實(shí)時(shí)作圖的項(xiàng)目,收集到關(guān)于串口數(shù)據(jù)采集的資料。
基于MATLAB實(shí)時(shí)串口數(shù)據(jù)采集與曲線顯示
REAL-TIME SERIAL DATA ACQUISITION AND FIGURE SHOW BASED ON MATLAB
目錄


    摘要1
關(guān)鍵詞1
1前言2
1.1 Matlab實(shí)時(shí)串口數(shù)據(jù)采集研究現(xiàn)狀及發(fā)展趨勢(shì)2
1.2研究的目的和意義4
1.3論文的組織結(jié)構(gòu)5
    2 Matlab下實(shí)時(shí)串口數(shù)據(jù)采集概要5
2.1 Matlab的Serial類5
2.2 數(shù)據(jù)采集6
2.3曲線顯示7
3實(shí)時(shí)串口數(shù)據(jù)采集與曲線顯示的實(shí)現(xiàn)8
3.1實(shí)時(shí)串口通信的實(shí)現(xiàn)8
3.2數(shù)據(jù)采集的實(shí)現(xiàn)9
3.3曲線顯示GUI的實(shí)現(xiàn)10
4基于MATLAB的實(shí)時(shí)串口數(shù)據(jù)采集與曲線顯示的具體做法12
4.1數(shù)據(jù)采集的一般流程12
4.1.1創(chuàng)建接口對(duì)象并設(shè)置屬性12
4.1.2打開串口設(shè)備對(duì)象12
4.1.3讀寫串口操作13
4.1.4關(guān)閉并清除設(shè)備對(duì)象13
4.2基于Matlab中斷方式的實(shí)時(shí)串行通信編程13
4.3繪制采集數(shù)據(jù)的曲線波形和數(shù)據(jù)顯示14
4.3.1繪制曲線波形14
4.3.2數(shù)據(jù)顯示15
4.3.3采集圖像15
4.4擴(kuò)展功能——發(fā)送數(shù)據(jù)17
    5結(jié)論17
    參考文獻(xiàn) 18
    致謝19
附錄19
附錄120

摘  要:數(shù)據(jù)采集是獲取信息的基本手段,數(shù)據(jù)采集技術(shù)作為信息科學(xué)的一個(gè)重要分支,它研究信息數(shù)據(jù)的采集、存儲(chǔ)、處理及控制等作業(yè),具有很強(qiáng)的實(shí)用性,與傳感器、信號(hào)測(cè)量與處理、微型計(jì)算機(jī)等技術(shù)為基礎(chǔ)而形成的一門綜合應(yīng)用技術(shù)。本設(shè)計(jì)是在Matlab R2008a版本中以串口通信實(shí)時(shí)接收目標(biāo)系統(tǒng)數(shù)據(jù),將采集的數(shù)據(jù)進(jìn)行時(shí)間同步和字對(duì)齊處理,并在MATLAB的數(shù)據(jù)采集工具箱支持下,利用圖形界面GUI的設(shè)計(jì),直觀的實(shí)時(shí)顯示數(shù)據(jù)曲線。設(shè)計(jì)得重點(diǎn)在于在Matlab上實(shí)現(xiàn)串口數(shù)據(jù)同步采集與處理,接收數(shù)據(jù)的時(shí)間同步和字對(duì)齊,同時(shí)擴(kuò)展了發(fā)送數(shù)據(jù)的功能。

  • 前言
    • MATLAB實(shí)時(shí)串口數(shù)據(jù)采集研究現(xiàn)狀及發(fā)展趨勢(shì)
隨著科學(xué)技術(shù)的發(fā)展,數(shù)據(jù)采集系統(tǒng)得到了越來越廣泛得應(yīng)用,同時(shí)人們對(duì)數(shù)據(jù)采集系統(tǒng)的各項(xiàng)技術(shù)指標(biāo),如:采樣率、線性度、精度、輸入范圍、控制方法以及抗干擾能力等提出了越來越高的要求,特別是精度和采樣率更是使用者和設(shè)計(jì)者所共同關(guān)注的重要問題,于是,高速及超高速數(shù)據(jù)采集系統(tǒng)應(yīng)運(yùn)而生并且得到了快速發(fā)展。今天,數(shù)據(jù)采集技術(shù)己經(jīng)在雷達(dá)、水聲、振動(dòng)工程、無損監(jiān)測(cè)、智能儀器、自動(dòng)控制以及生物工程等眾多領(lǐng)域得到廣泛的應(yīng)用并且收到了良好的效果。高速數(shù)據(jù)采集系統(tǒng)在國防、航天、邊緣科學(xué)研究中及國民經(jīng)濟(jì)的各個(gè)領(lǐng)域的成功的應(yīng)用,進(jìn)一步引起了各方的關(guān)注,推動(dòng)了它的研制和發(fā)展。隨著科學(xué)技術(shù)的發(fā)展,數(shù)據(jù)采集系統(tǒng)得到了越來越廣泛的應(yīng)用。目前,國外很多公司與廠商都投入巨資進(jìn)行數(shù)據(jù)采集系統(tǒng)的研制開發(fā)與生產(chǎn)銷售,其中比較著名的有 NEFF, NI、HP,TEK 等。
從數(shù)據(jù)采集系統(tǒng)產(chǎn)品來看,各大公司提供的系列產(chǎn)品都包括了完成數(shù)據(jù)采集的諸如信號(hào)放大、濾波、多路開關(guān)、模數(shù)轉(zhuǎn)換和接口等各種模塊,F(xiàn)有的高速數(shù)據(jù)采集器件和開發(fā)的產(chǎn)品中,目前還沒有完全實(shí)現(xiàn)高速、高分辨率。在雷達(dá)、通信、譜分析、瞬態(tài)分析、等應(yīng)用領(lǐng)域,為滿足實(shí)時(shí)檢測(cè)和高速采集的日益更新的需要,實(shí)現(xiàn)數(shù)據(jù)采集的高速、高分辨率已成為數(shù)據(jù)采集系統(tǒng)的一個(gè)發(fā)展方向。現(xiàn)有的高速 ADC 器件和產(chǎn)品價(jià)格都比較昂貴,有些高速、高分辨率的器件本身還存在著不穩(wěn)定性,因此,在數(shù)據(jù)采集系統(tǒng)向高速、高分辨率發(fā)展的同時(shí),開發(fā)和研制的器件和產(chǎn)品應(yīng)不斷地提高可靠性,降低,提高性價(jià)比,以便使之得到更廣泛的應(yīng)用。
數(shù)據(jù)采集與分析一直是生產(chǎn)實(shí)踐研究與應(yīng)用領(lǐng)域的一個(gè)熱點(diǎn)和難點(diǎn)。隨著微制造工藝水平的飛速提高及數(shù)據(jù)分析理論的進(jìn)一步完善與成熟,目前國內(nèi)外對(duì)數(shù)據(jù)采集系統(tǒng)的高性能方面的研究上取得了很大的成就。就 A/D 轉(zhuǎn)換的精度、速度和通道數(shù)來說,采樣通道從單通道發(fā)展到雙通道、多通道,采樣頻率、分辨率、精度逐步提高,為分析功能的加強(qiáng)提供了前提條件。而在數(shù)據(jù)分析的微處理器上,最初的數(shù)據(jù)采集系統(tǒng)以 8 位單片機(jī)為核心,隨著微電子技術(shù)的不斷發(fā)展,新興單片機(jī)的不斷問世,十六位、三十二位單片機(jī)也為數(shù)據(jù)采集系統(tǒng)研制廠家所采用,近年來采用具有 DSP 功能的數(shù)據(jù)采集系統(tǒng)也己投入市場(chǎng)。同時(shí),通用 PC 機(jī)的 CPU 用于數(shù)據(jù)處理也較為常見?傊,伴隨著高性能微處理器的采用和用戶技術(shù)要求的不斷提高,數(shù)據(jù)采集系統(tǒng)的功能也越來越完善。
數(shù)據(jù)采集系統(tǒng)的發(fā)展主要體現(xiàn)在以下幾個(gè)趨勢(shì):
首先,在專業(yè)測(cè)控方面,基于 PC 計(jì)算機(jī)的數(shù)據(jù)采集系統(tǒng)越來越成熟和智能化。在過去的二十年中,開放式架構(gòu) PC 機(jī)的處理能力平均每十八個(gè)月就增強(qiáng)一倍。為了充分利用處理器速度的發(fā)展,現(xiàn)代開放式測(cè)量平臺(tái)結(jié)合了高速總線接口,如 PCI和 PXI/Compact PCI,以便獲得性能的進(jìn)一步提升。計(jì)算機(jī)的性能提升和由此引起的基于計(jì)算機(jī)的測(cè)量技術(shù)的創(chuàng)新,正在持續(xù)不斷地模糊傳統(tǒng)儀器和基于計(jì)算機(jī)的測(cè)量儀器之間的界線。
其次,在通用測(cè)控方面,采用嵌入式微處理器的方案也由早期的采用 A/D 器件和標(biāo)準(zhǔn)單片機(jī)組成應(yīng)用系統(tǒng)發(fā)展到在單芯片上實(shí)現(xiàn)完整的數(shù)據(jù)采集與分析,即目前極為熱門的 SOC (System On Chip)。通常在一塊芯片上會(huì)集成一個(gè),可以采樣多路模擬信號(hào)的 A/D 轉(zhuǎn)換子系統(tǒng)和一個(gè)硬CPU 核(比如增強(qiáng)型 80_52 內(nèi)核),而且其CPU 的運(yùn)算處理速度和性能也較早期的標(biāo)準(zhǔn) CPU 內(nèi)核提高了數(shù)倍,而且有著極低的功耗。這種單芯片解決方案降低了系統(tǒng)的成本和設(shè)計(jì)的復(fù)雜性。
此外,為了解決 SOC 方案中數(shù)據(jù)處理性能的不足,采用 DSP 作為數(shù)據(jù)采集系統(tǒng)的 CPU 的研究與應(yīng)用目前也逐漸引起業(yè)內(nèi)重視。但是這類產(chǎn)品目前僅僅處于發(fā)展的初級(jí)階段,在精度、速度或其它性能指標(biāo)上并不能很好的滿足要求。因此,國內(nèi)外以 DSP 作為數(shù)據(jù)采集系統(tǒng)的采樣控制和分析運(yùn)算的研究與應(yīng)用正在展開。
近年來隨著芯片技術(shù)、計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)的發(fā)展,數(shù)據(jù)采集技術(shù)取得了許多新的技術(shù)成果,市場(chǎng)上推出了繁多的新產(chǎn)品。高速數(shù)據(jù)采集技術(shù)的發(fā)展一方面是提高采集速率,另一方面不斷向兩端延伸。一端是輸入的信號(hào)調(diào)理,另一端是采集后的數(shù)字化信號(hào)的實(shí)時(shí)處理與事后處理。20世紀(jì)90年代末,隨著數(shù)字技術(shù)快速發(fā)展,數(shù)據(jù)采集技術(shù)已向著并行、高速、大量存儲(chǔ)、實(shí)時(shí)分析處理、集成化等方向發(fā)展。
Matlab是Mathworks公司推出的一套高性能數(shù)值計(jì)算和可視化軟件,是目前控制系統(tǒng)數(shù)據(jù)處理較為實(shí)用有效的工具。它不僅能解決測(cè)試與控制系統(tǒng)中存在的大量的數(shù)值計(jì)算和矩陣運(yùn)算,而且將圖像與圖形、顯示及處理、圖形界面設(shè)計(jì)集于一身。同時(shí),它還提供了強(qiáng)有力的工具箱支持,極大地方便了研究人員的學(xué)習(xí)與開發(fā)。軟件開發(fā)采用Matlab語言編程,利用Matlab中控制工具箱及仿真工具混合開發(fā)的方法,使其編寫的程序更精練,軟件功能更強(qiáng)大,開發(fā)周期更短,軟件形式靈活、易于擴(kuò)展,用戶使用起來更容易、更方便。因此,許多工程技術(shù)人員把Matlab軟件作為數(shù)據(jù)離線處理的工具。
業(yè)內(nèi)領(lǐng)先的工具箱極大的擴(kuò)展了Matlab的應(yīng)用領(lǐng)域,所以Matlab自推出以來就受到廣泛的關(guān)注,數(shù)據(jù)采集工具箱就是其中之一。它是為簡化和加快數(shù)據(jù)采集工作而設(shè)計(jì)的,使用該工具箱更容易將實(shí)驗(yàn)測(cè)量得到的數(shù)據(jù)進(jìn)行分析和可視化操作。利用該數(shù)據(jù)采集工具箱可以方便地建立數(shù)據(jù)采集系統(tǒng)。通過建立一個(gè)串口接口對(duì)象,可以使用 Matlab命令直接和外部設(shè)備進(jìn)行通信。
1.2 研究的目的和意義
在近幾十年來 IC 技術(shù)和技術(shù)的高速發(fā)展,為數(shù)據(jù)采集與分析提供了非常良好與可靠的科學(xué)技術(shù)基礎(chǔ),也提出了更高的要求和強(qiáng)有力的推動(dòng)。隨著現(xiàn)代工業(yè)技術(shù)的迅猛發(fā)展,生產(chǎn)規(guī)模的不斷壯大,生產(chǎn)過程和制作工藝的日趨復(fù)雜,對(duì)自動(dòng)測(cè)試和各種信息集成的要求也就越來越高。在當(dāng)今社會(huì)各個(gè)領(lǐng)域,包括科研和實(shí)驗(yàn)研究,數(shù)據(jù)采集系統(tǒng)有著不可代替的作用,數(shù)據(jù)采集和處理進(jìn)行得越及時(shí),工作效率就越高,取得的經(jīng)濟(jì)效益就越大。數(shù)據(jù)采集系統(tǒng)性能的好壞主要取決于它的精度和速度,在保證精度的條件下,還要盡可能地提高采樣速度,以滿足實(shí)時(shí)采集、實(shí)時(shí)處理和實(shí)時(shí)控制的要求。
數(shù)據(jù)采集系統(tǒng)的好壞將直接影響自動(dòng)測(cè)試系統(tǒng)的可靠性和穩(wěn)定性,為了滿足不同的測(cè)試需求,以及減少對(duì)資源的浪費(fèi),在系統(tǒng)的設(shè)計(jì)上應(yīng)該盡量滿足通用性和可擴(kuò)展性。在高度發(fā)展的當(dāng)今中,科學(xué)技術(shù)的突飛猛進(jìn)和生產(chǎn)過程的高度自動(dòng)化已成為人所共知的必然趨勢(shì),而它們的共同要求是必須建立在有著不斷發(fā)展與提高的信息工業(yè)基礎(chǔ)上。人們只有從外界獲取大量準(zhǔn)確、可靠的信息經(jīng)過一系列的科學(xué)分析、處理、加工與判斷,進(jìn)而認(rèn)識(shí)和掌握自然界與科學(xué)技術(shù)中的各種現(xiàn)象與其相關(guān)的變化規(guī)律,并通過相應(yīng)的系統(tǒng)和方法實(shí)現(xiàn)科學(xué)實(shí)驗(yàn)研究與生產(chǎn)過程的高度自動(dòng)化。換言之,生產(chǎn)過程的自動(dòng)化面臨的第一個(gè)問題就是必須根據(jù)從各種傳感器得到的數(shù)據(jù)來檢測(cè)、監(jiān)視現(xiàn)場(chǎng),以保證現(xiàn)場(chǎng)設(shè)備的正常工作。所以對(duì)現(xiàn)場(chǎng)進(jìn)行數(shù)據(jù)采集是重要的前期基礎(chǔ)工作,然后再對(duì)現(xiàn)場(chǎng)數(shù)據(jù)進(jìn)行傳輸和相應(yīng)的處理工作,以滿足不同的需要。
如果要對(duì)大量的實(shí)驗(yàn)數(shù)據(jù)利用Matlab的數(shù)據(jù)分析處理功能進(jìn)行處理,則首先要將實(shí)驗(yàn)數(shù)據(jù)轉(zhuǎn)換成Matlab的數(shù)據(jù)格式,這無疑是一件十分繁雜的任務(wù)。若能直接從Matlab環(huán)境下采集實(shí)驗(yàn)數(shù)據(jù),無疑對(duì)與實(shí)驗(yàn)分析和數(shù)據(jù)處理都是有益的。Matlab(Version 7.0)的數(shù)據(jù)采集箱DAQ (Data Acquisition Toolbox) 為此提供一個(gè)實(shí)現(xiàn)直接數(shù)據(jù)采集的平臺(tái)。利用該工具箱配以適當(dāng)?shù)臄?shù)據(jù)采集卡不僅可以進(jìn)行實(shí)時(shí)數(shù)據(jù)采集,而且還可以進(jìn)行實(shí)時(shí)顯示和控制,由此還可以組建成為自動(dòng)測(cè)試分析系統(tǒng)。利用該數(shù)據(jù)采集工具箱可以方便地建立數(shù)據(jù)采集系統(tǒng)。
基于MATLAB實(shí)時(shí)串口數(shù)據(jù)采集,將采集的數(shù)據(jù)進(jìn)行時(shí)間同步和字對(duì)齊處理,并在Matlab的工具箱支持下實(shí)時(shí)顯示數(shù)據(jù)曲線,具有重要的意義。
1.3 論文的組織結(jié)構(gòu)
摘要。闡述了此次設(shè)計(jì)的總思路,利用MATLAB接收目標(biāo)系統(tǒng)串口通信實(shí)時(shí)數(shù)據(jù),將采集的數(shù)據(jù)進(jìn)行時(shí)間同步和字對(duì)齊處理,并在MATLAB的工具箱支持下實(shí)時(shí)顯示數(shù)據(jù)曲線。
1.前言。介紹了MATLAB實(shí)時(shí)串口數(shù)據(jù)采集的研究現(xiàn)狀及發(fā)展趨勢(shì)、研究的目的和意義,說明了此設(shè)計(jì)的實(shí)用價(jià)值。
2.MATLAB實(shí)時(shí)串口數(shù)據(jù)采集概要。對(duì)此設(shè)計(jì)中的理論知識(shí)進(jìn)行概述,是設(shè)計(jì)過程中所需要的理論和條件支撐,以便設(shè)計(jì)的順利進(jìn)行。
3.實(shí)時(shí)串口數(shù)據(jù)的采集與曲線顯示的實(shí)現(xiàn)。大致描述了該設(shè)計(jì)的設(shè)計(jì)與實(shí)現(xiàn)方法,是設(shè)計(jì)過程中所需要的實(shí)踐環(huán)節(jié)。
4. 基于MATLAB的實(shí)時(shí)串口數(shù)據(jù)采集與曲線顯示的具體做法。詳細(xì)的給出了完成此次設(shè)計(jì)的思路和具體做法。
有了正確的過程,便會(huì)得出結(jié)論,結(jié)論部分即是對(duì)此次設(shè)計(jì)結(jié)果的一個(gè)說明。本文總的來說是按照從抽象的概念描述到具體實(shí)現(xiàn)方法步驟的寫作思路來完成的。
  • Matlab實(shí)時(shí)串口數(shù)據(jù)采集概要
2.1 Matlab的 serial類
串行接口(Serial Interface)簡稱串口,也稱串行通信接口(通常指COM接口),是采用串行通信方式的擴(kuò)展接口。串口的出現(xiàn)是在1980年前后,數(shù)據(jù)傳輸率是115kbps~230kbps。串口出現(xiàn)的初期是為了實(shí)現(xiàn)連接計(jì)算機(jī)外設(shè)的目的,初期串口一般用來連接鼠標(biāo)和外置Modem及老式攝像頭和寫字板等設(shè)備。串口也可以應(yīng)用于由于兩臺(tái)計(jì)算機(jī)(或設(shè)備)之間的互聯(lián)及數(shù)據(jù)傳輸。
串行接口是指數(shù)據(jù)一位一位地順序傳送,其特點(diǎn)是通信線路簡單,只要一對(duì)傳輸線就可以實(shí)現(xiàn)雙向通信,并可以利用電話線,從而大大降低了成本,特別適用于遠(yuǎn)距離通信,但傳送速度較慢。由于串口(COM)不支持熱插拔及傳輸速率較低目前部分新主板和大部分便攜電腦已開始取消該接口,目前串口多用于工控和測(cè)量設(shè)備以及部分通信設(shè)備中。
自Matlab6.0版本起,Mathworks 公司在軟件中增加了Instrument Control Toolbox,提供了對(duì)串口通信的正式支持。利用該工具箱的serial 及其相關(guān)函數(shù),能可靠地進(jìn)行串行通信。
儀器控制工具箱serial類的主要特點(diǎn)如下:
(1)支持基于GPIB 總線(IEEE-488、HPIB 標(biāo)準(zhǔn))、VISA 總線、串行接口(RS-232、RS-422、RS-485)的通信標(biāo)準(zhǔn);
(2)支持二進(jìn)制和文本(ASCII)兩種數(shù)據(jù)的通信,文本方式支持(standard commands for programmable instruments)語言;
(3)支持異步通信和同步通信;
(4)支持基于事件驅(qū)動(dòng)的通信。
2.2 數(shù)據(jù)采集
    數(shù)據(jù)(Data)也稱觀測(cè)值,是實(shí)驗(yàn)、測(cè)量、觀察、等的結(jié)果,常以數(shù)量的形式給出。數(shù)據(jù)采集(Data Acquisition),又稱數(shù)據(jù)獲取,就是將被測(cè)對(duì)象(外部世界、現(xiàn)場(chǎng))的各種參量(可以是量,也可以是化學(xué)量、生物量等)通過各種傳感元件作適當(dāng)轉(zhuǎn)換后,再經(jīng)信號(hào)調(diào)理、采樣、量化、編碼、傳輸?shù)炔襟E,最后把系統(tǒng)需要的所有對(duì)象的原始數(shù)據(jù)收集、歸類、整理、錄入到系統(tǒng)當(dāng)中去,是管理系統(tǒng)使用前的一個(gè)數(shù)據(jù)初始化過程。數(shù)據(jù)采集技術(shù)廣泛應(yīng)用在信號(hào)檢測(cè)、信號(hào)處理、儀器儀表等領(lǐng)域,比如攝像頭,麥克風(fēng),都是數(shù)據(jù)采集工具,隨著數(shù)字化技術(shù)的不斷發(fā)展,數(shù)據(jù)采集技術(shù)也呈現(xiàn)出速度更高、通道更多、數(shù)據(jù)量更大的發(fā)展態(tài)勢(shì)。
被采集數(shù)據(jù)是已被轉(zhuǎn)換為電訊號(hào)的各種物理量,如溫度、水位、風(fēng)速、壓力等,可以是模擬量,也可以是數(shù)字量。采集一般是采樣方式,即隔一定的時(shí)間(稱采樣周期)對(duì)同一點(diǎn)數(shù)據(jù)重復(fù)采集。采集的數(shù)據(jù)大多是瞬時(shí)值,也可是某段時(shí)間內(nèi)的一個(gè)特征值。準(zhǔn)確的數(shù)據(jù)測(cè)量是數(shù)據(jù)采集的基礎(chǔ)。數(shù)據(jù)測(cè)量方法有接觸式和非接觸式,檢測(cè)元件多種多樣。不論哪種方法和元件,都以不影響被測(cè)對(duì)象狀態(tài)和測(cè)量為前提,以保證數(shù)據(jù)的正確性。數(shù)據(jù)采集含義很廣,包括對(duì)連續(xù)物理量的采集。在計(jì)算機(jī)輔助制圖、測(cè)圖、設(shè)計(jì)中,對(duì)圖形或圖像數(shù)字化過程也可稱為數(shù)據(jù)采集,此時(shí)被采集的是幾何量數(shù)據(jù)。
數(shù)據(jù)采集系統(tǒng)是一種應(yīng)用極為廣泛的模擬量測(cè)量設(shè)備,其基本任務(wù)是把信號(hào)送入計(jì)算機(jī)或相應(yīng)的信號(hào)處理系統(tǒng),根據(jù)不同的需要進(jìn)行相應(yīng)的計(jì)算和處理。它將模擬量采集、轉(zhuǎn)換成數(shù)字量后,再經(jīng)過計(jì)算機(jī)處理得出所需的數(shù)據(jù)。同時(shí),還可以用計(jì)算機(jī)將得到的數(shù)據(jù)進(jìn)行儲(chǔ)存、顯示和打印,以實(shí)現(xiàn)對(duì)某些物理量的監(jiān)視,其中一部分?jǐn)?shù)據(jù)還將被用作生產(chǎn)過程中的反饋控制量。
在數(shù)據(jù)采集中,一般將待測(cè)對(duì)象的信號(hào)通過傳感器和A/D轉(zhuǎn)換器或其它專業(yè)測(cè)試儀器(如TDS3000系列數(shù)字式示波器),把數(shù)據(jù)傳到計(jì)算機(jī)。編制計(jì)算機(jī)與測(cè)試儀器的接口程序可使用C++ Builder、VB等編程語言。數(shù)據(jù)采集到計(jì)算機(jī)后要進(jìn)行各種處理。如FFT、各種方法的濾波、系統(tǒng)辨識(shí)、小波變換等,由于Matlab提供功能強(qiáng)大的各種計(jì)算,使用幾個(gè)簡單語句就能實(shí)現(xiàn),因此采用Matlab編程語言非常適合。
Matlab自帶的數(shù)據(jù)采集工具箱DAQ能更容易地將實(shí)驗(yàn)測(cè)得的數(shù)據(jù)進(jìn)行分析和可視化操作,包括了三個(gè)模塊,其中M-File 函數(shù)是Matlab中可直接調(diào)用的數(shù)據(jù)采集命令函數(shù),通過M-file 函數(shù)傳輸數(shù)據(jù)、參數(shù)和命令給數(shù)據(jù)采集引擎,并可從數(shù)據(jù)采集引擎中查看數(shù)據(jù)采集設(shè)備對(duì)象的狀態(tài)、參數(shù)和抽取數(shù)據(jù),所有的實(shí)時(shí)數(shù)據(jù)采集任務(wù)都通過這些函數(shù)的調(diào)用來實(shí)現(xiàn)。
數(shù)據(jù)采集引擎 (Data Acquisition Engine) 是Matlab環(huán)境下進(jìn)行實(shí)時(shí)數(shù)據(jù)采集的核心。它執(zhí)行M-flie函數(shù)所規(guī)定的功能,并監(jiān)視和控制數(shù)據(jù)采集設(shè)備對(duì)象的狀態(tài),以及存儲(chǔ)和管理所采集的數(shù)據(jù)。一旦實(shí)時(shí)數(shù)據(jù)采集任務(wù)啟動(dòng),它就類似于DOS環(huán)境下后臺(tái)運(yùn)行的監(jiān)控程序,所有的數(shù)據(jù)采集任務(wù)就置于它的監(jiān)控和管理之中。
硬件轉(zhuǎn)接驅(qū)動(dòng)程序 (Hardware Driver Adaptors) 建立采集卡驅(qū)動(dòng)軟件(driver)與數(shù)據(jù)采集引擎之間的數(shù)據(jù)、命令和參數(shù)的傳輸通道,對(duì)于不同的板卡,需要不同的驅(qū)動(dòng)程序,可以是動(dòng)態(tài)鏈接庫文件(*.DLL),也可以是Matlab下的共享庫文件(*.MEX)。
它提供了以下主要的功能:
    1. 以相同的指令操作模擬輸入(AI)、模擬輸出(AO)、數(shù)字輸入輸出(DIO)和同步模擬輸入輸出轉(zhuǎn)換各式功能,不會(huì)因不同硬件而產(chǎn)生不同的指令。
    2. 一個(gè)及時(shí)數(shù)據(jù)采集環(huán)境, 被測(cè)量的數(shù)據(jù)不需經(jīng)由轉(zhuǎn)換可直接進(jìn)入MATLAB 直接進(jìn)行分析。
    3. 支持PC聲卡和主要的數(shù)據(jù)采集卡的廠商, 如:凌華, Agilent, ComputerBoards 和 National Instruments。
    4. 支持事件驅(qū)動(dòng)(Event-driven)的數(shù)據(jù)采集。


    • 曲線顯示
Matlab具有強(qiáng)大的繪圖功能,在Matlab中將采集到的數(shù)據(jù)實(shí)時(shí)顯示出來,可以使用二維曲線繪圖的方法。
Plot函數(shù)是Matlab中最常見的繪圖函數(shù),可以用來繪制單條或多條曲線,它是針對(duì)向量或矩陣的列來繪制曲線的。也就是說使用plot函數(shù)之前,必須首先定義好曲線上每一點(diǎn)的X及Y坐標(biāo),常用的格式有:
plot(x,y)
以向量x、y為軸,繪制曲線。其中x和y為坐標(biāo)向量。
plot(x1,y1,x2,y2…)
繪制多條曲線(也可以用矩陣變量plot(x,y))。
plot(x,y1,x,y2,x,y3…)
其功能是以公共向量x為X軸,分別以y1,y2,y3…為Y軸,在同一幅圖內(nèi)繪制出多條曲線。
plot(x1,y1,LineSpec1,x2,y2,LineSpec2…)
將按順序分別畫出由三參數(shù)Xi,Yi,LineSpeci定義的線條。其中參數(shù)LineSpeci指明了線條的類型,標(biāo)記符號(hào),和畫線用的顏色。
xlabel (‘frequency (Hz)’);             %X軸名稱為frequency(Hz)
ylabel (‘magnitude (dB) ’);            %Y軸名稱為magnitude(dB)
  • 實(shí)時(shí)串口數(shù)據(jù)采集與曲線顯示的設(shè)計(jì)方法
    • 實(shí)時(shí)串口通信的實(shí)現(xiàn)
Matlab7.0支持面向?qū)ο蠹夹g(shù),用一個(gè)對(duì)象把計(jì)算機(jī)串口封裝起來。創(chuàng)建串口對(duì)象后,對(duì)其的操作就是對(duì)串口操作,從而實(shí)現(xiàn)了對(duì)計(jì)算機(jī)串口操作的簡化。因此,使用Matlab7.0平臺(tái),通過計(jì)算機(jī)串口實(shí)現(xiàn)對(duì)專業(yè)測(cè)試儀器的控制以及測(cè)試數(shù)據(jù)的實(shí)時(shí)采集、傳輸、處理和結(jié)果顯示。是十分有效的實(shí)時(shí)數(shù)據(jù)采集與處理方法之一。
Matlab7.0封裝的串口對(duì)象支持對(duì)串口的異步讀寫操作,計(jì)算機(jī)在讀寫串口時(shí)能同時(shí)進(jìn)行其他處理工作,因而使計(jì)算機(jī)具有極高的執(zhí)行效率。Matlab7.0用多線程技術(shù)實(shí)現(xiàn)這種異步操作,通過異步讀寫設(shè)置,計(jì)算機(jī)在執(zhí)行讀寫串口函數(shù)時(shí)能立即退回,不必等待串口把數(shù)據(jù)傳輸完畢。當(dāng)指定的數(shù)據(jù)傳輸結(jié)束時(shí)就觸發(fā)事件,執(zhí)行事件回調(diào)函數(shù)。可以在事件回調(diào)函數(shù)中編程,進(jìn)行數(shù)據(jù)處理,這樣就不會(huì)造成因等待串口傳輸數(shù)據(jù)引起的機(jī)時(shí)浪費(fèi)。
Matlab 串行口對(duì)象屬性。使用 serial 函數(shù)創(chuàng)建串口對(duì)象后,通過對(duì)象句柄操作串口,非常方便。串口對(duì)象有很多屬性,使用如下的命令可以查看串口所有屬性
set(s)  %s 是serial 創(chuàng)建的COM1 串口對(duì)象的標(biāo)識(shí)符
通過定義串口對(duì)象的屬性,就能定義串口的通信模式,也可以了解串口的狀態(tài)。幾個(gè)比較重要的屬性如下:
1. 串口名屬性
Port 定義系統(tǒng)的串口名稱(一般為‘COM 1’到‘COM 7’)
2. 串口通信屬性
BaudRate 定義傳輸波特率(缺省9600bps,可設(shè)為1200,2400,4800,19200bps 等等)
DataBits 定義數(shù)據(jù)幀的比特位數(shù)(一般為7 或8 位)
Parity 定義校驗(yàn)方式(可取值:none、odd、even、mark、space)
StopBits 定義數(shù)據(jù)幀停止位位數(shù)(一般為1、1.5 或2)
Terminator 定義結(jié)束字符(一般為‘LF’)
3. 串口讀數(shù)據(jù)方式
ReadAsyncMode 定義異步讀操作為連續(xù)或手工方式(continuous-連續(xù)方式(缺省),或定義為manual)


    • 數(shù)據(jù)采集的實(shí)現(xiàn)
數(shù)據(jù)采集工具箱集成于MATLAB中,所以在進(jìn)行數(shù)據(jù)采集的同時(shí),可以對(duì)采集的數(shù)據(jù)進(jìn)行實(shí)時(shí)分析,或者存儲(chǔ)后再進(jìn)行處理,或者針對(duì)數(shù)據(jù)分析的需要對(duì)測(cè)試條件的設(shè)立進(jìn)行不斷的更新。應(yīng)用數(shù)據(jù)采集工具箱提供的命令和函數(shù)可以控制任何類型的數(shù)據(jù)采集。DAQ是由一組M-File文件格式的函數(shù)和MEX-File 等動(dòng)態(tài)鏈接庫所組成的, 專門使用在數(shù)據(jù)采集方面的一組函數(shù)庫。如圖1所示,這些組成部分使得Matlab與數(shù)據(jù)采集硬件之間的信息傳遞成為可能。
圖1:數(shù)據(jù)采集引擎與硬件驅(qū)動(dòng)
Fig 1:Data Acquisition Engine and Hardware Driver

將被測(cè)物理量通過傳感器連接到數(shù)據(jù)采集卡,通過采集函數(shù)命令啟動(dòng)數(shù)據(jù)采集任務(wù),在數(shù)據(jù)采集引擎管理下,數(shù)據(jù)將從采集卡流入數(shù)據(jù)引擎,臨時(shí)存儲(chǔ)在內(nèi)存中,以便于數(shù)據(jù)的重寫,數(shù)據(jù)重寫的速度依賴于內(nèi)存的大小、數(shù)據(jù)采樣的速率和采集通道數(shù)。存儲(chǔ)在內(nèi)存中被數(shù)據(jù)采集引擎管理的數(shù)據(jù)并不能自動(dòng)進(jìn)入Matlab工作空間,為了在Matlab工作空間使用這些數(shù)據(jù),必須使用get-data函數(shù)從引擎中抽取。被抽取到Matlab空間的數(shù)據(jù),可以用Matlab中其他工具箱的函數(shù)進(jìn)行進(jìn)一步的分析和處理,也可以直接寫入磁盤文件。
利用數(shù)據(jù)采集工具箱,在Matlab環(huán)境下實(shí)時(shí)數(shù)據(jù)采集的步驟如圖2所示。首先利用命令函數(shù)analoginput創(chuàng)建設(shè)備對(duì)象,并將該設(shè)備對(duì)象賦予一個(gè)Matlab變量,以后對(duì)該設(shè)備對(duì)象的操作就轉(zhuǎn)換為對(duì)該變量操作。當(dāng)設(shè)備對(duì)象建立后,即可用ad-dchannel命令給該設(shè)備按照需要添加數(shù)據(jù)采集通道。一旦采集通道添加完成,就可以用set命令為設(shè)備對(duì)象設(shè)置采集參數(shù),不同的采集卡,具有不同的采集特性參數(shù)。當(dāng)采集參數(shù)設(shè)定后,即可用start命令啟動(dòng)數(shù)據(jù)采集,這時(shí)采集卡的狀態(tài)就置于數(shù)據(jù)采集引擎的管理中,數(shù)據(jù)采集引擎會(huì)自動(dòng)按照設(shè)定的參數(shù)監(jiān)管和響應(yīng)采集卡,并將其所采集的數(shù)據(jù)輸入數(shù)據(jù)引擎管理的內(nèi)存區(qū),通過相應(yīng)的命令可以從Matlab中查看數(shù)據(jù)采集任務(wù)的狀態(tài)和抽取數(shù)據(jù)到Matlab工作空間,并可對(duì)抽取到Matlab工作空間的數(shù)據(jù)進(jìn)行處理分析。當(dāng)采集到數(shù)據(jù)滿足設(shè)定參數(shù)時(shí),采集任務(wù)即告結(jié)束。這時(shí)必須利用delete和clear命令清除設(shè)備對(duì)象,否則,該設(shè)備將會(huì)一直處于采集引擎的監(jiān)管之中,再次創(chuàng)建該設(shè)備對(duì)象時(shí),系統(tǒng)將會(huì)報(bào)告一個(gè)錯(cuò)誤。
圖2:數(shù)據(jù)采集命令流程圖
Fig 2: Command Flow Chart of Data Acquisition
3.3曲線顯示GUI的實(shí)現(xiàn)
利用MATLAB軟件中GUI模塊可以方便地設(shè)計(jì)出基于對(duì)話框的圖形用戶界面,它提供了諸如編輯框、按鈕、滾動(dòng)條等圖形對(duì)象,通過對(duì)這些圖形對(duì)象的有機(jī)組合,再對(duì)相應(yīng)的圖形對(duì)象編寫程序,就可以設(shè)計(jì)出界面友好、操作方便的系統(tǒng)軟件。 在Matlab的命令窗口輸入:guide,就可以進(jìn)入圖形用戶界面的設(shè)計(jì)向?qū)В谙驅(qū)Э刂泼姘逯,鼠?biāo)單擊左邊用戶界面控制對(duì)象面板中所需的按鈕對(duì)象,分別把它們放在圖形窗口中,并且可以通過拖動(dòng)來改變其位置和大小。然后雙擊各個(gè)按鈕對(duì)象,就可以打開其屬性編輯器,拖動(dòng)屬性編輯器右邊的滑塊,改變各個(gè)按鈕對(duì)象屬性,這樣就可以設(shè)計(jì)出對(duì)話框的外觀。設(shè)計(jì)效果圖如圖3所示。
MALTAB的GUI主要有兩個(gè)文件,當(dāng)設(shè)置好GUIDE時(shí)點(diǎn)擊保存,這時(shí)將在當(dāng)前路徑自動(dòng)產(chǎn)生兩個(gè)名字相同的文件,但擴(kuò)展標(biāo)識(shí)符不同,一個(gè)為.fig文件,一個(gè)為.m文件,.fig主要是GUI圖形文件,和GUIDE設(shè)計(jì)的圖像相同,.m文件為程序文件,所有事件響應(yīng)和計(jì)算功能都在這里實(shí)現(xiàn)。
MATLAB在創(chuàng)建每一個(gè)圖形對(duì)象時(shí),都為該對(duì)象分配唯一的一個(gè)值,稱其為圖形對(duì)象句柄(Handle)。句柄是圖形對(duì)象的唯一標(biāo)識(shí)符。在進(jìn)行對(duì)話框設(shè)計(jì)時(shí),要讓對(duì)話框?qū)崿F(xiàn)輸入輸出功能,就要通過其句柄值調(diào)用一些函數(shù)文件,而當(dāng)句柄未知時(shí),可以用標(biāo)識(shí)標(biāo)簽‘Tag’屬性和函數(shù)findobj確定。其方法是通過給期望的圖形對(duì)象提供唯一的‘Tag’屬性字符串,用findobj函數(shù)來查找?guī)Я似谕臉?biāo)識(shí)標(biāo)簽的句柄。
圖3:GUI界面
Fig 3:GUI Interface
MATLAB的按鈕以及各種控件事件響應(yīng)是依靠一種叫做回調(diào)函數(shù)(Callback Function)來實(shí)現(xiàn)的。GUI可以包括兩個(gè)方面:控件和回調(diào)函數(shù)(use interface components & callbacks);回調(diào)函數(shù)間數(shù)據(jù)的傳遞,也就是程序結(jié)構(gòu)的問題。Matlab提供了兩種方法構(gòu)造控件:用uicontrol系列的函數(shù),或者用guide直接添加?丶谢卣{(diào)函數(shù)callback屬性,這實(shí)際上是一個(gè)字符串,包括函數(shù)名和參數(shù),它應(yīng)該是可以在workspace里面執(zhí)行的表達(dá)式或者M(jìn)文件名。
考慮M文件形式的回調(diào)函數(shù),因?yàn)樗枰軌蛟趙orkspace中執(zhí)行,那么它的參數(shù)就必須在workspace中存在,它執(zhí)行的結(jié)果也在workspace中。這樣所有需要的數(shù)據(jù)都必須是全局的,甚至比全局還要糟糕,它可能會(huì)與workspace中其他程序的數(shù)據(jù)沖突。matlab提供了一個(gè)巧妙的途徑:把數(shù)據(jù)跟圖形(.fig文件)聯(lián)系起來。fig上的控件,是以句柄(handles)的形式存在的,handles=guihandles(fig)可以得到fig的所有句柄。matlab是把圖形的數(shù)據(jù)也作為fig的句柄保存起來。
  • 基于MATLAB的實(shí)時(shí)串口數(shù)據(jù)采集與曲線顯示的具體做法
4.1 數(shù)據(jù)采集的一般流程
4.1.1 創(chuàng)建接口對(duì)象并設(shè)置屬性
handles.S=serial(com);  %創(chuàng)建串口對(duì)象
set(handles.S, BaudRate ,9600, StopBits ,1);  %設(shè)置波特率缺省9600bit/s和停止位
set(handles.S, Parity , none,). %設(shè)置無奇偶校驗(yàn)
set(handles.S, FlowControl , none );%無流控制
set(handles.S, DataBits ,8);  %設(shè)置8位數(shù)據(jù)位
set(handles.S, InputBufferSize ,receivelen*10);%設(shè)置緩沖區(qū)大小
設(shè)置串口設(shè)置對(duì)象的屬性也可以用一條指令完成,如:
set(handles.S,'COM3','BaudRate',3600,'Parity','none','DataBits',8,'StopBits',1)
創(chuàng)建了對(duì)象后可以在Matlab命令窗口直接敲對(duì)象名并回車,看到其基本屬性和當(dāng)前狀態(tài),若需要知道其全部的屬性,可以用get(s)命令。
有些屬性只有在對(duì)象沒有被打開時(shí)才能改變其值,如InputBufferSize、OutputBufferSize屬性等。對(duì)于一個(gè)RS-232/RS-422/RS-485串口設(shè)備對(duì)象,其屬性的缺省值為波特率9 600b/s,異步方式,通信數(shù)據(jù)格式為8位數(shù)據(jù)位,無奇偶校驗(yàn)位,1位停止位。如果要設(shè)置的串口設(shè)置對(duì)象的屬性值與缺省值的屬性值相同,可以不用另行設(shè)置。
4.1.2 打開串口設(shè)備對(duì)象
  fopen(handles.s);
4.1.3 讀寫串口操作
初始化并打開串口調(diào)協(xié)對(duì)象之后,現(xiàn)在可以對(duì)串口設(shè)備對(duì)象進(jìn)行讀寫操作,串口的讀寫操作支持二進(jìn)制和文本(ASCII)兩種方式。當(dāng)Matlab通信數(shù)據(jù)采用西方(ASCII)方式時(shí),讀寫串口設(shè)備的命令分別是fscanf、fpritf;當(dāng)Matlab通信數(shù)據(jù)采用二進(jìn)制方式時(shí),讀寫串口設(shè)備的命令分別是fread、fwrite。下面以文本方式讀寫串口為例:
  讀串口。A=fscanf(s,'%d',[10,100]);     %從串口設(shè)備對(duì)象s中讀入10*100個(gè)數(shù)據(jù)填充到數(shù)組A[10,100]中,并以整型的數(shù)據(jù)格式存放。
  寫串口。Fprintf(s,'%s','RS232','async');     %將字符串‘RS232?’以字符的數(shù)據(jù)格式寫入到串口設(shè)備s,寫操作以異步的方式進(jìn)行。
4.1.4 關(guān)閉并清除設(shè)備對(duì)象
  fclose(handles.s);    %關(guān)閉串口設(shè)備對(duì)象
  delete(handles.s);      %刪除內(nèi)存中的串口設(shè)備對(duì)象
  clear handles.s;        %清除工作空間中的串口設(shè)備對(duì)象
  當(dāng)不再使用該串口設(shè)備對(duì)象時(shí),順序使用以上3條命令,可以將所創(chuàng)建的串口對(duì)象對(duì)象清除,以免占用系統(tǒng)資源。
4.2基于Matlab中斷方式的實(shí)時(shí)串行通信編程
  在Matlab環(huán)境下,讀取串口數(shù)據(jù)的方式可以分為兩種—查詢和中斷。以查詢的方式進(jìn)行串行通信時(shí),如下位單片機(jī)有大量的數(shù)據(jù)分時(shí)分批傳送給PC機(jī),就需要不停查詢串行口的緩沖區(qū),有數(shù)據(jù)就讀取;雖然編程容易,但這樣做不能對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)處理,系統(tǒng)實(shí)時(shí)性不高,而且會(huì)極大地占用系統(tǒng)的資源。以中斷的方式對(duì)串口進(jìn)行控制實(shí)現(xiàn)串行通信,就可以實(shí)時(shí)處理下位機(jī)傳送的數(shù)據(jù);但編程相對(duì)復(fù)雜一些,需要采用Matlab的事件和回調(diào)函數(shù)機(jī)制。
  在Matlab環(huán)境下以中斷的方式進(jìn)行串行通信,實(shí)際上是采用事件驅(qū)動(dòng)的方法實(shí)現(xiàn)的。Matlab提供了instrcallback (obj, event)回調(diào)函數(shù),用戶根據(jù)需要可以自行設(shè)置具體的串行通信事件。Matlab常用的串行口通信中斷事件有:緩沖區(qū)有指定字節(jié)數(shù)目的數(shù)據(jù)可用事件(bytes-available event)、串口接收到的數(shù)據(jù)長時(shí)間處于非激活狀態(tài)事件(break-interrupt event)、串行口引腳狀態(tài)改變事件(pin-status event)、輸出緩沖區(qū)為空事件(output empty event)等。當(dāng)串口上有監(jiān)視的事件發(fā)生時(shí),Matlab會(huì)自動(dòng)調(diào)用回調(diào)函數(shù)進(jìn)行通信事件的處理。因此,事件驅(qū)動(dòng)實(shí)質(zhì)上是一種中斷機(jī)制,而回調(diào)函數(shù)實(shí)質(zhì)上相當(dāng)于一個(gè)中斷服務(wù)子程序。Matlab端實(shí)時(shí)串行通信的程序流程如圖4所示。以下是具體的編程步驟。
1.建立一個(gè)串行通信主程序:SerialPortCommunication.m文件,在主程序中進(jìn)行串口設(shè)備初始化操作,并指定回調(diào)函數(shù)中串行通信的事件。
程序主要源代碼如下(創(chuàng)建串口設(shè)備對(duì)象、設(shè)備串口設(shè)備屬性及打開串口等初始化操作的代碼與前述的查詢方式下的初始化代碼相同):
%設(shè)置串口事件回調(diào)
o_SerialPort.BytesAvailableFcnMode='byte'  %中斷觸發(fā)事件為‘bytesAvailable Event’
o_SerialPort.BytesAvailableFcnCount=10  %接收緩沖區(qū)每收到10個(gè)字節(jié)時(shí),觸發(fā)回調(diào)函數(shù)
o_SerialPort.BytesAvailableFcn={@EveBytesAvailableFcn,handles}  %得到回調(diào)函數(shù)句柄
  2.修改instrcallback(obj,event)回調(diào)函數(shù),對(duì)所發(fā)生的串口通信事件進(jìn)行處理。
  Matlab缺省的回調(diào)函數(shù)instrcallback (obj, event)存在于instrcallback.m文件中。該文件實(shí)際上是一個(gè)有待于用戶修改的程序模塊。其中只有一些最基本的程序代碼,能夠顯示導(dǎo)致串口中斷發(fā)生的是哪一類事件,中斷事件所發(fā)生的時(shí)間以及導(dǎo)致事件發(fā)生的對(duì)象名等信息(修改回調(diào)函數(shù)文件時(shí),注意要取消文件中相應(yīng)信息后的分號(hào),才能夠在Matlab的命令窗口(command window)中將這些信息顯示出來)。中斷發(fā)生后的通信事件處理以及通信數(shù)據(jù)的分析處理任務(wù),需要用戶自行添加相應(yīng)的服務(wù)程序代碼。
4.3繪制采集數(shù)據(jù)的曲線波形與數(shù)據(jù)顯示
在MATLAB的二維繪圖指令中,最重要、最基本的指令是PLOT,其他許多特殊的繪圖指令都是以它為基礎(chǔ)而形成的。作為繪制線性坐標(biāo)平面圖形的函數(shù)PLOT,對(duì)于不同的輸入?yún)?shù),該函數(shù)用不同的形式可以實(shí)現(xiàn)不同的功能。
4.3.1繪制曲線波形
在GUI設(shè)計(jì)中,拖拽出Axes控件即可在界面上顯示曲線坐標(biāo),再使用命令plot(x,y)將采集到的數(shù)據(jù)曲線波形顯示出來。其中x,y是同維向量,那么plot將繪制出以x,y元素為橫、縱坐標(biāo)的曲線。
plot(handles.axes_main,1:length(number),number);   %確立該圖在界面上的位置并按照比例縮放顯示
為了更好地觀察曲線波形,可以使用grid on命令,該命令主要用于在坐標(biāo)平面上加上網(wǎng)格,從而更有利于觀察和分析。
grid on;  %加坐標(biāo)網(wǎng)格
4.3.2數(shù)據(jù)顯示
在GUI界面設(shè)計(jì)中拖拽出TXT控件,然后修改其Tag屬性為edit_ReceiveData,用以顯示接收到的串口所發(fā)送過來的數(shù)據(jù),String留空,并把MAX改為2.0,以便可以多行顯示數(shù)據(jù)。
4.3.3 采集圖像
實(shí)現(xiàn)串口通信需要借助COMTOOLS工具向做好的SerialPortCommunication程序發(fā)送數(shù)據(jù),此工具可以將發(fā)送的數(shù)據(jù)記錄在指定的文件目錄。其界面如圖4所示,此時(shí)已打開COM4,輸入了要發(fā)送的數(shù)據(jù)。
圖4:串口助手
Fig 4: Comtools

打開SerialPortCommunication的COM3串口,即可顯示COMTOOLS發(fā)送過來的數(shù)據(jù)的曲線波形,如圖5。
如果要實(shí)現(xiàn)實(shí)時(shí)串口數(shù)據(jù)采集,則使用COMTOOLS工具里面的“定時(shí)發(fā)送”-“循環(huán)發(fā)送”功能即可實(shí)現(xiàn)。效果圖如圖6所示。
圖5:接收的曲線波形和數(shù)據(jù)
Fig 5: Received waveform and the data curve

圖6:實(shí)時(shí)串口數(shù)據(jù)曲線波形和數(shù)據(jù)顯示
Fig 6: Real-time serial data waveforms and data curve
4.4擴(kuò)展功能——發(fā)送數(shù)據(jù)
在Matlab中實(shí)現(xiàn)SerialPortCommunication的發(fā)送數(shù)據(jù)功能其實(shí)也很簡單,同接收數(shù)據(jù)一樣,在GUI界面設(shè)計(jì)中拖拽出TXT控件,然后修改其Tag屬性為edit_SendData,用以顯示發(fā)送到的串口的數(shù)據(jù),String留空,并把MAX改為2.0,以便可以多行顯示數(shù)據(jù)。發(fā)送8次后的應(yīng)用效果如圖7。
圖7:發(fā)送數(shù)據(jù)
Fig 7:Send Data
  • 結(jié)論
可以看出,在Matlab中進(jìn)行串行通信是十分方便的,編程較為簡單。而且,在Matlab中串行通信的失誤率很低,通信較為可靠,也可以采用增加握手信號(hào)以及數(shù)據(jù)校驗(yàn)等的方式進(jìn)一步增加通信的可靠性。建立基于MATLAB的實(shí)時(shí)串口數(shù)據(jù)采集與曲線顯示,能夠?qū)崿F(xiàn)信號(hào)采集、設(shè)備控制以及結(jié)果顯示等功能。
實(shí)踐證明該功能具有精度高、實(shí)時(shí)性好、性價(jià)比高、人機(jī)界面友好、升級(jí)修改簡單等優(yōu)點(diǎn)。在進(jìn)行項(xiàng)目研究過程中,常常需要進(jìn)行多次實(shí)驗(yàn),采集大量的數(shù)據(jù),并且要求對(duì)數(shù)據(jù)能實(shí)時(shí)地進(jìn)行分析處理,該功能能很好地滿足這種研究需要。此外,這一功能還可以擴(kuò)展應(yīng)用到其他相關(guān)的領(lǐng)域中,如在語音識(shí)別工作中可以用該系統(tǒng)采集語音信號(hào)并且加入語音處理的相關(guān)分析等。因此,該功能不僅具有良好的實(shí)用性,還可為其他的相關(guān)研究提供理論和應(yīng)用基礎(chǔ)。

致    謝
本論文是在老師的悉心指導(dǎo)和熱情關(guān)懷下完成的,老師淵博的學(xué)識(shí)、嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度、精益求精的工作作風(fēng)和誨人不倦的高尚師德,都將深深地感染和激勵(lì)著我,也為我提供了良好的實(shí)驗(yàn)條件,在開展實(shí)驗(yàn)、撰寫論文等方面提供了很多專業(yè)性的指導(dǎo),在此謹(jǐn)向老師致以誠摯的感謝!
生我者父母。感謝生我養(yǎng)我,含辛茹苦的父母。是你們,為我的學(xué)習(xí)創(chuàng)造了條件;是你們,一如既往的站在我的身后默默的支持著我,沒有你們就不會(huì)有我的今天。
感謝學(xué)術(shù)界的前輩們,為我在這篇論文的完成中提供了大量的參考資料,使我學(xué)習(xí)到了很多知識(shí)。
附錄
附錄1:MATLAB實(shí)時(shí)串口數(shù)據(jù)采集與曲線顯示源代碼

附錄1

  1. function figure1_CloseRequestFcn(hObject, eventdata, handles)
  2. global number;
  3. global o_SerialPort;
  4. %--------------關(guān)閉串口------------------------
  5. if strcmp(o_SerialPort.Status,'open')
  6.         fclose(o_SerialPort);
  7. end
  8. number=[];
  9. clear number;
  10. delete(hObject);
  11. %---------------按鈕顯示切換設(shè)置--------------
  12. set(hObject,'Visible','off');
  13. set(handles.pb_CloseSerialPort,'Position',get(handles.pb_OpenSerialPort,'Position'));
  14. %-----------------端口初始化-------------------
  15. set(handles.pb_CloseSerialPort,'Visible','on');
  16. int_Index_COM=get(handles.pop_SerialPort,'Value');
  17. string_COM=get(handles.pop_SerialPort,'String');
  18. string_Select_COM=string_COM{int_Index_COM};
  19. o_SerialPort=serial(string_Select_COM);
  20. %---------------設(shè)置緩沖區(qū)大小為1M----------------
  21. set(o_SerialPort,'InputBufferSize',1024000);
  22. %--------------- EveBytesAvailableFcn事件回調(diào)函數(shù)-------------------
  23. function EveBytesAvailableFcn( t,event,handles )
  24. global o_SerialPort;
  25. global number;
  26. number=[number fread(o_SerialPort,10)'];
  27. set(handles.edit_ReceiveData,'String',num2str(number));
  28. % -------------------發(fā)送按鈕回調(diào)------------------
  29. unction pb_SendData_Callback(hObject, eventdata, handles)
  30. global o_SerialPort;
  31. string_edit_SendData=get(handles.edit_SendData,'String');
  32. if(get(handles.cb_CharOrHex,'Value')==get(handles.cb_CharOrHex,'Max'))
  33.     fprintf(o_SerialPort,string_edit_SendData);                          
  34. else
  35.     double_edit_SendData=str2num(string_edit_SendData);
  36.     fwrite(o_SerialPort,double_edit_SendData);                           
  37. end
  38. %--------------------串口下拉位選擇-----------------
  39. function pop_SerialPort_CreateFcn(hObject, eventdata, handles)
  40. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  41.     set(hObject,'BackgroundColor','white');
  42. end
  43. %------------------------------------------發(fā)送數(shù)據(jù)-------------------------------------
  44. function edit_SendData_CreateFcn(hObject, eventdata, handles)
  45. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  46.     set(hObject,'BackgroundColor','white');
  47. end
  48. %------------------------------------------接收數(shù)據(jù)-------------------------------------
  49. function edit_ReceiveData_CreateFcn(hObject, eventdata, handles)
  50. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
  51.     set(hObject,'BackgroundColor','white');
  52. end
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
基于MATLAB實(shí)時(shí)串口數(shù)據(jù)采集與曲線顯示.doc (313.5 KB, 下載次數(shù): 32)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:376403 發(fā)表于 2018-7-21 09:50 | 只看該作者
為什么代碼運(yùn)行有個(gè)錯(cuò)誤?怎么修改?“結(jié)構(gòu)體內(nèi)容引用自非結(jié)構(gòu)體數(shù)組對(duì)象。 出錯(cuò)  if strcmp(o_SerialPort.Status,'open')  ”
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表