第6章 數(shù)字量輸入輸出和計數(shù)器課件_第1頁
第6章 數(shù)字量輸入輸出和計數(shù)器課件_第2頁
第6章 數(shù)字量輸入輸出和計數(shù)器課件_第3頁
第6章 數(shù)字量輸入輸出和計數(shù)器課件_第4頁
第6章 數(shù)字量輸入輸出和計數(shù)器課件_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第6章數(shù)字量輸入/輸出和計數(shù)器6.1數(shù)字量輸入/輸出6.2計數(shù)器6.3非NI產(chǎn)品的數(shù)字量輸入/輸出控制本章小結練習與思考第6章數(shù)字量輸入/輸出和計數(shù)器6.1數(shù)字量輸入/輸6.1數(shù)字量輸入/輸出

一般數(shù)據(jù)采集卡上都有數(shù)字量輸入/輸出(DI/O)功能,用于實現(xiàn)數(shù)據(jù)采集的觸發(fā)、控制及計數(shù)等,也可以完成對外部開關量的采集、繼電器和電子開關的控制等。DI/O按TTL邏輯電平設計,其邏輯低電平在0~0.7V之間,高電平在3.4~5.0V之間。

將數(shù)采板上多路DI/O組成一組后稱為端口。?一個端口由多少路DI/O組成是依據(jù)其數(shù)采板而定的,在大多數(shù)情況下,4或8路數(shù)字I/O組成一個端口。當讀/寫端口時,可以在同一時刻設置或獲取多路DI/O的狀態(tài)。6.1數(shù)字量輸入/輸出數(shù)字量輸入/輸出的應用分為以下兩類:立即型(非鎖存型)和定時型(鎖存型)。在立即型情況下,當調(diào)用數(shù)字I/O函數(shù)后會立即更新或讀取數(shù)字量某一路或端口的狀態(tài)。在定時型情況下,可以使用外部信號來控制數(shù)字量數(shù)據(jù)的傳輸。

與模擬量的輸入/輸出類似,LabVIEW中傳統(tǒng)DAQVI關于DI/O的VI也分為低、中、高三個等級,如圖6-1所示。數(shù)字量輸入/輸出的應用分為以下兩類:立即型(非鎖存型)和圖6-1傳統(tǒng)DAQVI的DI/O模板圖6-1傳統(tǒng)DAQVI的DI/O模板1.簡易函數(shù)(EasyDigitalI/OVI)

簡易函數(shù)位于圖6-1中的第一行,包括ReadfromDigitalLine.vi、ReadfromDigitalPort.vi、WritetoDigitalLine.vi和WritetoDigitalPort.vi四個子VI,其圖標和端口如圖6-2所示。

前兩個子VI分別用來立即讀入某一路或某一端口的數(shù)字量,后兩個子VI分別用來立即輸出數(shù)字量到某一路或某一端口。其中:

portwidth:端口寬度。

device:設備號。1.簡易函數(shù)(EasyDigitalI/OVI)

圖6-2EasyDigitalI/OVI端口圖6-2EasyDigitalI/OVI端口digitalchannel:需要輸入/輸出的數(shù)字信號所在通道的名稱或通道號。通道名是已經(jīng)配置好的某個數(shù)字通道的名稱。在輸入通道號時,0表示端口0,1表示端口1,依次類推。當輸入通道名時,portwidth將被忽略。

line:digitalchannel所指定端口中需要讀入或輸出的某一路的編號。

iteration:缺省值為0,此時,每調(diào)用一次該子VI,就要對數(shù)采板配置一次。當重復調(diào)用該函數(shù)時,為了避免系統(tǒng)重復設置數(shù)采板,可以設置iteration端為正數(shù)。digitalchannel:需要輸入/輸出的數(shù)字信號linestate:需要輸出的數(shù)字信號的狀態(tài)或讀取的某一路數(shù)字信號的狀態(tài):高(true)或低(false)。

pattern:需要輸出的數(shù)字量或從所讀端口讀取的數(shù)字量(十進制形式)的模式。

注意:當只調(diào)用一個EasyDigitalI/OVI實例讀/寫某個通道或端口時,程序是不會出錯的。但是當再次調(diào)用函數(shù)時會通過改變移位寄存器的狀態(tài)來重新改變DI/O的設置,故不能調(diào)用多個VI實例來控制多個端口。在這種情況下可以通過使用后面將討論的高級VI來達到該目的。linestate:需要輸出的數(shù)字信號的狀態(tài)或讀取的某2.中級函數(shù)(IntermediateDigitalI/OVI)

中級函數(shù)包括圖6-1中間一行的五個子VI和最后一行的兩個子VI。

如果需要大數(shù)量的數(shù)據(jù)傳輸,可以使用非同步中斷驅(qū)動方式傳輸,這樣不至于在傳輸數(shù)據(jù)時占用計算機的資源。使用這種方式傳輸數(shù)據(jù)時,計算機內(nèi)存緩沖被分配到后臺線程輸入或輸出緩沖中,在這種情況下可使用這些子VI。緩沖式數(shù)字IO程序設計的順序大致如下:

DIOCONFIG:設置一組端口為輸入或輸出模式;創(chuàng)立

數(shù)據(jù)緩沖,產(chǎn)生任務的唯一標識符,它將會被下面的DIO函數(shù)使用。2.中級函數(shù)(IntermediateDigitalDIOREAD:返回從數(shù)字量緩沖中掃描的數(shù)據(jù);返回緩沖中的數(shù)據(jù)剩余量;返回在一定時限中操作的初始化是否成功信息。

DIOWRITE:用于輸出操作時更新緩沖中的數(shù)據(jù)。當?shù)群虻奈帐中盘柊l(fā)生時,端口將被新的緩沖數(shù)據(jù)更新。假如在一定時限內(nèi)握手信號沒有出現(xiàn),將返回一錯誤信息。

DIOSTART:啟動緩沖式DIO操作。設定更新或讀取的點數(shù),當輸入0時將連續(xù)操作。

DIOWAIT:等待與任務標識符taskID相關任務的數(shù)字量輸入或輸出操作的完成。

