




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第3章模擬信號的采集3.1在傳統(tǒng)DAQ系統(tǒng)中進行模擬信號的采集3.2在DAQmx系統(tǒng)中創(chuàng)建應(yīng)用程序3.3測量直流電壓信號3.4課程練習(xí)本章小結(jié)練習(xí)與思考
3.1在傳統(tǒng)DAQ系統(tǒng)中進行模擬信號的采集
3.1.1數(shù)據(jù)采集通道
在虛擬儀器設(shè)計過程中,數(shù)據(jù)的采集和處理都是以通道的形式來進行的。根據(jù)需要采集通道數(shù)目的不同,我們可以將一個數(shù)據(jù)采集系統(tǒng)簡單地分為單通道數(shù)據(jù)采集系統(tǒng)和多通道數(shù)據(jù)采集系統(tǒng)。多通道數(shù)據(jù)采集系統(tǒng)中,必須為數(shù)據(jù)采集設(shè)備指定對哪個通道進行操作,這就是通道地址。而在基于LabVIEW的數(shù)據(jù)采集系統(tǒng)中,數(shù)據(jù)采集通道還有物理通道(PhysicalChannel)和虛擬通道(VirtualChannel)之分。在傳統(tǒng)DAQ系統(tǒng)設(shè)計中,我們既可以使用物理通道定址,也可以使用虛擬通道定址。
1.物理通道地址
物理通道是被測試的信號或虛擬儀器系統(tǒng)所產(chǎn)生的信號實際進出計算機的物理介質(zhì)或路徑,典型的情況是接線端各自走一個獨立的通道,每個通道有一個編號。每個通道在數(shù)據(jù)采集卡上對應(yīng)的是哪一個針號,在接線端子上對應(yīng)的是哪一個端子號都可以通過查硬件手冊獲得。物理通道地址不需要在管理與控制資源管理器(MAX)中進行通道設(shè)置,而只要在程序中的數(shù)據(jù)采集函數(shù)的通道參數(shù)Channel或Channels中寫入通道號就能訪問指定通道采集的數(shù)據(jù)。在數(shù)據(jù)采集過程中按通道參數(shù)列出的順序掃描通道,在數(shù)據(jù)輸出過程中按通道參數(shù)列出的順序刷新。而數(shù)據(jù)采集卡的設(shè)置直接對數(shù)據(jù)采集函數(shù)生效。
數(shù)據(jù)采集函數(shù)的通道參數(shù)用字符串?dāng)?shù)據(jù)類型賦值,填寫數(shù)字0~n-1(n是數(shù)據(jù)采集卡的通道數(shù)),可以接受的格式如圖3-1所示。圖3-1通道選擇格式
2.虛擬通道地址
虛擬通道是基于軟件設(shè)計的包括通道名、對應(yīng)的物理通道、信號連接方式、測試類型和標(biāo)度等一系列設(shè)置的集合。
使用虛擬通道定址要先在MAX中創(chuàng)建虛擬通道,其具體方法是:在MAX的DataNeighborhood項上單擊鼠標(biāo)右鍵,彈出快捷菜單,選擇“CreateNew”項,打開新建對話框后選擇TraditionalNI-DAQVirtualChannel,彈出創(chuàng)建虛擬通道向?qū)?,根?jù)引導(dǎo)一步步地選擇通道類型、信號單位、標(biāo)度和使用的數(shù)據(jù)采集設(shè)備等。虛擬通道創(chuàng)建后,在DataNeighborhood下會出現(xiàn)一個通道名,在通道名的下拉菜單中選擇Properties修改通道設(shè)置,或選擇Test對通道進行測試。
使用已經(jīng)創(chuàng)建的虛擬通道時,一般使用通道控件或通道常數(shù)方式。傳統(tǒng)的DAQ通道控件(TraditionalDAQChannel)如圖3-2(a)所示,其前面板的I/O控件子模板如圖3-2(b)所示。在這個控件中,我們可以填寫已經(jīng)建立的傳統(tǒng)DAQ通道名,也可以從下拉列表中選擇。單擊下拉列表中的“Browse”選項打開對話框,顯示在MAX中建立的傳統(tǒng)DAQ通道。圖3-2
DAQ模塊選擇(a)傳統(tǒng)DAQ通道控件模板;(b)?I/O控件子模板在LabVIEW的NIMeasurements→DataAcquisition函數(shù)子模板中有一個TraditionalDAQChannel常數(shù),其用法與傳統(tǒng)DAQ通道控件相似。
虛擬通道控件和虛擬通道常數(shù)的快捷菜單中都有一個I/ONameFiltering選項,選擇該選項會彈出一個小對話框,用來設(shè)置顯示在通道下拉列表中的通道名類別。默認(rèn)情況下顯示模擬輸入通道。
使用虛擬通道時,數(shù)據(jù)采集函數(shù)的通道參數(shù)可以接受的數(shù)據(jù)格式與圖3-1相似。使用虛擬通道定址時不必再為數(shù)據(jù)采集函數(shù)連接device輸入?yún)?shù),LabVIEW自動忽略這個參數(shù)。如果不需要更改通道設(shè)置,那么也不必連接inputlimits或inputconfig等參數(shù)。
3.通道極限設(shè)置
通道極限設(shè)置是用來設(shè)置測試或輸出的模擬信號的最大值和最小值的,它關(guān)系到數(shù)據(jù)采集設(shè)備的增益。每個模擬輸入或輸出通道可以有一對單獨的極限設(shè)置量,且必須在設(shè)備的輸入/輸出范圍內(nèi)。如果不給出數(shù)據(jù)采集函數(shù)輸入極限設(shè)置參數(shù),或者給上下限參數(shù)輸入0,那么就使用設(shè)備的缺省范圍,或在MAX中為通道設(shè)置的范圍。
模擬輸入/輸出函數(shù)用一個極限設(shè)置簇數(shù)組來對各個通道表數(shù)組進行極限設(shè)置。各個通道的極限設(shè)置情況與兩個數(shù)組成員的個數(shù)和通道表的寫法都有關(guān)系。在圖3-3中,通道數(shù)組用3個成員指定了8個通道,極限數(shù)組的3個成員與之對應(yīng)。通道0、1、2和3的極限為-0.5~0.5;通道4的極限為?-1~1;通道5、6、7的極限為-5~5。
如果在MAX中設(shè)置了通道,極限設(shè)置所用的單位就是通道設(shè)置中用于某個特定通道名的物理單位。例如,我們在數(shù)據(jù)采集向?qū)е性O(shè)置了一個通道的物理單位為DegC,極限設(shè)置值就被看做攝氏度。如果沒有在MAX中設(shè)置通道,用于極限設(shè)置的缺省單位值通常是伏特。圖3-3通道設(shè)置與極限設(shè)置的對應(yīng)關(guān)系
4.標(biāo)度(Scale)
標(biāo)度是對某一個虛擬通道的數(shù)據(jù)進行預(yù)處理,以便于程序中應(yīng)用這些數(shù)據(jù)。例如,線性標(biāo)度公式y(tǒng)=mx+b,對輸入數(shù)據(jù)x進行線性處理后,將數(shù)據(jù)y傳送給LabVIEW程序。圖3-4所示的是標(biāo)度設(shè)置面板,在此,單擊EditName按鈕可以編輯標(biāo)度名,可以在scripting中對標(biāo)度加以簡短說明,可以在Scale下拉列表中選擇標(biāo)度類型,可以設(shè)置標(biāo)度系數(shù),同時,由于選擇了線性標(biāo)度,因此可以設(shè)置斜率和截取兩個參數(shù)。在標(biāo)度設(shè)置面板中還可以預(yù)覽標(biāo)度的效果。圖3-4標(biāo)度設(shè)置面板在MAX中有一個標(biāo)度項“Scale”,在“Scale”項上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇“CreatNew”,彈出創(chuàng)建標(biāo)度向?qū)В梢赃x擇建立DAQmx標(biāo)度或傳統(tǒng)DAQ標(biāo)度(如圖3-5所示)。在創(chuàng)建標(biāo)度向?qū)У囊龑?dǎo)下,創(chuàng)建一個標(biāo)度。在已經(jīng)創(chuàng)建好的標(biāo)度名的彈出菜單中可以選擇Properties,彈出標(biāo)度設(shè)置面板對標(biāo)度的設(shè)置進行修改。
新建虛擬通道時,新建向?qū)崾臼且陆?biāo)度還是將已經(jīng)建立的標(biāo)度加入到通道中。當(dāng)然也可以不要標(biāo)度。圖3-5標(biāo)度選擇窗口3.1.2數(shù)據(jù)采集函數(shù)
LabVIEW中的傳統(tǒng)數(shù)據(jù)采集函數(shù)位于NIMeasurements→DataAcquisition函數(shù)子模板中,如圖3-6所示。這個子模板中包含七個下級子模板,即模擬輸入、模擬輸出、數(shù)字輸入/輸出、計數(shù)器、標(biāo)準(zhǔn)與設(shè)置、信號調(diào)理、傳統(tǒng)DAQ通道參數(shù)。
通過合理使用這些子模板,可以分別訪問不同的數(shù)據(jù)采集函數(shù)。使用時,這些函數(shù)可以作為單獨的程序運行,執(zhí)行數(shù)據(jù)采集任務(wù),也可以作為子程序調(diào)用返回采集的數(shù)據(jù)。
按功能來劃分?jǐn)?shù)據(jù)采集函數(shù),可以分為易用函數(shù)、中級函數(shù)、實用函數(shù)和高級函數(shù)等不同的等級。圖3-6Acquisition函數(shù)子模板
1.易用函數(shù)
易用函數(shù)用于執(zhí)行最簡單的數(shù)據(jù)采集操作,位于它所在的子模板的最上面一行。其主要功能是完成最基本的數(shù)據(jù)采集操作,同時,它還可以自動進行出錯提示,用一個對話框詢問用戶是終止程序執(zhí)行還是忽略錯誤。
易用函數(shù)通常由中級函數(shù)構(gòu)成,但它只提供最基本的輸入/輸出接口。這類似于一臺“傻瓜”照相機,它不需要操作者過多的進行干預(yù),也得不到什么特定的效果。對于復(fù)雜的應(yīng)用程序,應(yīng)該使用中級的或高級的數(shù)據(jù)采集函數(shù),以便得到更多功能和更好的性能。
2.中級函數(shù)
中級函數(shù)由高級函數(shù)組成,但是它們使用的參數(shù)較少,并且不具備某些高級的功能。
中級函數(shù)比易用函數(shù)提供給用戶更多處理錯誤的機會。在每一個函數(shù)中,我們都可以檢查錯誤,并且能夠?qū)㈠e誤信息簇傳遞給其他函數(shù)。
3.實用函數(shù)
許多LabVIEW的數(shù)據(jù)采集子模板中都有實用函數(shù)。它們也由中級函數(shù)組成,但是比易用函數(shù)具有更多的輸入/輸出參數(shù),因此在開發(fā)應(yīng)用軟件時,比易用函數(shù)具備更多的硬件操作功能,能夠更有效地控制硬件。
4.高級函數(shù)
高級函數(shù)一般對應(yīng)于數(shù)據(jù)采集驅(qū)動程序的最底層接口。很少有應(yīng)用軟件需要高級函數(shù),當(dāng)需要使用某些易用函數(shù)或中級函數(shù)不具備的特殊數(shù)據(jù)采集功能時,就有必要使用高級函數(shù)。使用高級函數(shù)一般可以從數(shù)據(jù)采集驅(qū)動程序返回最多的狀態(tài)
信息。3.1.3數(shù)據(jù)采集函數(shù)的參數(shù)多態(tài)
如同其他許多LabVIEW函數(shù)一樣,數(shù)據(jù)采集函數(shù)也具有參數(shù)多態(tài)等特點,它們可以接受或返回不同類型的數(shù)據(jù)。例如,在缺省情況下,模擬輸入函數(shù)返回的數(shù)據(jù)類型是波形,但是可以在它的輸出端口的下拉菜單中選擇SelectType,以選擇用戶需要的其他數(shù)據(jù)類型。例如,AIReadOneScan函數(shù)可以返回單點波形、量化數(shù)組、二進制數(shù)組與量化二進制數(shù)組四種類型的數(shù)據(jù),如圖3-7所示。圖3-7數(shù)據(jù)采集函數(shù)的參數(shù)多態(tài)3.1.4數(shù)據(jù)采集函數(shù)的常用參數(shù)
在模擬輸入/輸出、數(shù)字輸入/輸出和計數(shù)器程序中,device參數(shù)指用戶在MAX中為某一個數(shù)據(jù)采集設(shè)置的編號。
taskID是Config函數(shù)的一個輸出參數(shù),它為特定的輸入/輸出操作與設(shè)備設(shè)置了一個數(shù)值,這個值可以作為一個標(biāo)識貫穿于整個程序。taskID也可以包含一組關(guān)于通道和增益的信息。
數(shù)據(jù)采集函數(shù)的參數(shù)缺省輸入是它前面板上對應(yīng)控制件的缺省值。缺省設(shè)置是記錄在設(shè)備驅(qū)動程序中的缺省參數(shù)值。當(dāng)前設(shè)置是任意給定時刻一個參數(shù)的值。當(dāng)函數(shù)的某一個輸入端口沒有連線時,這個端口所對應(yīng)的函數(shù)前面板控制件的缺省值就被傳遞給驅(qū)動程序,它的缺省設(shè)置成為當(dāng)前設(shè)置并一直保持到參數(shù)值被改變。3.1.5數(shù)據(jù)采集函數(shù)的數(shù)據(jù)組織
當(dāng)我們從多個通道連續(xù)采集數(shù)據(jù)時,默認(rèn)情況下,數(shù)據(jù)采集函數(shù)返回的數(shù)據(jù)是波形。圖3-8所示的是由3個通道采集的數(shù)據(jù),這個波形數(shù)組包含3個成員,每個成員對應(yīng)一個通道的數(shù)據(jù),其中,有采樣開始時間t0、采樣間隔dt和采樣數(shù)據(jù)數(shù)組。
由于數(shù)據(jù)采集函數(shù)的參數(shù)多態(tài),我們也可以使它們返回一個二維標(biāo)量數(shù)組。這個數(shù)組每列包含一個通道的數(shù)據(jù),每行包含一次掃描的數(shù)據(jù),如圖3-9所示。數(shù)據(jù)實際采集的順序為s0c0、s0c1、s0c2、s1c0、s1c1、s1c2、s2c0、s2c1、s2c2……圖3-8波形采樣數(shù)據(jù)用圖形顯示數(shù)據(jù)采集函數(shù)返回的二維數(shù)組時,必須把Chart或Graph設(shè)置為轉(zhuǎn)換數(shù)組,其方法是在彈出菜單中選擇TransposeArray項。如果沒有給圖形顯示件連接二維數(shù)組,則這個選項是暗的。也可以在程序中使用Array函數(shù)子模板的Transpose2DArray函數(shù)轉(zhuǎn)換數(shù)組。
如果要從數(shù)據(jù)采集函數(shù)返回的二維數(shù)組中提取一個通道的數(shù)據(jù),那么可以使用Array函數(shù)子模板的IndexArray函數(shù)。給列索引參數(shù)連接一個數(shù)值來選擇一列,或者說一個通道,行索引會自動變?yōu)镈isableIndexing狀態(tài),索引數(shù)組函數(shù)就將整個通道的數(shù)據(jù)作為一個一維數(shù)組返回。圖3-9數(shù)據(jù)采集函數(shù)的數(shù)據(jù)組織3.1.6模擬輸入常用的基本術(shù)語
在模擬輸入時經(jīng)常會遇到如一次掃描、掃描數(shù)、采樣數(shù)、掃描率和通道時鐘率等基本術(shù)語,具體概念如下:
(1)一次掃描(ascan):對數(shù)據(jù)采集函數(shù)通道參數(shù)中所有通道的一次采集或讀數(shù)。
(2)掃描數(shù)(numberofscanstoacquire):函數(shù)每調(diào)用一次,從通道表中所有通道讀數(shù)的次數(shù)。
(3)采樣數(shù)(numberofsamples):函數(shù)每調(diào)用一次,從一個通道采樣的數(shù)據(jù)點數(shù)。
(4)掃描率(scanrate):每秒從各通道采集數(shù)據(jù)的次數(shù)。它等于單個通道的采樣率。當(dāng)設(shè)備支持間斷掃描時,通過掃描率參數(shù)設(shè)置可以實現(xiàn)間斷掃描,即各次掃描之間的時間間隔比各通道之間讀數(shù)的時間間隔長。
(5)通道時鐘率(channelclockrate):定義從通道表中的一系列通道采集數(shù)據(jù)的時間間隔。3.2在DAQmx系統(tǒng)中創(chuàng)建應(yīng)用程序
在本節(jié),我們將簡單介紹如何在DAQmx系統(tǒng)中利用數(shù)據(jù)采集助手來創(chuàng)建數(shù)據(jù)采集應(yīng)用程序的方法。
3.2.1數(shù)據(jù)采集助手的應(yīng)用
數(shù)據(jù)采集助手(DAQAssistant)是LabVIEW7.0中所具有的進行數(shù)據(jù)采集快捷設(shè)置的一項功能,可以通過多種途徑啟動數(shù)據(jù)采集助手。
數(shù)據(jù)采集助手的基本任務(wù)是基于DAQmx的數(shù)據(jù)采集系統(tǒng),進行數(shù)據(jù)采集的硬件設(shè)置,所以在程序設(shè)計開發(fā)構(gòu)成中,一旦涉及到了相關(guān)任務(wù),數(shù)據(jù)采集助手就會自動打開。
1.在MAX中創(chuàng)建測試任務(wù)
在基于DAQmx的數(shù)據(jù)采集系統(tǒng)中,測試任務(wù)Task是NI-DAQ新增加的一個重要概念,它是一系列信息的集合,一般包括一個或多個通道以及定時、觸發(fā)等基本屬性。同時,測試任務(wù)Task也是數(shù)據(jù)采集助手與數(shù)據(jù)采集程序之間聯(lián)系的紐帶。具體步驟如下:
(1)在MAX中,右鍵單擊DataNeighborhood項,彈出CreateNew快捷菜單,打開如圖3-10所示的新建對話框。
(2)選擇對話框中的NI-DAQmxTask選項,然后單擊“Next”按鈕,進入測試類型選擇頁,如圖3-11所示。圖3-10新建DAQmx測試任務(wù)向?qū)D3-11為任務(wù)選擇測試類型
(3)單擊AnalogInput項,進入下一級對話框,如圖3-12所示。此時,對話框?qū)赡艿哪M輸入任務(wù)作進一步細分,主要包括:電壓(Voltage)、溫度(Temperature)、張力(Strain)、電流(Current)、阻抗(Resistance)、頻率(Frequency)、加速度(Acceleration)、自定義激勵電壓(CustomVoltagewithExcitation)、聲壓(SoundPressure)等項目?;竞w了我們常用的模擬測試內(nèi)容。圖3-12可能的模擬輸入任務(wù)
(4)單擊Voltage項,選擇測試電壓值,進入下一級對話框,在此可建立虛擬通道,如圖3-13所示。
在DAQmx系統(tǒng)中必須建立虛擬通道,它既可以是任務(wù)的組成部分,也可以獨立于任務(wù)。任務(wù)內(nèi)部的虛擬通道叫局部通道(LocalChannel),獨立于任務(wù)的虛擬通道叫全局通道(GlobalChannel)。全局通道可以用于不同的任務(wù)。應(yīng)特別注意的是,當(dāng)全局通道修改時,所有引用它的任務(wù)都將受到影響。
如果使用全局虛擬通道,選擇AddExistingDAQmxGlobalChannels或CopyDAQmxGlobalChannels項,這時列表中會出現(xiàn)所有已經(jīng)建立的全局通道,可從中選擇一個供新建的任務(wù)
使用。圖3-13建立虛擬通道如果要建立局部虛擬通道,則可選擇CreateNewLocalChannels,這時列表中會出現(xiàn)已經(jīng)安裝設(shè)備的所有物理通道,物理通道用設(shè)備名和通道類型加通道號表示,例如Dev1/av1即名為Dev1的設(shè)備中1號模擬輸入通道。
從物理通道列表中選擇供新建虛擬通道要使用的物理通道。如果需要在一個任務(wù)中建立多個局部虛擬通道,就選擇多個物理通道分別供它們使用。使用時,按住Ctrl鍵,可以在物理通道列表中進行間隔性選擇;按住Shift鍵,則可以連續(xù)選擇。局部虛擬通道使用默認(rèn)的名稱。
(5)建立虛擬通道以后單擊“Next”按鈕,進入新建任務(wù)的名稱對話框,如圖3-14所示。設(shè)置完成后單擊“Finish”按鈕打開數(shù)據(jù)采集助手的設(shè)置面板,如圖3-15所示。圖3-14命名數(shù)據(jù)采集任務(wù)圖3-15數(shù)據(jù)采集助手
2.在MAX中創(chuàng)建全局虛擬通道
創(chuàng)建全局虛擬通道的方法與創(chuàng)建任務(wù)的方法類似,即在MAX的DataNeighborhood項上用鼠標(biāo)右鍵單擊,彈出CreateNew…快捷菜單,打開如圖3-10所示的新建對話框以后選擇NI-DAQGlobalChannel。以后的步驟由新建向?qū)У囊龑?dǎo)完成即可。
全局虛擬通道空間和全局虛擬通道常量的用法與傳統(tǒng)DAQ中相應(yīng)的對象一樣。
3.在LabVIEW環(huán)境下打開數(shù)據(jù)采集助手
在LabVIEW環(huán)境下打開數(shù)據(jù)采集助手的方式通過DataAssistant的快速VI來啟動。
在LabVIEW函數(shù)模板中,有兩個方法可以找到DataAssistant的快速VI,分別是NIMeasurements→DAQmxDataAcquisition和Express-Input函數(shù)子模板。將DataAssistant快速VI放進程序框圖以后,首先自動打開一個新建向?qū)В龑?dǎo)用戶選擇測試的類型和使用的通道,然后打開數(shù)據(jù)采集助手的設(shè)置面板。進行必要的設(shè)置以后,單擊“OK”按鈕,快速VI圖標(biāo)下面會出現(xiàn)Data端口,如圖3-16所示。這樣就可以執(zhí)行數(shù)據(jù)采集任務(wù)并返回測試數(shù)據(jù)。圖3-16數(shù)據(jù)采集助手快速VI(a)剛放進框圖的快速VI;(b)完成設(shè)置以后的快速VI(a)(b)雖然數(shù)據(jù)采集助手快速VI產(chǎn)生的任務(wù)只能在調(diào)用它的程序中使用,但是使用中如果把它轉(zhuǎn)換為一個任務(wù)常數(shù),那么它就可以存儲在MAX中,供其他程序使用。轉(zhuǎn)換步驟如下:
(1)右鍵單擊數(shù)據(jù)采集助手的快速VI圖標(biāo),彈出快捷菜單,選擇ConverttoTaskNameConstant項;
(2)啟動數(shù)據(jù)采集助手后即可對任務(wù)進行必要的修改;
(3)單擊“OK”按鈕后,快速VI便轉(zhuǎn)換為任務(wù)常數(shù)。3.2.2生成圖形代碼
在MAX中使用數(shù)據(jù)采集助手可以進行任務(wù)和通道設(shè)置,但是我們還沒有在程序中得到測試的數(shù)據(jù)。而在LabVIEW中使用快速VI打開數(shù)據(jù)采集助手,則可以返回測試數(shù)據(jù),但是也許我們還需要對數(shù)據(jù)線采集進行更多的控制。這樣,我們就需要生成程序的圖形代碼。一般有兩條主要途徑可以生成程序代碼。
1.通過任務(wù)生成程序代碼
在LabVIEW前面板和程序軟件面板中都可以訪問在MAX中建立的任務(wù)。前面板的I/ODAQmxNameControls控件子模板中有一個DAQmxTaskName控件,在這個控件中,可以填寫DAQmx任務(wù)名,可以單擊下拉列表按鈕彈出下拉列表。單擊表中Browse…選項列出所有在MAX中已經(jīng)建立的任務(wù)。如圖3-17(a)DAQmx任務(wù)名控件函數(shù)所示。
在LabVIEW的NI-Measurements→DAQmxAcquisition函數(shù)子模塊中有一個DAQmxTaskNameConstant常數(shù),如圖3-17
(b)DAQmx任務(wù)名所示,它的用法與DAQmxTaskName控件
相似。圖3-17DAQmx任務(wù)名在任務(wù)名控件或常數(shù)上彈出快捷菜單,選GenerateCode。在下級菜單中有以下三種生成代碼方式可以選擇:
Example:這個選項可以產(chǎn)生運行一個任務(wù)所需要的所有代碼,例如讀/寫操作函數(shù)、開始/停止任務(wù)函數(shù)、循環(huán)結(jié)構(gòu)/圖形顯示件等,如圖3-18所示。這實際上就是一個簡單的DAQmx示例程序,經(jīng)過某些修改就可以用在應(yīng)用程序中。使用中,這個程序運行時仍然是通過數(shù)據(jù)采集任務(wù)控件或數(shù)據(jù)采集任務(wù)常數(shù)與數(shù)據(jù)采集任務(wù)聯(lián)系在一起的。圖3-18生成示例程序圖形代碼
Configuration:這個選項產(chǎn)生的代碼只是用于任務(wù)設(shè)置部分。它用一個函數(shù)圖形來取代數(shù)據(jù)采集任務(wù)控件端口或數(shù)據(jù)采集任務(wù)常數(shù)。打開這個函數(shù)圖標(biāo),它的圖形代碼如圖3-19所示。產(chǎn)生設(shè)置代碼以后,數(shù)據(jù)采集任務(wù)和應(yīng)用程序之間將失去聯(lián)系,修改代碼不會影響數(shù)據(jù)采集助手,數(shù)據(jù)采集助手也可重新生成代碼。
ConfigurationandExample:這個選項產(chǎn)生的代碼是前兩個選項產(chǎn)生的代碼之和。任務(wù)常數(shù)和任務(wù)控件也可以轉(zhuǎn)換為數(shù)據(jù)采集助手快速VI。
通過在MAX中設(shè)置的任務(wù)常數(shù)產(chǎn)生代碼以后,如果這時再修改代碼將不會影響已經(jīng)存儲在MAX中的任務(wù)。圖3-19生成設(shè)置程序圖形代碼
2.將數(shù)據(jù)采集助手快速VI轉(zhuǎn)換為程序圖形代碼
1)通過任務(wù)常數(shù)轉(zhuǎn)換
按照3.2.1節(jié)介紹的辦法,將數(shù)據(jù)采集助手快速VI轉(zhuǎn)換為任務(wù)常數(shù),然后按本節(jié)前面介紹的辦法生成程序代碼。
2)通過VI前面板轉(zhuǎn)換
在數(shù)據(jù)采集助手菜單里,可選擇OpenFrontPanel,將快速VI轉(zhuǎn)換為標(biāo)準(zhǔn)VI,也就得到了程序代碼。這是包括設(shè)置任務(wù)與執(zhí)行任務(wù)的全部圖形代碼。3.2.3DAQmx數(shù)據(jù)采集函數(shù)
LabVIEW中的DAQmx數(shù)據(jù)采集函數(shù)區(qū)位于NI-Measurements→DAQmx-DataAcquisition函數(shù)子模板中。這里,我們主要介紹圖3-18和圖3-19的程序中用到的幾個函數(shù)。
1.DAQmxCreateTask函數(shù)
該函數(shù)在DAQmxAdvancedTaskOptions函數(shù)子模板中,用來創(chuàng)建一個DAQmx數(shù)據(jù)采集任務(wù)。其主要參數(shù)有:
1)?Newtaskname
新建任務(wù)的名稱。如果在循環(huán)中新建一個任務(wù),執(zhí)行完任務(wù)以后,就應(yīng)該注意必須清除任務(wù),否則NI-DAQmx會在每個循環(huán)試圖創(chuàng)建同名的任務(wù),這將會引起程序出錯。
2)?tasktocopy
任務(wù)原型。如果這里連接一個已經(jīng)建立的任務(wù)名,則新建的任務(wù)由它拷貝而來。
3)?globalvirtualchannels
這個參數(shù)輸入的全局虛擬通道將被添加到新建的任務(wù)中。如果tasktocopy參數(shù)連接了任務(wù)名,那么這里輸入的虛擬通道不是被添加到那個任務(wù)中,而是添加到新建的那個任務(wù)的副本中。
4)autocleanup
自動清除任務(wù)。設(shè)置為True時,程序執(zhí)行完以后自動將任務(wù)清除;否則直到退出LabVIEW時,任務(wù)才被清除。這種情況下在一個程序中創(chuàng)建的任務(wù)可以供其他程序使用并被清除,也可以用DAQmxClearTask清除任務(wù)。
2.DAQmxCreateVirtualChannel函數(shù)
該函數(shù)是新建虛擬通道函數(shù),是DAQmx數(shù)據(jù)采集系統(tǒng)中使用非常普遍的一個函數(shù),位于DAQmx-DataAcquisition函數(shù)子模板的頂層。這是一個多態(tài)VI,它有許多子VI,每個子VI可以創(chuàng)建一種類型的虛擬通道,并將其他VI加入到一個數(shù)據(jù)采集任務(wù)里。這里的多態(tài)包含兩層含義:一層是指函數(shù)的某些參數(shù)具有接收不同類型參數(shù)的能力;另一層是一類專門為接收不同類型數(shù)據(jù)設(shè)計的VI。在這里,我們將介紹用虛擬通道函數(shù)創(chuàng)建一個模擬輸入,并能測量電壓信號的虛擬通道的情況。具體方法是:在DAQmxCreateVirtualChannel子VI的選擇器的下拉菜單中,選擇AnalogInput→voltage。這個VI的主要參數(shù)有:
(1)?taskin:指定創(chuàng)建的虛擬通道加入哪一個任務(wù)中,如果這個參數(shù)不連接,NI-DAQmx就創(chuàng)建一個新任務(wù),并將創(chuàng)建的虛擬通道加入其中。但是這樣,如果處于循環(huán)中,NI-DAQmx就會在每次循環(huán)時創(chuàng)建一個新任務(wù),直到程序終止才清除這些任務(wù),這樣無疑會極大地消耗系統(tǒng)資源。因此這種情況下應(yīng)該在任務(wù)執(zhí)行完以后,用DAQmxClearTask清除任務(wù)。
(2)?physicalchannels:物理通道,在DAQmx-DataAcquisition→DAQmxAdvanced→DAQmxConstants&PropertyNodes函數(shù)子模板中的DAQmxphysicalchannelsconstant常數(shù),列出系統(tǒng)中安裝的設(shè)備上所有的物理通道名??梢詮闹羞x擇新建虛擬通道使用的物理通道。
(3)?nametoassign:指定虛擬通道名,其他函數(shù)和節(jié)點都要通過名稱訪問特定的虛擬通道。默認(rèn)名稱時,它使用物理通道名稱。如果一次調(diào)用此函數(shù)產(chǎn)生多個虛擬通道,那么通道名之間用逗號隔開。
(4)?units:測量電壓值所用的單位,這個參數(shù)有兩個選擇,伏特(Volts)或來自定制標(biāo)度(FromCustomScale)。
(5)?maximumvalue和minimumvalue:最大值和最小值,指定測量電壓的范圍。
(6)?inputterminalconfiguration:輸入端口設(shè)置,設(shè)置被測信號的連接方式。
(7)?customscalename:輸入在MAX中設(shè)置過的標(biāo)度名。
(8)?taskout:函數(shù)執(zhí)行完后產(chǎn)生的任務(wù)的參考號。
3.DAQmxTiming函數(shù)
DAQmx定時函數(shù),這個函數(shù)也位于DAQmx-DataAcquisition函數(shù)子模板的頂層,也是一個多態(tài)VI。這里主要介紹選擇SampleClock子VI的實例,該VI的實例可以設(shè)置采樣數(shù)、采樣率,并在必要時設(shè)置緩沖區(qū)。它的主要參數(shù)有:
(1)?task/channelsin:輸入任務(wù)名或虛擬通道名,如果輸入虛擬通道名,它將自動創(chuàng)建一個任務(wù)。
(2)?rate:設(shè)置每通道采樣率。
(3)?source:設(shè)置采樣始終信號源,如果這個參數(shù)不連接就使用卡上的時鐘。
(4)?activeedge:在時鐘的上升沿還是下降沿進行采樣。
(5)?samplemode:采樣模式,設(shè)置連續(xù)采樣還是采集一定數(shù)量的數(shù)據(jù)。
(6)?sampleperchannel:優(yōu)先采樣時每通道采樣數(shù)量。
(7)?taskout:函數(shù)執(zhí)行完后產(chǎn)生的任務(wù)的參考號。
4.DAQmxStartTask函數(shù)
啟動DAQmx任務(wù)函數(shù),位于DAQmx-DataAcquisition函數(shù)子模板頂層。若不選擇此函數(shù),那么執(zhí)行DAQmxRead函數(shù)時,數(shù)據(jù)采集任務(wù)也可以自動啟動。此函數(shù)的主要參
數(shù)為:
(1)?task/channelsin:輸入任務(wù)名或虛擬通道名列表,如果輸入虛擬通道名,它將自動創(chuàng)建一個任務(wù)。
(2)?taskout:函數(shù)執(zhí)行完后產(chǎn)生的任務(wù)的參考號。
5.DAQmxRead函數(shù)
讀數(shù)據(jù)函數(shù),位于DAQmx-DataAcquisition函數(shù)子模板的頂層,它由指定的任務(wù)或通道讀取數(shù)據(jù)采集的數(shù)據(jù)。這是一個多態(tài)VI,根據(jù)數(shù)據(jù)采集的類型、讀取數(shù)據(jù)的數(shù)量和要求返回數(shù)據(jù)的類型,有多個VI可供選擇。這里主要介紹選擇AnalogIDWfmNChanNSamp子VI的實例,它返回模擬輸入的一維波形數(shù)據(jù),包含N個通道,且每個通道有N個采樣。它的主要參數(shù)有:
(1)?task/channelsin:輸入任務(wù)名或虛擬通道名,如果輸入虛擬通道名,它將自動創(chuàng)建一個任務(wù)。
(2)?numberofsamplesperchannel:執(zhí)行一次從每個通道采回的數(shù)據(jù)量。如果是一個連續(xù)采集任務(wù),而且這個參數(shù)沒有連續(xù)或連接-1,則讀回內(nèi)存緩沖區(qū)里的所有數(shù)據(jù)。
(3)?timeout:超時,設(shè)置等待采樣的秒數(shù)。如果到時沒采夠數(shù)據(jù),就有多少返回多少,并報告出錯。如果設(shè)置為-1,就無限等待;如果設(shè)置為0,就立刻返回數(shù)據(jù),數(shù)據(jù)不夠時報告出錯。
(4)?taskout:函數(shù)執(zhí)行完后產(chǎn)生的任務(wù)的參考號。
(5)?data:數(shù)據(jù),返回一維波形數(shù)組,數(shù)組每個成員對應(yīng)任務(wù)中一個通道。數(shù)組成員的順序與添加到任務(wù)中的通道的順序?qū)?yīng)。返回的數(shù)據(jù)按照通道設(shè)置的單位與標(biāo)度進行處理。
6.DAQmxStopTask函數(shù)
停止任務(wù)函數(shù),這個函數(shù)位于DAQmx-DataAcquisition函數(shù)子模板的頂層,它用來停止一個任務(wù),并把它恢復(fù)到執(zhí)行前的狀態(tài)。它的參數(shù)與DAQmxStartTask函數(shù)相同。
3.3測量直流電壓信號
直流電壓信號是變化緩沖的信號,一般測量信號每次只需要采集一點數(shù)據(jù),或者是采集多點數(shù)據(jù)后再取其平均值,以減小測量誤差。根據(jù)被檢測對象的數(shù)據(jù)檢測要求的不同,又可以采用單通道采樣或多通道采樣。本節(jié)將分別對單點采樣和多點采樣作一介紹。
3.3.1單點采樣
1.使用傳統(tǒng)DAQ單點采樣
1)單通道單點采樣
需要周期性地監(jiān)控一個對象(例如一個容器的液位)時,可以用單通道單點模擬輸入。以上面提到的容器的液位監(jiān)控為例,將傳感器產(chǎn)生的標(biāo)示液位的電壓信號連接到數(shù)據(jù)采集卡的一個通道上,當(dāng)需要了解液位時,就讓數(shù)據(jù)采集設(shè)備進行一次數(shù)/模轉(zhuǎn)換,然后返回一個量(該量值包含了液位信息)。
使用中通過軟件從一個輸入通道讀取一個數(shù)據(jù),并立即返回它的值。這種操作不需要任何緩沖區(qū)或定時。在大多數(shù)情況下,使用NI-Measurements→DataAcquisition→AnalogInput函數(shù)子模塊中的易用模擬輸入函數(shù)AISampleChannel即可,程序框圖見圖3-20。圖3-20單通道單點采樣編程示例這里假定在MAX中進行了通道設(shè)置,所以沒有輸入設(shè)備device和極限limit兩個參數(shù),只在前面板通道控件中輸入通道名。返回值的物理單位與通道設(shè)置的物理單位一致。
程序中用一個WaveformChart顯示液位的變化趨勢,?用一個Tank顯示件顯示當(dāng)前液位值。Tank本身是一個雙精度浮點數(shù),VISampleChannel返回的波形數(shù)據(jù)被自動進行了強制
轉(zhuǎn)換。
2)多通道單點采樣
多通道單點采樣就是一次由多個通道各采集一個數(shù)據(jù),例如,當(dāng)需要同時監(jiān)視容器的液位、壓力和溫度幾個緩慢變化的信號時,就需要用這種方式??梢允褂靡子媚M輸入函數(shù)AISampleChannels執(zhí)行這個任務(wù)。如圖3-21所示,程序中選擇了返回一個一維標(biāo)量數(shù)組,數(shù)組中每個成員是來自一個通道的數(shù)據(jù)。這個函數(shù)的highlimit參數(shù)設(shè)置被測信號的最高和最低電平值,應(yīng)用于所有通道。在通道名中注意使用逗號隔開各個通道,或用冒號說明通道的范圍。圖3-21多通道單點采樣編程示例使用易用函數(shù)的好處是我們在程序框圖中只需要一個圖標(biāo)就可以完成作業(yè),只有很少的基本輸入?yún)?shù),而且具有內(nèi)置的出錯檢查功能。但是由于這些函數(shù)缺乏編程的靈活性,因而不能用它們來實現(xiàn)數(shù)據(jù)采集設(shè)備某些更復(fù)雜的功能,例如觸發(fā)或間斷的掃描。此外,這些函數(shù)每次被調(diào)用時總要進行硬件設(shè)置,一旦需要程序高速度、高效率地運行,這些設(shè)置會降低處理數(shù)據(jù)的速度。在這種情況下應(yīng)該使用中級函數(shù),它們只在第一次被調(diào)用時進行硬件設(shè)置,比應(yīng)用函數(shù)具有更高的功能。
圖3-22所示的數(shù)據(jù)采集程序使用中級模擬輸入函數(shù)AISingleScan執(zhí)行多通道單點采樣。AISingleScan函數(shù)返回一次掃描的數(shù)據(jù)。圖3-22使用中級函數(shù)多通道單點模擬輸入如果只設(shè)置一個通道,則只返回一個點數(shù)據(jù)。這個函數(shù)要和AICONFIG函數(shù)一起使用。這個例子中只調(diào)用AICONFIG函數(shù)一次,把它放在While循環(huán)外邊。LabVIEW用AIConfig函數(shù)設(shè)置通道、輸入極限和緩沖區(qū)并產(chǎn)生一個任務(wù)標(biāo)識。任務(wù)標(biāo)識和出錯信息傳遞給While循環(huán)中的AISingleScan函數(shù),選擇AISingleScan函數(shù)返回的數(shù)據(jù)類型為標(biāo)量數(shù)組,數(shù)組中每個元素是一個指定通道的數(shù)據(jù)。BuildArray函數(shù)在這里的作用是建立一個只有一行的二維數(shù)組,這樣在Chart中顯示數(shù)據(jù)是通過選中TransposeArray選項,把它按一列數(shù)據(jù)處理,就可以把每個通道的數(shù)據(jù)顯示在一條圖線中。
WaitUntilNextmsMultiple函數(shù)起控制循環(huán)時間的作用。按下停止鍵或發(fā)生錯誤時循環(huán)就停下來。一旦循環(huán)終止,SimpleErrorHandler函數(shù)在屏幕上顯示所發(fā)生的錯誤。
這個例子采用軟件定時采集數(shù)據(jù)。在這種方式下,CPU系統(tǒng)時鐘控制采集數(shù)據(jù)的速率。但系統(tǒng)時鐘對程序的控制可以被用戶的干預(yù)打斷,例如前面板上的一些動作。所以只有在不需要精度太高的采集速率時才使用軟件定時模擬輸入。
2.使用DAQmx單點采樣
使用DAQmx函數(shù)進行多通道單點采樣的程序如圖3-23
所示。圖3-23DAQmx多通道單點模擬輸入
DAQmxCreateVirtualChannel函數(shù)的子VI選擇為模擬輸入,它新建一組虛擬通道,其中包括物理通道Dev1/ai0和Dev1/ai1,即設(shè)備1號和0號通道,設(shè)置信號連接方式為參考單端。DAQmxRead函數(shù)的子VI選擇為多通道單點采樣,返回
雙精度浮點數(shù)組。最后DAQmxTaskClear函數(shù)清除數(shù)據(jù)采集任務(wù)。
這個例子與圖3-22所示的例子看上去很相似,但它們使用的是不同的API。如果需要進行快速的數(shù)據(jù)采集任務(wù),那么使用DAQmx效果會更好。如果使用中需要在DAQmx與傳統(tǒng)DAQ方式之間切換,則應(yīng)特別注意:在使用DAQmx以后,要清除任務(wù)才可以使用傳統(tǒng)DAQ,而使用傳統(tǒng)DAQ以后,必須進行設(shè)備復(fù)位,才能使用DAQmx。
此處的復(fù)位可采用以下兩種方法:
(1)右鍵單擊MAX的TraditionalNI-DAQDevices項,彈出快捷菜單,選擇ResetDriverforTraditionalNI-DAQ項。
(2)調(diào)用NI-Measurements→DataAcquisition→CalibrationandConfiguration函數(shù)子模板的DeviceReset函數(shù)。3.3.2多點采樣
1.使用傳統(tǒng)DAQ多點采樣
在使用傳統(tǒng)DAQ方法進行多點數(shù)據(jù)采集時,LabVIEW要在內(nèi)存中分配一塊緩沖區(qū)。在使用過程中,根據(jù)數(shù)據(jù)采集方式的不同,緩沖區(qū)的使用方式也不同,在編程時對此應(yīng)有所了解。
1)采集有限量的數(shù)據(jù)
在采集有限量的數(shù)據(jù)時,緩沖區(qū)大小等于程序中設(shè)置的每通道采樣數(shù)乘以通道數(shù)。數(shù)據(jù)采集設(shè)備按照程序中指定的采樣率采集信號,數(shù)據(jù)被傳遞到緩沖區(qū)內(nèi)。采集到整個樣本后緩沖區(qū)被數(shù)據(jù)填滿,然后LabVIEW將數(shù)據(jù)傳遞到程序中進行分析、存儲及顯示。
(1)使用易用函數(shù)進行有限量數(shù)據(jù)采集。圖3-24所示的程序使用易用模擬輸入函數(shù)AIAcquireWaveforms從多個通道采集波形,這個函數(shù)僅需要設(shè)備名、通道、采樣數(shù)和采樣頻率幾個輸入?yún)?shù)。如果需要在程序中設(shè)置為“增”,則還需要輸入上下限兩個參數(shù)。圖3-24傳統(tǒng)DAQ采集單個波形默認(rèn)情況下,AIAcquireWaveforms返回的數(shù)據(jù)類型是波形組,其中每個成員是一個通道的數(shù)據(jù),程序中用一個WaveformGraph的各條曲線來顯示這個數(shù)據(jù)。程序中還用IndexArray函數(shù)解析出通道參數(shù)中第一個通道,即0通道的信號。Waveform—AnalogWaveform函數(shù)子模板的WaveformMinMax函數(shù)取得0通道信號的正值和負(fù)峰值,然后計算出峰值和負(fù)值。
DataAcquisition→AnalogInput函數(shù)子模板中與AIAcquireWaveforms函數(shù)相鄰的AIAcquireWaveforms函數(shù)用來采集單通道的數(shù)據(jù),用法與AIAcquireWaveforms函數(shù)相似。
(2)使用中級函數(shù)進行有限量數(shù)據(jù)采集。中級函數(shù)可以對數(shù)據(jù)采集過程提供更多控制,例如觸發(fā)、耦合、采集定時、復(fù)位以及加的硬件功能等,同時還可以控制數(shù)據(jù)采集過程的每一步何時發(fā)生。圖3-25所示是LabVIEW示例程序GettingStartAnalogInput的程序框圖,使用這些中級模擬輸入函數(shù)時,必須連接TaskID參數(shù)以確認(rèn)數(shù)據(jù)采集操作和數(shù)據(jù)采集的通道設(shè)置并確保程序按正確順序執(zhí)行。圖3-25使用中級函數(shù)采用簡單緩沖區(qū)技術(shù)采集多個波形程序示例在圖3-25所示的程序中:
AICONFIG函數(shù)用來設(shè)置采樣時的各個參數(shù),例如由哪些通道讀數(shù)、使用緩沖區(qū)的大小、采樣率等。程序中的numberofscantoacquire實際就是連接的buffersize參數(shù),如果一次把緩沖區(qū)的數(shù)據(jù)讀回來,緩沖區(qū)的大小就等于采樣數(shù)。
AISTART函數(shù)用來指定程序中用于開始采樣的那些參數(shù),即用戶初始化設(shè)置的參數(shù)。
AIREAD函數(shù)設(shè)置從采樣緩沖區(qū)讀取數(shù)據(jù)的參數(shù),例如每次讀取的數(shù)據(jù)量等。采樣完成后,調(diào)用AICLEAR函數(shù)把taskID清除,從而將采樣所用的內(nèi)存緩沖區(qū)和其他資源釋放。如果這些函數(shù)中有任意一個發(fā)生了錯誤,程序就將出錯信息通過其余各個函數(shù)依次傳到SimpleErrorHandler函數(shù),這個函數(shù)將出錯信息告知用戶。
程序中選擇AIREAD函數(shù)返回的數(shù)據(jù)為二維數(shù)組。Graph顯示二維數(shù)組數(shù)據(jù)時默認(rèn)情況下是用每一條圖線反映一行的數(shù)據(jù)。而數(shù)據(jù)采集函數(shù)返回的數(shù)據(jù)中每個通道的數(shù)據(jù)在數(shù)組的一列中,所以我們必須變換二維數(shù)組。變換數(shù)組可以簡單地在前面板的Graph邊框上彈出菜單,然后選擇TransposeArray。如果把圖3-25中的AISTART和AIREAD這一部分放在一個While循環(huán)中,就可以使這個程序連續(xù)運行,即可每次采集一個緩沖區(qū)的數(shù)據(jù)并顯示出來,直到按下“停止”按鈕或者發(fā)生錯誤。
(3)可以多次啟動的有限數(shù)據(jù)采集。有時并不需要連續(xù)不斷地采集相鄰的數(shù)據(jù),而只希望采集一定數(shù)目的數(shù)據(jù),這時可以采用如圖3-26所示的LabVIEW示例程序AcquireN-Multi-Start。
這個例子與圖3-25所示有限次數(shù)的數(shù)據(jù)模擬輸入程序類似,不同的是它采用了兩個While循環(huán)和一個選擇結(jié)構(gòu)。圖3-26可以多次啟動的簡單緩沖波形采集每次外層的While循環(huán)執(zhí)行完后就進入內(nèi)層While循環(huán)等待,直到單擊前面板的停止按鈕使整個程序停止,或單擊前面板的“Start”按鈕再次進入外層循環(huán)采集數(shù)據(jù)。由于AICONFIG函數(shù)在一個以循環(huán)數(shù)等于0為條件的選擇結(jié)構(gòu)中,所以只在程序執(zhí)行第一次循環(huán)時對硬件進行設(shè)置,以后就按已有的設(shè)置操作。AISTART函數(shù)和AIREAD函數(shù)在while循環(huán)每次執(zhí)行時,按照程序設(shè)置的采樣率返回數(shù)據(jù)。用這個程序可以控制采樣頻率,但是不能準(zhǔn)確設(shè)置程序何時開始采集每組數(shù)據(jù)。
2)采集連續(xù)數(shù)據(jù)
如果需要采集的數(shù)據(jù)比較多,計算機內(nèi)存中裝不下,或者需要在一個很長的時間內(nèi)周期性地采集數(shù)據(jù),就不能再簡單地使用內(nèi)存緩沖區(qū),而應(yīng)該循環(huán)使用緩沖區(qū)。圖3-27說明了采用循環(huán)緩沖區(qū)技術(shù)時如何實現(xiàn)在LabVIEW接收數(shù)據(jù)的同時,讓數(shù)據(jù)采集設(shè)備在后臺連續(xù)采集數(shù)據(jù)。圖3-27循環(huán)緩沖區(qū)工作方式連續(xù)采集數(shù)據(jù)與采集有限數(shù)據(jù)的不同之處在于LabVIEW向緩沖區(qū)存放數(shù)據(jù)和由緩沖區(qū)中讀取數(shù)據(jù)的方式不同。
采集有限數(shù)據(jù)時是一次把緩沖區(qū)全部放滿,然后全部讀出。但是連續(xù)采集數(shù)據(jù)時,每次只在緩沖區(qū)的一部分放進數(shù)據(jù),當(dāng)?shù)竭_緩沖區(qū)底部時,它轉(zhuǎn)回到緩沖區(qū)頂部再次填充同一個緩沖區(qū)。與此同時,緩沖區(qū)的數(shù)據(jù)一塊一塊地被讀出。這就形成連續(xù)數(shù)據(jù)采集的過程。在這個過程中要保證程序從緩沖區(qū)的一個位置讀取數(shù)據(jù),同時數(shù)據(jù)進入緩沖區(qū)的另外的位置,這樣才能有可供讀取的數(shù)據(jù),尚未讀取的數(shù)據(jù)也不會被更新的數(shù)據(jù)覆蓋掉。要保證這一點必須解決以下兩個問題:
(1)程序從緩沖區(qū)讀取數(shù)據(jù)的速度不能比數(shù)據(jù)放進緩沖區(qū)的速度快,否則當(dāng)程序去讀取數(shù)據(jù)時,數(shù)據(jù)還沒采集完,LabVIEW就在底層等待我們要求的數(shù)據(jù)采集完后再返回數(shù)據(jù)。這樣會影響其他并行程序的執(zhí)行,從整體上降低系統(tǒng)執(zhí)行的
效率。
(2)程序從緩沖區(qū)讀取數(shù)據(jù)的速度不能太慢,否則緩沖區(qū)中沒來得及讀取的數(shù)據(jù)會被覆蓋,同時返回一個出錯信息,告知用戶從緩沖區(qū)讀取的數(shù)據(jù)是被覆蓋過的數(shù)據(jù)。解決這兩個問題的辦法是合理地設(shè)置緩沖區(qū)大小、掃描率和一次讀取的掃描數(shù)這三個參數(shù)。如果發(fā)生從循環(huán)緩沖區(qū)讀取數(shù)據(jù)太慢,沒讀的數(shù)據(jù)會被覆蓋掉時,LabVIEW則會返回一個錯誤代碼10846。為解決這個問題,可以增加緩沖區(qū)大小使得填滿它需要更多時間,這樣能給程序更多的時間去讀取數(shù)據(jù);或減慢掃描率,這就降低了緩沖區(qū)被填滿的速度,同樣也給了程序更多的時間去讀取數(shù)據(jù);還可以增加每次讀取數(shù)據(jù)的數(shù)量,這樣每次可從緩沖區(qū)取更多的數(shù)據(jù),有效地減少了訪問緩沖區(qū)的次數(shù),避免它被填滿,通過檢查AIREAD函數(shù)的掃描滯后scanbacklog參數(shù),觀察讀取數(shù)據(jù)后,還有多少數(shù)據(jù)留在循環(huán)緩沖區(qū)中,可以及早發(fā)現(xiàn)這個問題。由于要進行緩沖區(qū)的維護,進行連續(xù)的數(shù)據(jù)采集只能用中級或高級函數(shù)進行。以下通過一些示例程序說明如何進行連續(xù)數(shù)據(jù)采集的模擬輸入。
圖3-28所示的是一個基本的連續(xù)數(shù)據(jù)采集程序。它與圖3-25所示的采集有限數(shù)量數(shù)據(jù)示例程序最大的區(qū)別在于,AIREAD函數(shù)的采集掃描數(shù)numberofscanstoacquire參數(shù)被設(shè)置為0,這表示讓數(shù)據(jù)采集設(shè)備在后臺連續(xù)采集數(shù)據(jù)送進緩沖區(qū)。圖3-28連續(xù)采集數(shù)據(jù)的示例程序
AICONFIG函數(shù)設(shè)置了通過數(shù)據(jù)和緩沖區(qū)大小,緩沖區(qū)中可以容納4000次掃描的數(shù)據(jù)。程序開始運行后,將按照AISTART函數(shù)設(shè)置的采樣率向緩沖區(qū)中輸入數(shù)據(jù)。在while循環(huán)中反復(fù)調(diào)用AIREAD函數(shù)到緩沖區(qū)中讀取數(shù)據(jù),并顯示在一個Chart中。一次讀取的數(shù)據(jù)設(shè)置為1000個掃描。當(dāng)讀取數(shù)據(jù)后,緩沖區(qū)中剩的數(shù)據(jù)大于1000個掃描時,就按緩沖區(qū)中剩的掃描數(shù)執(zhí)行。程序中的Max&Min函數(shù)用于確定這兩個數(shù)中哪一個大。不使用Max&Min函數(shù)程序也能工作。但是這個函數(shù)能更好地控制掃描滯后的數(shù)量,避免數(shù)據(jù)被覆蓋。
這個程序適合在長時間周期內(nèi)觀察數(shù)據(jù),直到出現(xiàn)錯誤或按下“停止”鍵。
3)使用數(shù)據(jù)采集事件設(shè)置的異步連續(xù)采樣
前面介紹方法的主要優(yōu)點是在每次調(diào)用AIREAD函數(shù)之間可以處理數(shù)據(jù),但它的局限是同步采集,也就是一旦調(diào)用AIREAD函數(shù),就不能再執(zhí)行其他任何任務(wù),直到AIREAD函數(shù)返回采集到的數(shù)據(jù)。如果數(shù)據(jù)采集設(shè)備沒有完成數(shù)據(jù)采集,程序其他部分就只能閑置在那里等待它結(jié)束。為了提高程序的執(zhí)行效率,那就要用異步采集的方法,這也是程序動態(tài)控制的一種方式。具體方法是使用事件設(shè)置。這里的事件在LabVIEW中稱為Occurrence,英文原意為比event小的事件,一般Occurrence函數(shù)在AdvancedSynchronization子模板中,數(shù)據(jù)采集事件設(shè)置的函數(shù)在NIMeasurementsDataAcquisitionCalibrationandConfiguration函數(shù)子模板中。只要加入數(shù)據(jù)采集事件,就可以仍然用幾個中級數(shù)據(jù)采集函數(shù),從多個通道連續(xù)的異步采集數(shù)據(jù)。
圖3-29所示的是LabVIEW示例程序ContAcq&Chart(AsyncOccerrence),這是一個通過設(shè)置數(shù)據(jù)采集事件實現(xiàn)異步采集的例子。圖3-29使用事件設(shè)置實現(xiàn)異步連續(xù)采集數(shù)據(jù)程序中第一個DAQOccurrenceConfig函數(shù)設(shè)置一個數(shù)據(jù)采集事件。在這個例子里數(shù)據(jù)采集事件是:每次采集到與A值相等的掃描數(shù)。A值是操作者設(shè)置的每次讀取的掃描數(shù),在While循環(huán)中,WaitOccurrence函數(shù)在后臺睡眠,也就有效地把While循環(huán)置于睡眠狀態(tài),這時可以為計算機的處理器騰出時間去處理其他任務(wù)或執(zhí)行其他程序。當(dāng)設(shè)置的數(shù)據(jù)采集事件發(fā)生后,即采集到事先指定數(shù)量的數(shù)據(jù),LabVIEW通知WaitonOccurrence函數(shù)停止等待,由于WaitonOccurrence函數(shù)的超時參數(shù)timeout連接到包含有AIREAD函數(shù)的選擇結(jié)構(gòu)的選擇端口上,就一定在WaitonOccurrence函數(shù)停止等待后,才會調(diào)用AIREAD。在等待數(shù)據(jù)采集時,如果數(shù)據(jù)采集事件超時,超時輸出值就是Ture,AIREAD函數(shù)將不會被調(diào)用。數(shù)據(jù)采集結(jié)束時,DAQOccurrenceConfig函數(shù)再次被調(diào)用,清除所有事件。
這個程序中的WaitOccurrence函數(shù)除了設(shè)置的事件外還有兩個輸入?yún)?shù)。一個是超時毫秒值mstimeout,程序中為它輸入的是掃描數(shù)除以掃描率,即采樣時間,轉(zhuǎn)換為毫秒后再加上1000ms,即允許超時1s;另一個是忽略以前事件ignoreprevious,程序中設(shè)為F,即不忽略以前事件,如果在開始等待前已經(jīng)采集夠了數(shù)據(jù),就不需再等待了。
4)傳統(tǒng)DAQ中實用函數(shù)的應(yīng)用與性能優(yōu)化
在傳統(tǒng)DAQ數(shù)據(jù)采集函數(shù)子模板的模擬輸入和模擬輸出子模板中各有一組實用數(shù)據(jù)采集函數(shù)。模擬輸入的實用數(shù)據(jù)采集函數(shù)在AnalogInputUtilities函數(shù)子模板中,這里的3個函數(shù)分別用于單點采集、多點采集和連續(xù)采集,都可以用于單通道和多通道。這些函數(shù)都有一個iteration參數(shù),把這些函數(shù)放在循環(huán)中時應(yīng)該把循環(huán)結(jié)構(gòu)的循環(huán)數(shù)端口與這個參數(shù)連接起來,如圖3-30所示。由于這些中級函數(shù)的內(nèi)部結(jié)構(gòu)與圖3-26所示的程序類似,這樣設(shè)置以后它就只在第一次循環(huán)時進行硬件設(shè)置,以后一直使用這個設(shè)置,從而可提高程序的運行效率,把停止按鈕連接到clearacquisition參數(shù),在程序結(jié)束時釋放分配的系統(tǒng)資源。在程序運行中需要更改設(shè)置時也可以使用這個參數(shù),清除原有設(shè)置。圖3-30實用函數(shù)連續(xù)采集數(shù)據(jù)
2.使用DAQmx多點采樣
使用DAQmx進行波形采集編程要遠比傳統(tǒng)DAQ快捷,因為我們可以通過MAX或數(shù)據(jù)采集助手進行數(shù)據(jù)采集設(shè)置,然后由LabVIEW自動生成代碼。也就是說,我們可以更多考慮測試的目標(biāo),而不必過多考慮過程的細節(jié)。
進行數(shù)據(jù)采集設(shè)置的方法在3.2節(jié)已經(jīng)進行了詳細介紹。
1)采集有限數(shù)量的數(shù)據(jù)
在采集有限數(shù)量的數(shù)據(jù)時,應(yīng)先在DAQ助手的TaskTiming項中選擇“AcquireNSample”。如果生成代碼,則選擇“ConfigurationandExample”項,程序框圖如圖3-31所示。圖3-31DAQmx采集有限數(shù)據(jù)在這個程序中任務(wù)設(shè)置被單獨放在一個VI中。DAQmxCreateTask函數(shù)首先創(chuàng)建一個DAQmx數(shù)據(jù)采集任務(wù)。
DAQmxCreateVirtualChannel函數(shù)新建一個虛擬通道,加入到數(shù)據(jù)采集任務(wù)中,這里還設(shè)置了使用的物理通道、虛擬通道名、測量電壓值所用的單位、最大值和最小值、被測信號連續(xù)方式、標(biāo)度等參數(shù)。DAQmxTiming函數(shù)設(shè)置了采樣率和采樣模式等參數(shù),此外,還設(shè)置了每通道采樣數(shù)。
頂層程序只有一個DAQmxRead函數(shù)。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 駕駛實操模擬考試題及答案
- 在校生實習(xí)勞務(wù)協(xié)議5篇
- 2025江蘇連云港市贛榆區(qū)教育局所屬學(xué)校招聘新教師69人模擬試卷附答案詳解(突破訓(xùn)練)
- 公司信用體系建設(shè)工作承諾函(3篇)
- 場景化任務(wù)管理工具與進度協(xié)同更新
- 鋼琴老師的考試題及答案
- 2025年幼兒健康考試試題及答案
- 達州統(tǒng)考真題數(shù)學(xué)及答案
- 菏澤教資考試試題及答案
- 2025年北京省考行測真題及答案
- 全國公開課一等獎初中化學(xué)九年級上冊(人教2024年新編)《跨學(xué)科實踐活動-制作模型并展示科學(xué)家探索物質(zhì)組成與結(jié)構(gòu)的歷程》課件
- 科研誠信培訓(xùn)課件
- GB/T 31771-2024家政服務(wù)母嬰護理服務(wù)質(zhì)量規(guī)范
- 無人機集群協(xié)同與對抗技術(shù)
- 2024年成人高考成考(高起專)語文試卷與參考答案
- 糖尿病酮癥酸中毒課件
- 壓力性損傷安全警示教育
- 1248國開電大本科《公共部門人力資源管理》自檢自測試題及答案
- 入黨申請書專用紙-A4單面打印
- 魅力歌劇-《飲酒歌》課件 2024-2025學(xué)年人音版初中音樂九年級上冊
- 蘇科版八年級物理下冊10.4浮力 教學(xué)設(shè)計
評論
0/150
提交評論