DIOCLEAR:停止操作,同時清除與taskID任務相關的緩沖。DIOREAD:返回從數(shù)字量緩沖中掃描的數(shù)據(jù);返回緩沖注意:當使用這些VI時,數(shù)采板必須支持握手信號。

3.高級函數(shù)(AdvancedDigitalI/OVI)

高級函數(shù)包括兩部分,一部分稱為digitalport,可以用來立刻輸入或輸出某一路(某一端口)的數(shù)字量,類似于簡易函數(shù)的操作;另一部分稱為digitalgroup,可用于多個端口進行立即型、握手型或定時型的輸入/輸出。高級函數(shù)是最底層的函數(shù),較少直接采用,它們是構成簡易函數(shù)和中級函數(shù)的基礎。注意:當使用這些VI時,數(shù)采板必須支持握手信號。

6.2計數(shù)器

6.2.1計數(shù)器概述

對于一個成熟的數(shù)據(jù)采集和控制系統(tǒng)來說,一個非常重要的要求就是能操縱和協(xié)調(diào)多種不同時間的參數(shù)和事件。這就需要某些硬件機構完成高精度的定時工作,因此這些機構中最基本的功能塊就是計數(shù)器。

計數(shù)器可以接收或輸出TTL兼容信號,一個能被計數(shù)器測得的信號,至少其特征不能低于能被該計數(shù)器識別的最小脈沖寬度、上升時間、下降時間等。

圖6-3所示為計數(shù)器的簡化模型:一個門控輸入、一個時鐘輸入、一個計數(shù)寄存器、一個輸出。6.2計數(shù)器

6.2.1圖6-3計數(shù)器的簡化模型圖6-3計數(shù)器的簡化模型門控輸入端可以控制計數(shù)的開始和結束,例如為高電位時計數(shù)或低電位時計數(shù)等。

時鐘輸入端為計數(shù)信號,可設置為上升沿或下降沿計數(shù)。

內(nèi)部計數(shù)寄存器的計數(shù)方式可設為遞增或遞減方式,通過讀取其值即可知道信號狀態(tài)改變的次數(shù)。

輸出端可輸出多種波形,或者用于計數(shù)器的串級使用,從而增大計數(shù)器的量程。

有關計數(shù)器的詳細內(nèi)容可參看相關的書籍。門控輸入端可以控制計數(shù)的開始和結束,例如為高電位時計數(shù)或6.2.2LabVIEW計數(shù)器VI

因為直接通過低層編程使用定時計數(shù)器芯片是非常困難的,所以LabVIEW提供了一系列高級的定時/計數(shù)器庫函數(shù)。

LabVIEW計數(shù)器VI被分為了三個類型的模板,如圖6-4

所示。

EasyCounterVI:較簡單的且經(jīng)常使用的計數(shù)器VI。如用于事件定時/計數(shù)、產(chǎn)生單個脈沖、產(chǎn)生脈沖序列、測量脈沖寬度或周期以及頻率測量等常用的定時計數(shù)操作。這些VI使用時在前面板都有錯誤處理和詳盡的操作指示。6.2.2LabVIEW計數(shù)器VI

因為直接通過低IntermediateCounterVI:主要用于設置和控制計數(shù)器的操作,這些VI比EasyCounterVI更靈活。所有的中級計數(shù)器VI都使用了LabVIEW的錯誤處理,通過它可以建立自己的錯誤處理路徑。這些VI使用時在前面板都有詳盡的操作指示。

?AdvancedCounterVI:高級計數(shù)器VI主要用于作為

創(chuàng)建其他數(shù)字VI的基本模塊。這些VI是最靈活也是最復雜

的。典型地說,用于需要多設置和控制的應用中。與中級計

數(shù)器VI一樣,使用高級計數(shù)器VI時也可以建立自己的錯誤處理路徑。IntermediateCounterVI:主要圖6-4LabVIEW計數(shù)器VI模板圖6-4LabVIEW計數(shù)器VI模板在大多數(shù)情況下,我們會使用EasyCounterVI,下面將介紹計數(shù)器的常用操作:事件計數(shù)/定時、產(chǎn)生單個脈沖、產(chǎn)生脈沖序列、測量脈沖寬度或周期以及頻率測量等。

1.事件計數(shù)/定時

當對外部事件進行計數(shù)/定時時,可以采用CountEventsorTime子VI,其圖標和端口如圖6-5所示。

例如,SOURCE輸入口指定信號上升或下降沿出現(xiàn)的次數(shù)。device和counter輸入端指定了是哪一塊數(shù)采板的哪一個計數(shù)器端口將接收事件。sourceedge確定該事件是上升沿還是下降沿(0為上升沿,1為下降沿,默認為0)。在大多數(shù)情況下,我們會使用EasyCounterVI圖6-5事件計數(shù)/定時VI端口圖6-5事件計數(shù)/定時VI端口sourceedge確定該事件是上升沿還是下降沿(0為上升沿,1為下降沿,默認為0)。當eventsource/timebase的輸入端值等于零時,計數(shù)器將對SOURCE端口輸入的信號進行計數(shù)。當eventsource/timebase被設置為有效的內(nèi)部時鐘頻率時,計數(shù)器將對SOURCE口輸入的內(nèi)部時鐘信號進行計數(shù)。根據(jù)使用的數(shù)采板的不同,其有效內(nèi)部時鐘頻率也不同,如使用DAQ-STC芯片的數(shù)采板其內(nèi)部有效時鐘頻率可為20MHz和100kHz。countersize輸入設置了最大計數(shù)容量,當超過該值后計數(shù)器將會溢出并重新清零。DAQ-STC芯片上24位的計數(shù)器在溢出前其最大計數(shù)容量為16MB。start/restart輸入端控制計數(shù)器啟動/停止操作。sourceedge確定該事件是上升沿還是下降沿(0為count輸出端返回的是當前計數(shù)器寄存器的值。secondssincestart返回自計數(shù)器啟動后的時間值。secondssincelastcall返回自計數(shù)器寄存器被讀取后的時間值。只有當eventsource/

timebase輸入端為有效內(nèi)部時鐘時,這兩個返回值才有實際

意義。

2.產(chǎn)生脈沖

產(chǎn)生脈沖是計數(shù)器另一較常用的功能。既可以用GenerateDelayedPulseVI在OUT口輸出一個脈沖,也可以用GeneratePulseTrainVI在OUT口輸出一個脈沖序列。這兩個VI的圖標和端口如圖6-6所示。count輸出端返回的是當前計數(shù)器寄存器的值。secon圖6-6GenerateDelayedPulseVI端口和GeneratePulseTrainVI端口圖6-6GenerateDelayedPulse使用這兩個VI時需要設定以下參數(shù):脈沖極性(pulsepolarity)、延遲(pulsedelay)、幅寬(pulsewidth)(延遲和幅寬之和為周期)以及占空比(dutycycle)。脈沖極性決定了脈沖是高還是低。

占空比定義如下:dutycycle=width/(Delay+Width)。脈沖各參數(shù)的含義如圖6-7所示。圖6-7脈沖各參數(shù)的含義使用這兩個VI時需要設定以下參數(shù):脈沖極性(pulse1)發(fā)生單個脈沖

GenerateDelayedPulseVI輸出由pulsepolarity、pulsedelay和pulsewidth參數(shù)共同決定的單個脈沖。device和counter輸入端指定了是哪一塊數(shù)采板的哪一個計數(shù)器輸出單個脈沖。gatemode設置了計數(shù)器工作的門限模式(具體使用時,請給計數(shù)器的GATE輸入口接一外部門限信號)。timebasesource決定了哪個時鐘用于延遲和幅寬。假如使用內(nèi)部時鐘,那么數(shù)采板上的時鐘作為延遲和幅寬的計時可達到秒的量級。假如使用外部時鐘,應確保把外部的時基信號連接到計數(shù)器的SOURCE端口上,此時,延遲和幅寬的計時是以外部時基的周期數(shù)為單位的。taskID輸出包含了產(chǎn)生該脈沖所有設置的信息,是標識該任務的標識符??梢园裻askID輸出作為中級CounterStartVI的輸入?yún)?shù),從而可再發(fā)生同樣的脈沖。1)發(fā)生單個脈沖

GenerateDelayed2)發(fā)生脈沖序列

用GeneratePulseTrainVI可輸出一系列由pulsepolarity、frequency和dutycycle輸入?yún)?shù)決定的脈沖序列。device、counter和gatemode輸入?yún)?shù)的意義與GenerateDelayedPulseVI同名參數(shù)的意義相同。輸入?yún)?shù)numberofpulses設定了脈沖序列的長度,如果設為零,那么該VI將發(fā)生連續(xù)的脈沖序列。taskID輸出包含了產(chǎn)生該脈沖序列所有設置的信息,是標識該任務的標識符。當產(chǎn)生一有限長度的脈沖序列時,將使用taskIDofcounter-1返回值作為任務標識符??梢园裻askID或task,IDofcounter-1輸出作為中級CounterStartVI的輸入?yún)?shù),從而再發(fā)生同樣的脈沖序列。2)發(fā)生脈沖序列

用GeneratePulse當使用計數(shù)器發(fā)生一脈沖或脈沖序列時,用于啟動計數(shù)器操作的信號與控制脈沖周期的時基信號則不同步。在大多數(shù)情況下,啟動的脈沖信號并不是恰好在時基信號的上升沿出現(xiàn)的。也就是說,在啟動發(fā)生脈沖時會有一個大致的時基時鐘周期的誤差。這種誤差在使用軟件提供啟動計數(shù)器操作信號時也存在。

3.脈沖寬度測量

可以使用計數(shù)器來測量脈沖或脈沖序列的特性參數(shù)。MeasurePulseWidthorPeriodVI可用來測量連接到計數(shù)器GATE端口信號的脈沖寬度或周期。MeasureFrequencyVI可用來測量連接到計數(shù)器SOURCE端口脈沖序列信號的頻率。這兩個VI都用到了計數(shù)器的門限計數(shù)功能。當使用計數(shù)器發(fā)生一脈沖或脈沖序列時,用于啟動計數(shù)器操作的當測量一脈沖寬度時,需將被測的脈沖信號連接到計數(shù)器的GATE端口,將一已知頻率的信號Ts連接到計數(shù)器的SOURCE口,如圖6-8所示。當計數(shù)器被設為高門限計數(shù)模式時,計數(shù)器會在GATE口信號開始時對SOURCE口的脈沖個數(shù)進行計數(shù),在GATE口信號結束時停止計數(shù)。此時用計數(shù)寄存器的計數(shù)值乘以SOURCE口信號的周期即可算出被測信號的脈沖寬度。使用MeasurePulseWidthorPeriodVI時,SOURCE口用的是內(nèi)部時鐘,故只需將被測信號接到計數(shù)器的GATE口上。當測量一脈沖寬度時,需將被測的脈沖信號連接到計數(shù)器的GA圖6-8脈沖寬度測量的原理圖6-8脈沖寬度測量的原理MeasurePulseWidthorPeriodVI的圖標如圖6-9所示。其輸入?yún)?shù)typeofmeasurement決定是測量脈沖的周期還是測量脈沖的寬度。參看圖6-10,當該值取0時,測量正向脈沖的寬度;取1時,測量負向脈沖的寬度;取2時(默認),測量兩個相鄰上升沿的寬度,即周期;取3時,測量兩個相鄰下降沿的周期。timebase決定了用于被計數(shù)的內(nèi)部時鐘。若計數(shù)操作未在timelimit時間限制內(nèi)完成,timeout輸出為TRUE。pulsewidth/period返回測量的寬度或周期(以s為單位),count返回計數(shù)器寄存器的值。若counteroverflow?返回值為TRUE,表示發(fā)生計數(shù)器溢出,此時應當降低timebase內(nèi)部時鐘的頻率。若valid?輸出,則顯示了是否有足夠的內(nèi)部時鐘計數(shù)確保測量的脈沖寬度或周期值正確。MeasurePulseWidthorPerio圖6-9MeasurePulseWidthorPeriodVI圖6-9MeasurePulseWidthor圖6-10typeofmeasurement參數(shù)的設置圖6-10typeofmeasurement參數(shù)的4.頻率測量

計數(shù)器也可用于測量脈沖序列的頻率。給計數(shù)器的GATE口加上已知幅寬的門限脈沖,對該門限脈沖寬度內(nèi)的脈沖串個數(shù)進行計數(shù)即可算出被測信號的頻率。使用MeasureFrequencyVI時,數(shù)采板上第二個計數(shù)器提供門限脈沖,所以需要將第二個計數(shù)器的OUT輸出口連接到第一個計數(shù)器的GATE口,將被測信號接到第一個計數(shù)器的SOURCE口上。

注意:第二個計數(shù)器的選取取決于采用的第一個計數(shù)器,可參看有關的材料。例如打開MeasureFrequencyVI的前面板,即可看到相應的說明(參看圖6-11)。4.頻率測量

計數(shù)器也可用于測量脈沖序列的頻率。給計圖6-11MeasureFrequencyVI的部分前面板圖6-11MeasureFrequencyVI的可以使用MeasureFrequencyVI(見圖6-12)來測量脈沖序列信號的頻率。gatewidth設置了由第二個計數(shù)器(counter-1)所發(fā)脈沖的幅寬(以秒為單位)。countersize設置了計數(shù)器對一未知信號能進行的最大計數(shù)值(對于24位計數(shù)器來說為2的24次方)。假如需要對MeasureFrequencyVI中的counter-1進行門限觸發(fā),請給counter-1計數(shù)器的GATE輸入口上接入觸發(fā)信號;同時必須正確地設置gatemode與maximumdelaytogate參數(shù)。當這些設置好后,只要counter-1計數(shù)器在其GATE輸入口上接收到一上升沿觸發(fā)信號后,counter-1即在其OUT口輸出一已知的接于counterGATE輸入口的門限脈沖(見圖6-12)。frequency返回測得的被測信號的頻率(以Hz為單位)。valid??返回參數(shù)指示是否有錯誤發(fā)生??梢允褂肕easureFrequencyVI(見圖圖6-12MeasureFrequencyVI圖6-12MeasureFrequencyVI6.3非NI產(chǎn)品的數(shù)字量輸入/輸出控制

以上介紹的各個VI都只能用于NI公司的數(shù)采板,對于非NI公司的數(shù)采板怎樣對其數(shù)字量的輸入/輸出進行控制呢?下面我們選取一款PCI-2002數(shù)采板和一款基于ISA總線的D/A板HY-6031進行介紹。當前基于PCI總線和ISA總線的數(shù)采板應用比較廣泛,希望這些內(nèi)容能給讀者提供一些幫助。6.3非NI產(chǎn)品的數(shù)字量輸入/輸出控制

以上介1.基于ISA總線數(shù)采板的DI/O

基于ISA總線數(shù)采板的控制比較簡單,它不需要專用的驅(qū)動程序,可直接對其端口地址進行讀/寫操作,我們可以采用LabVIEW的PortI/O函數(shù)來實現(xiàn)這些功能。PortI/O函數(shù)用于從給定地址讀取數(shù)據(jù)或向給定地址寫入數(shù)據(jù),位于AllFunctions→Advanced模板,包括InPort.vi和OutPort.vi兩個子VI,如圖6-13和圖6-14所示。1.基于ISA總線數(shù)采板的DI/O

基于ISA總線數(shù)圖6-13PortI/O函數(shù)圖6-13PortI/O函數(shù)圖6-14InPort.vi和OutPort.vi在這兩個VI中,address是要讀或?qū)懙亩丝诘奈锢淼刂?;dataread是讀取的結果,可以是8位、16位或32位的帶符號整型數(shù);writevalue是要寫到端口的數(shù)據(jù),也可以是8位、16位或32位的帶符號整型數(shù)。讀或?qū)憯?shù)據(jù)的位數(shù)必須手動設定。圖6-14InPort.vi和OutPort.vi2.基于HY-6031總線數(shù)采板的DI/O

HY-6031板是北京華控公司生產(chǎn)的八通道D/A板,板上帶有16路數(shù)字量輸入通道和16路數(shù)字量輸出通道,用戶可以作為數(shù)字信號狀態(tài)監(jiān)視及數(shù)字量輸出控制執(zhí)行機構通斷。該板的基地址可由板基地址選擇開關設置,默認地址是280H(=640)。基地址?+0和?+1分別是低8位和高8位數(shù)字量輸出寄存器的寫地址;基地址?+2和?+3分別是低8位和高8位數(shù)字量輸入緩沖器的讀地址。2.基于HY-6031總線數(shù)采板的DI/O

HY-6因此,對基地址?+0和?+1分別進行寫操作,即可輸出數(shù)字量的低8位和高8位;對基地址?+2和?+3分別進行讀操作,即可讀入數(shù)字量的低8位和高8位。設計一個簡易的數(shù)字量輸入/輸出程序如圖6-15所示,程序中用了一個順序結構依次輸入或輸出低8位和高8位。

讀者可仿照上述程序設計輸出脈沖和脈沖序列的程序。由于HY-6031板只有數(shù)字量輸入/輸出通道,無法測量脈沖寬度和周期,因此可選用帶有定時計數(shù)器的板卡。因此,對基地址?+0和?+1分別進行寫操作,即可輸出數(shù)字圖6-15數(shù)字量輸入/輸出程序圖6-15數(shù)字量輸入/輸出程序3.基于PCI-2002總線數(shù)采板的DI/O

PCI-2002卡是一種基于PCI總線的數(shù)據(jù)采集卡,由北京阿爾泰科貿(mào)有限公司生產(chǎn)。板上帶有16路數(shù)字量輸入和16路數(shù)字量輸出通道,如圖6-16所示。由于該板卡基于PCI總線,因此需要安裝相應的驅(qū)動程序。同時,廠家也提供了對LabVIEW的支持。3.基于PCI-2002總線數(shù)采板的DI/O

PCI圖6-16PCI-2002板的數(shù)字量輸入/輸出程序圖6-16PCI-2002板的數(shù)字量輸入/輸出程序(1)十六路開關量輸出SetDeviceDO。

功能:負責將PCI設備上的輸出開關量設置成相應的狀態(tài)。

參數(shù):

?hDevice:設備對象句柄,它應由CreateDevice決定。

?pPara:十六路開關量輸出狀態(tài)的參數(shù)結構,共有16個成員變量,分別對應于DO0~DO15路開關量輸出狀態(tài)位。實際上是一個具有16個元素的一維數(shù)組。在實際執(zhí)行這個函數(shù)之前,必須對這個參數(shù)結構的DO0~DO15共16個成員變量賦初值,其值必須為“1”或“0”。(1)十六路開關量輸出SetDeviceDO。

功(2)十六路開關量輸入GetDeviceDI。

功能:負責將PCI設備上的輸入開關量狀態(tài)讀入內(nèi)存。

參數(shù):

?hDevice:設備對象句柄,它應由CreateDevice決定。

?pPara:十六路開關量輸入狀態(tài)的參數(shù)結構,共有16個成員變量,分別對應于DI0~DI15路開關量輸入狀態(tài)位。

用于數(shù)字量輸出的程序示例如圖6-17所示。(2)十六路開關量輸入GetDeviceDI。

功圖6-17PCI-2002板的數(shù)字量輸出程序示例圖6-17PCI-2002板的數(shù)字量輸出程序示例程序中首先用調(diào)用CreateDevice函數(shù)得到設備的句柄,將其賦給SetDeviceDO函數(shù),SetDeviceDO函數(shù)的第二個參數(shù)pPara是一個數(shù)組,這里將其全部賦初值為“0”,實際使用時可按需要賦值。最后調(diào)用ReleaseDevice函數(shù)將設備釋放。這里的CreateDevice和ReleaseDevice函數(shù)是由廠家提供的。

用于數(shù)字量輸入的程序示例如圖6-18所示。

程序中先建立了一個16個元素均為0的一維數(shù)組,調(diào)用GetDeviceDI函數(shù)后,該數(shù)組元素的值變?yōu)樽x入的數(shù)字量的值,這些值可從面板上的pPara指示器上看到。程序中首先用調(diào)用CreateDevice函數(shù)得到設備的句圖6-18PCI-2002板的數(shù)字量輸入程序示例圖6-18PCI-2002板的數(shù)字量輸入程序示例本章小結

本章首先介紹了實現(xiàn)數(shù)字量輸入、輸出的方法:然后介紹了利用計數(shù)器對事件進行計數(shù)、產(chǎn)生脈沖信號、對脈沖信號的頻率和周期等參數(shù)進行測量等方法;最后結合實例對非NI產(chǎn)品的編程作了介紹,然后對讀者有一定的幫助。讀者如果使用的是NI的產(chǎn)品,可按照書中所講直接編程;如果使用的是非NI的產(chǎn)品,完全可以參照本章所述的方法,編寫出各種功能強大的、能滿足各種需求的VI。本章小結

本章首先介紹了實現(xiàn)數(shù)字量輸練習與思考

1.簡述數(shù)字量輸入/輸出函數(shù)的功能。

2.如何用相關的函數(shù)測量脈沖信號的參數(shù)?

3.用自己手頭的數(shù)據(jù)采集卡實現(xiàn)相關的數(shù)字量輸入/輸出功能。練習與第6章數(shù)字量輸入/輸出和計數(shù)器6.1數(shù)字量輸入/輸出6.2計數(shù)器6.3非NI產(chǎn)品的數(shù)字量輸入/輸出控制本章小結練習與思考第6章數(shù)字量輸入/輸出和計數(shù)器6.1數(shù)字量輸入/輸6.1數(shù)字量輸入/輸出

一般數(shù)據(jù)采集卡上都有數(shù)字量輸入/輸出(DI/O)功能,用于實現(xiàn)數(shù)據(jù)采集的觸發(fā)、控制及計數(shù)等,也可以完成對外部開關量的采集、繼電器和電子開關的控制等。DI/O按TTL邏輯電平設計,其邏輯低電平在0~0.7V之間,高電平在3.4~5.0V之間。

將數(shù)采板上多路DI/O組成一組后稱為端口。?一個端口由多少路DI/O組成是依據(jù)其數(shù)采板而定的,在大多數(shù)情況下,4或8路數(shù)字I/O組成一個端口。當讀/寫端口時,可以在同一時刻設置或獲取多路DI/O的狀態(tài)。6.1數(shù)字量輸入/輸出數(shù)字量輸入/輸出的應用分為以下兩類:立即型(非鎖存型)和定時型(鎖存型)。在立即型情況下,當調(diào)用數(shù)字I/O函數(shù)后會立即更新或讀取數(shù)字量某一路或端口的狀態(tài)。在定時型情況下,可以使用外部信號來控制數(shù)字量數(shù)據(jù)的傳輸。

與模擬量的輸入/輸出類似,LabVIEW中傳統(tǒng)DAQVI關于DI/O的VI也分為低、中、高三個等級,如圖6-1所示。數(shù)字量輸入/輸出的應用分為以下兩類:立即型(非鎖存型)和圖6-1傳統(tǒng)DAQVI的DI/O模板圖6-1傳統(tǒng)DAQVI的DI/O模板1.簡易函數(shù)(EasyDigitalI/OVI)

簡易函數(shù)位于圖6-1中的第一行,包括ReadfromDigitalLine.vi、ReadfromDigitalPort.vi、WritetoDigitalLine.vi和WritetoDigitalPort.vi四個子VI,其圖標和端口如圖6-2所示。

前兩個子VI分別用來立即讀入某一路或某一端口的數(shù)字量,后兩個子VI分別用來立即輸出數(shù)字量到某一路或某一端口。其中:

portwidth:端口寬度。

device:設備號。1.簡易函數(shù)(EasyDigitalI/OVI)

圖6-2EasyDigitalI/OVI端口圖6-2EasyDigitalI/OVI端口digitalchannel:需要輸入/輸出的數(shù)字信號所在通道的名稱或通道號。通道名是已經(jīng)配置好的某個數(shù)字通道的名稱。在輸入通道號時,0表示端口0,1表示端口1,依次類推。當輸入通道名時,portwidth將被忽略。

line:digitalchannel所指定端口中需要讀入或輸出的某一路的編號。

iteration:缺省值為0,此時,每調(diào)用一次該子VI,就要對數(shù)采板配置一次。當重復調(diào)用該函數(shù)時,為了避免系統(tǒng)重復設置數(shù)采板,可以設置iteration端為正數(shù)。digitalchannel:需要輸入/輸出的數(shù)字信號linestate:需要輸出的數(shù)字信號的狀態(tài)或讀取的某一路數(shù)字信號的狀態(tài):高(true)或低(false)。

pattern:需要輸出的數(shù)字量或從所讀端口讀取的數(shù)字量(十進制形式)的模式。

注意:當只調(diào)用一個EasyDigitalI/OVI實例讀/寫某個通道或端口時,程序是不會出錯的。但是當再次調(diào)用函數(shù)時會通過改變移位寄存器的狀態(tài)來重新改變DI/O的設置,故不能調(diào)用多個VI實例來控制多個端口。在這種情況下可以通過使用后面將討論的高級VI來達到該目的。linestate:需要輸出的數(shù)字信號的狀態(tài)或讀取的某2.中級函數(shù)(IntermediateDigitalI/OVI)

中級函數(shù)包括圖6-1中間一行的五個子VI和最后一行的兩個子VI。

如果需要大數(shù)量的數(shù)據(jù)傳輸,可以使用非同步中斷驅(qū)動方式傳輸,這樣不至于在傳輸數(shù)據(jù)時占用計算機的資源。使用這種方式傳輸數(shù)據(jù)時,計算機內(nèi)存緩沖被分配到后臺線程輸入或輸出緩沖中,在這種情況下可使用這些子VI。緩沖式數(shù)字IO程序設計的順序大致如下:

DIOCONFIG:設置一組端口為輸入或輸出模式;創(chuàng)立

數(shù)據(jù)緩沖,產(chǎn)生任務的唯一標識符,它將會被下面的DIO函數(shù)使用。2.中級函數(shù)(IntermediateDigitalDIOREAD:返回從數(shù)字量緩沖中掃描的數(shù)據(jù);返回緩沖中的數(shù)據(jù)剩余量;返回在一定時限中操作的初始化是否成功信息。

DIOWRITE:用于輸出操作時更新緩沖中的數(shù)據(jù)。當?shù)群虻奈帐中盘柊l(fā)生時,端口將被新的緩沖數(shù)據(jù)更新。假如在一定時限內(nèi)握手信號沒有出現(xiàn),將返回一錯誤信息。

DIOSTART:啟動緩沖式DIO操作。設定更新或讀取的點數(shù),當輸入0時將連續(xù)操作。

DIOWAIT:等待與任務標識符taskID相關任務的數(shù)字量輸入或輸出操作的完成。

DIOCLEAR:停止操作,同時清除與taskID任務相關的緩沖。DIOREAD:返回從數(shù)字量緩沖中掃描的數(shù)據(jù);返回緩沖注意:當使用這些VI時,數(shù)采板必須支持握手信號。

3.高級函數(shù)(AdvancedDigitalI/OVI)

高級函數(shù)包括兩部分,一部分稱為digitalport,可以用來立刻輸入或輸出某一路(某一端口)的數(shù)字量,類似于簡易函數(shù)的操作;另一部分稱為digitalgroup,可用于多個端口進行立即型、握手型或定時型的輸入/輸出。高級函數(shù)是最底層的函數(shù),較少直接采用,它們是構成簡易函數(shù)和中級函數(shù)的基礎。注意:當使用這些VI時,數(shù)采板必須支持握手信號。

6.2計數(shù)器

6.2.1計數(shù)器概述

對于一個成熟的數(shù)據(jù)采集和控制系統(tǒng)來說,一個非常重要的要求就是能操縱和協(xié)調(diào)多種不同時間的參數(shù)和事件。這就需要某些硬件機構完成高精度的定時工作,因此這些機構中最基本的功能塊就是計數(shù)器。

計數(shù)器可以接收或輸出TTL兼容信號,一個能被計數(shù)器測得的信號,至少其特征不能低于能被該計數(shù)器識別的最小脈沖寬度、上升時間、下降時間等。

圖6-3所示為計數(shù)器的簡化模型:一個門控輸入、一個時鐘輸入、一個計數(shù)寄存器、一個輸出。6.2計數(shù)器

6.2.1圖6-3計數(shù)器的簡化模型圖6-3計數(shù)器的簡化模型門控輸入端可以控制計數(shù)的開始和結束,例如為高電位時計數(shù)或低電位時計數(shù)等。

時鐘輸入端為計數(shù)信號,可設置為上升沿或下降沿計數(shù)。

內(nèi)部計數(shù)寄存器的計數(shù)方式可設為遞增或遞減方式,通過讀取其值即可知道信號狀態(tài)改變的次數(shù)。

輸出端可輸出多種波形,或者用于計數(shù)器的串級使用,從而增大計數(shù)器的量程。

有關計數(shù)器的詳細內(nèi)容可參看相關的書籍。門控輸入端可以控制計數(shù)的開始和結束,例如為高電位時計數(shù)或6.2.2LabVIEW計數(shù)器VI

因為直接通過低層編程使用定時計數(shù)器芯片是非常困難的,所以LabVIEW提供了一系列高級的定時/計數(shù)器庫函數(shù)。

LabVIEW計數(shù)器VI被分為了三個類型的模板,如圖6-4

所示。

EasyCounterVI:較簡單的且經(jīng)常使用的計數(shù)器VI。如用于事件定時/計數(shù)、產(chǎn)生單個脈沖、產(chǎn)生脈沖序列、測量脈沖寬度或周期以及頻率測量等常用的定時計數(shù)操作。這些VI使用時在前面板都有錯誤處理和詳盡的操作指示。6.2.2LabVIEW計數(shù)器VI

因為直接通過低IntermediateCounterVI:主要用于設置和控制計數(shù)器的操作,這些VI比EasyCounterVI更靈活。所有的中級計數(shù)器VI都使用了LabVIEW的錯誤處理,通過它可以建立自己的錯誤處理路徑。這些VI使用時在前面板都有詳盡的操作指示。

?AdvancedCounterVI:高級計數(shù)器VI主要用于作為

創(chuàng)建其他數(shù)字VI的基本模塊。這些VI是最靈活也是最復雜

的。典型地說,用于需要多設置和控制的應用中。與中級計

數(shù)器VI一樣,使用高級計數(shù)器VI時也可以建立自己的錯誤處理路徑。IntermediateCounterVI:主要圖6-4LabVIEW計數(shù)器VI模板圖6-4LabVIEW計數(shù)器VI模板在大多數(shù)情況下,我們會使用EasyCounterVI,下面將介紹計數(shù)器的常用操作:事件計數(shù)/定時、產(chǎn)生單個脈沖、產(chǎn)生脈沖序列、測量脈沖寬度或周期以及頻率測量等。

1.事件計數(shù)/定時

當對外部事件進行計數(shù)/定時時,可以采用CountEventsorTime子VI,其圖標和端口如圖6-5所示。

例如,SOURCE輸入口指定信號上升或下降沿出現(xiàn)的次數(shù)。device和counter輸入端指定了是哪一塊數(shù)采板的哪一個計數(shù)器端口將接收事件。sourceedge確定該事件是上升沿還是下降沿(0為上升沿,1為下降沿,默認為0)。在大多數(shù)情況下,我們會使用EasyCounterVI圖6-5事件計數(shù)/定時VI端口圖6-5事件計數(shù)/定時VI端口sourceedge確定該事件是上升沿還是下降沿(0為上升沿,1為下降沿,默認為0)。當eventsource/timebase的輸入端值等于零時,計數(shù)器將對SOURCE端口輸入的信號進行計數(shù)。當eventsource/timebase被設置為有效的內(nèi)部時鐘頻率時,計數(shù)器將對SOURCE口輸入的內(nèi)部時鐘信號進行計數(shù)。根據(jù)使用的數(shù)采板的不同,其有效內(nèi)部時鐘頻率也不同,如使用DAQ-STC芯片的數(shù)采板其內(nèi)部有效時鐘頻率可為20MHz和100kHz。countersize輸入設置了最大計數(shù)容量,當超過該值后計數(shù)器將會溢出并重新清零。DAQ-STC芯片上24位的計數(shù)器在溢出前其最大計數(shù)容量為16MB。start/restart輸入端控制計數(shù)器啟動/停止操作。sourceedge確定該事件是上升沿還是下降沿(0為count輸出端返回的是當前計數(shù)器寄存器的值。secondssincestart返回自計數(shù)器啟動后的時間值。secondssincelastcall返回自計數(shù)器寄存器被讀取后的時間值。只有當eventsource/

timebase輸入端為有效內(nèi)部時鐘時,這兩個返回值才有實際

意義。

2.產(chǎn)生脈沖

產(chǎn)生脈沖是計數(shù)器另一較常用的功能。既可以用GenerateDelayedPulseVI在OUT口輸出一個脈沖,也可以用GeneratePulseTrainVI在OUT口輸出一個脈沖序列。這兩個VI的圖標和端口如圖6-6所示。count輸出端返回的是當前計數(shù)器寄存器的值。secon圖6-6GenerateDelayedPulseVI端口和GeneratePulseTrainVI端口圖6-6GenerateDelayedPulse使用這兩個VI時需要設定以下參數(shù):脈沖極性(pulsepolarity)、延遲(pulsedelay)、幅寬(pulsewidth)(延遲和幅寬之和為周期)以及占空比(dutycycle)。脈沖極性決定了脈沖是高還是低。

占空比定義如下:dutycycle=width/(Delay+Width)。脈沖各參數(shù)的含義如圖6-7所示。圖6-7脈沖各參數(shù)的含義使用這兩個VI時需要設定以下參數(shù):脈沖極性(pulse1)發(fā)生單個脈沖

GenerateDelayedPulseVI輸出由pulsepolarity、pulsedelay和pulsewidth參數(shù)共同決定的單個脈沖。device和counter輸入端指定了是哪一塊數(shù)采板的哪一個計數(shù)器輸出單個脈沖。gatemode設置了計數(shù)器工作的門限模式(具體使用時,請給計數(shù)器的GATE輸入口接一外部門限信號)。timebasesource決定了哪個時鐘用于延遲和幅寬。假如使用內(nèi)部時鐘,那么數(shù)采板上的時鐘作為延遲和幅寬的計時可達到秒的量級。假如使用外部時鐘,應確保把外部的時基信號連接到計數(shù)器的SOURCE端口上,此時,延遲和幅寬的計時是以外部時基的周期數(shù)為單位的。taskID輸出包含了產(chǎn)生該脈沖所有設置的信息,是標識該任務的標識符??梢园裻askID輸出作為中級CounterStartVI的輸入?yún)?shù),從而可再發(fā)生同樣的脈沖。1)發(fā)生單個脈沖

GenerateDelayed2)發(fā)生脈沖序列

用GeneratePulseTrainVI可輸出一系列由pulsepolarity、frequency和dutycycle輸入?yún)?shù)決定的脈沖序列。device、counter和gatemode輸入?yún)?shù)的意義與GenerateDelayedPulseVI同名參數(shù)的意義相同。輸入?yún)?shù)numberofpulses設定了脈沖序列的長度,如果設為零,那么該VI將發(fā)生連續(xù)的脈沖序列。taskID輸出包含了產(chǎn)生該脈沖序列所有設置的信息,是標識該任務的標識符。當產(chǎn)生一有限長度的脈沖序列時,將使用taskIDofcounter-1返回值作為任務標識符??梢园裻askID或task,IDofcounter-1輸出作為中級CounterStartVI的輸入?yún)?shù),從而再發(fā)生同樣的脈沖序列。2)發(fā)生脈沖序列

用GeneratePulse當使用計數(shù)器發(fā)生一脈沖或脈沖序列時,用于啟動計數(shù)器操作的信號與控制脈沖周期的時基信號則不同步。在大多數(shù)情況下,啟動的脈沖信號并不是恰好在時基信號的上升沿出現(xiàn)的。也就是說,在啟動發(fā)生脈沖時會有一個大致的時基時鐘周期的誤差。這種誤差在使用軟件提供啟動計數(shù)器操作信號時也存在。

3.脈沖寬度測量

可以使用計數(shù)器來測量脈沖或脈沖序列的特性參數(shù)。MeasurePulseWidthorPeriodVI可用來測量連接到計數(shù)器GATE端口信號的脈沖寬度或周期。MeasureFrequencyVI可用來測量連接到計數(shù)器SOURCE端口脈沖序列信號的頻率。這兩個VI都用到了計數(shù)器的門限計數(shù)功能。當使用計數(shù)器發(fā)生一脈沖或脈沖序列時,用于啟動計數(shù)器操作的當測量一脈沖寬度時,需將被測的脈沖信號連接到計數(shù)器的GATE端口,將一已知頻率的信號Ts連接到計數(shù)器的SOURCE口,如圖6-8所示。當計數(shù)器被設為高門限計數(shù)模式時,計數(shù)器會在GATE口信號開始時對SOURCE口的脈沖個數(shù)進行計數(shù),在GATE口信號結束時停止計數(shù)。此時用計數(shù)寄存器的計數(shù)值乘以SOURCE口信號的周期即可算出被測信號的脈沖寬度。使用MeasurePulseWidthorPeriodVI時,SOURCE口用的是內(nèi)部時鐘,故只需將被測信號接到計數(shù)器的GATE口上。當測量一脈沖寬度時,需將被測的脈沖信號連接到計數(shù)器的GA圖6-8脈沖寬度測量的原理圖6-8脈沖寬度測量的原理MeasurePulseWidthorPeriodVI的圖標如圖6-9所示。其輸入?yún)?shù)typeofmeasurement決定是測量脈沖的周期還是測量脈沖的寬度。參看圖6-10,當該值取0時,測量正向脈沖的寬度;取1時,測量負向脈沖的寬度;取2時(默認),測量兩個相鄰上升沿的寬度,即周期;取3時,測量兩個相鄰下降沿的周期。timebase決定了用于被計數(shù)的內(nèi)部時鐘。若計數(shù)操作未在timelimit時間限制內(nèi)完成,timeout輸出為TRUE。pulsewidth/period返回測量的寬度或周期(以s為單位),count返回計數(shù)器寄存器的值。若counteroverflow?返回值為TRUE,表示發(fā)生計數(shù)器溢出,此時應當降低timebase內(nèi)部時鐘的頻率。若valid?輸出,則顯示了是否有足夠的內(nèi)部時鐘計數(shù)確保測量的脈沖寬度或周期值正確。MeasurePulseWidthorPerio圖6-9MeasurePulseWidthorPeriodVI圖6-9MeasurePulseWidthor圖6-10typeofmeasurement參數(shù)的設置圖6-10typeofmeasurement參數(shù)的4.頻率測量

計數(shù)器也可用于測量脈沖序列的頻率。給計數(shù)器的GATE口加上已知幅寬的門限脈沖,對該門限脈沖寬度內(nèi)的脈沖串個數(shù)進行計數(shù)即可算出被測信號的頻率。使用MeasureFrequencyVI時,數(shù)采板上第二個計數(shù)器提供門限脈沖,所以需要將第二個計數(shù)器的OUT輸出口連接到第一個計數(shù)器的GATE口,將被測信號接到第一個計數(shù)器的SOURCE口上。

注意:第二個計數(shù)器的選取取決于采用的第一個計數(shù)器,可參看有關的材料。例如打開MeasureFrequencyVI的前面板,即可看到相應的說明(參看圖6-11)。4.頻率測量

計數(shù)器也可用于測量脈沖序列的頻率。給計圖6-11MeasureFrequencyVI的部分前面板圖6-11MeasureFrequencyVI的可以使用MeasureFrequencyVI(見圖6-12)來測量脈沖序列信號的頻率。gatewidth設置了由第二個計數(shù)器(counter-1)所發(fā)脈沖的幅寬(以秒為單位)。countersize設置了計數(shù)器對一未知信號能進行的最大計數(shù)值(對于24位計數(shù)器來說為2的24次方)。假如需要對MeasureFrequencyVI中的counter-1進行門限觸發(fā),請給counter-1計數(shù)器的GATE輸入口上接入觸發(fā)信號;同時必須正確地設置gatemode與maximumdelaytogate參數(shù)。當這些設置好后,只要counter-1計數(shù)器在其GATE輸入口上接收到一上升沿觸發(fā)信號后,counter-1即在其OUT口輸出一已知的接于counterGATE輸入口的門限脈沖(見圖6-12)。frequency返回測得的被測信號的頻率(以Hz為單位)。valid??返回參數(shù)指示是否有錯誤發(fā)生??梢允褂肕easureFrequencyVI(見圖圖6-12MeasureFrequencyVI圖6-12MeasureFrequencyVI6.3非NI產(chǎn)品的數(shù)字量輸入/輸出控制

以上介紹的各個VI都只能用于NI公司的數(shù)采板,對于非NI公司的數(shù)采板怎樣對其數(shù)字量的輸入/輸出進行控制呢?下面我們選取一款PCI-2002數(shù)采板和一款基于ISA總線的D/A板HY-6031進行介紹。當前基于PCI總線和ISA總線的數(shù)采板應用比較廣泛,希望這些內(nèi)容能給讀者提供一些幫助。6.3非NI產(chǎn)品的數(shù)字量輸入/輸出控制

以上介1.基于ISA總線數(shù)采板的DI/O

基于ISA總線數(shù)采板的控制比較簡單,它不需要專用的驅(qū)動程序,可直接對其端口地址進行讀/寫操作,我們可以采用LabVIEW的PortI/O函數(shù)來實現(xiàn)這些功能。PortI/O函數(shù)用于從給定地址讀取數(shù)據(jù)或向給定地址寫入數(shù)據(jù),位于AllFunctions→Advanced模板,包括InPort.vi和OutPort.vi兩個子VI,如圖6-13和圖6-14所示。1.基于ISA總線數(shù)采板的DI/O

基于ISA總線數(shù)圖6-13PortI/O函數(shù)圖6-13PortI/O函數(shù)圖6-14InPort.vi和OutPort.vi在這兩個VI中,address是要讀或?qū)懙亩丝诘奈锢淼刂罚籨ataread是讀取的結果,可以是8位、16位或32位的帶符號整型數(shù);writevalue是要寫到端口的數(shù)據(jù),也可以是8位、16位或32位的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論