了解 NI-DAQmx 的 10 個函式完成 80% 的資料擷取應用

綜覽

NI-DAQmx 的目的是讓 NI 資料擷取 (DAQ) 硬體使用者充分利用其眾多功能,不僅可縮短開發時間,又可提高資料擷取應用的效能。 

內容

NI-DAQmx:縮短開發時間提高效能

NI-DAQmx 的其中一項特色便是應用程式設計介面 (API),可大幅節省開發時間,適用於多款不同功能的介面卡。換句話說,多功能介面卡的所有功能均以相同的函式組合 (類比輸入、類比輸出、數位 I/O 與計數器) 完成程式設計。此外,就連數位 I/O 介面卡與類比輸出介面卡,都使用相同的函式組合完成程式設計。正因 LabVIEW 具備多型特性,才有如此豐富的運用方式。多型 VI 可接受一或多個輸入/輸出端點的多種資料類型。NI-DAQmx API 也可跨足所有可用的程式環境,並維持一致的效能。此處需了解如何僅用一組函式,在多個程式環境中完成多數 NI 資料擷取硬體的程式設計。

NI-DAQmx 的另一項特色功能——DAQ 小幫手,則可提升開發體驗。此工具不須經由圖形化介面設定簡易與複雜的資料擷取工作項目,即可建立自己的應用。此外,在多數情況下,由於觸發與/或時脈訊號必須手動路由,因此同步化作業實行不易。有了 NI-DAQmx,即可輕鬆地在單一或多個介面卡的不同功能範圍內,自動執行訊號路由。

NI-DAQmx 所建立的資料擷取應用具備可大幅提升效能的架構。首先,其高效率的狀態模型消除重新設定的不便。移除這項作業負擔之後,設定與擷取作業皆可優化。此外,還可達到超過 50 kS/s 的單點 I/O 速率。因有記憶體映射的暫存器,才能達到此種效能。

NI-DAQmx 架構的另一項重要特色是多執行緒量測。因 NI-DAQmx 具備多執行緒架構,所以可同時執行多個資料擷取作業,而大幅改善多重作業的應用效能。這個特性也同時簡化此類應用的程式設計。

僅需學習一小部分的函式,便能充分利用這些優點。實際上,這 10 個 NI-DAQmx 函式所提供的功能已足以處理 80% 的資料擷取應用。本文將詳細說明這些函式,幫您深入了解它們的功能與適用的應用類型。

注意: 本文件引用範例可在本文件參考位置找到: Windows 中適用於 LabVIEW 與文字架構的 NI-DAQmx 範例位置

DAQ 小幫手

DAQ 小幫手

Tools»Create/Edit DAQmx Tasks [CVI]
Project»Add New Item»DAQmx Task [.NET]






 

DAQ 小幫手具備圖形化介面,能以互動方式建立、編輯並執行 NI-DAQmx 虛擬通道與工作項目。NI-DAQmx 虛擬通道包含 DAQ 介面卡的實體通道,以及實體通道上的設定資訊,例如輸入範圍與自訂縮放。NI-DAQmx 工作項目集結虛擬通道、時序和觸發資訊,以及其他擷取或產生相關的屬性。在下圖中,DAQ 小幫手可設定來執行固定點數的應變量測。

 

DAQ 小幫手可設定來執行固定點數的應變量測


下文說明如何在 LabVIEW、LabWindows/CVI 與 .NET 中使用 DAQ 小幫手:

NI-DAQmx Express VI 教學課程
在 LabWindows/CVI 中使用 DAQ 小幫手
在 Measurement Studio 中使用 DAQ 小幫手

DAQ 小幫手也可以建立程式碼,以設定並/或執行特定的擷取或生產作業。此 LabVIEW 流程在 DAQ 小幫手輔助說明Using DAQ Assistant to Automatically Generate LabVIEW Code 文件中皆有詳細說明。下列圖表顯示 DAQ 小幫手範例,以及此範例自動產生的設定與 LabVIEW 範例程式碼。

 

NI-DAQmx Create Virtual Channel



Library»NI-DAQmx»Channel Creation/Configuration [CVI]

Task.Channel.CreateChannel Property [.NET]








NI-DAQmx 的 Create Virtual Channel 函式可建立虛擬通道,並將其新增至工作項目中。其亦可建立多個虛擬通道,並將其全部新增至工作項目中。若尚未指定工作項目,則函式將建立一個工作項目。NI-DAQmx 的 Create Virtual Channel 函式具有多個實體。這些實體可對應至虛擬通道所執行的特定量測或產生作業。

建立 LabVIEW 通道

下圖顯示 NI-DAQmx Create Virtual Channel VI 不同實體的 4 個範例。


輸入 NI-DAQmx Create Virtual Channel 函式後,結果將因函式的各個實體而有所不同。不過,有些輸入在大多數的函式實體較為常見。舉例來說,輸入必須指定虛擬通道將要使用的實體通道 (類比輸入與類比輸出)、通道 (數位) 或計數器。除此之外,類比輸入、類比輸出與計數器作業將透過最小值最大值的輸入,設定並優化根據訊號預期最小、最大值執行的量測與產生作業。另外,自訂縮放則可用於多種虛擬通道。在下列 LabVIEW 程式圖中,NI-DAQmx Create Virtual Channel VI 函式則用於建立熱電偶虛擬通道。

在 .NET 中建立通道

 

在 .NET 中建立通道

NI-DAQmx .NET 函式庫的許多類別無法直接具現化。這些類別將做為該類別的子物件。

這些類別包含特定通道類型的專屬屬性。例如,Count 屬性僅適用於計數器、CIChannel COChannel 類別。您可將下列類型的通道與 NI-DAQmx .NET 類別函式庫中的工作項目相關聯:

類比輸入通道—AIChannel 類別

類比輸出通道—AOChannel 類別

數位輸入通道—DIChannel 類別

數位輸出通道—DOChannel 類別

計數器輸入通道—CIChannel 類別

計數器輸出通道—COChannel 類別

工作項目類別對六種類型通道 (AIChannel、AOChannel、DIChannel、DOChannel、CIChannel 和 COChannel) 的每一種都有一個通道集合屬性。如要建立通道,可善用通道集合中的多種通道建立方法。

開啓新的 Task 物件時,則可呼叫 Channel 類別中合適的成員函式,建立並指派 AIChannel 物件。下列程式碼片段能建立簡單的類比輸入電壓通道:

analogInTask = new Task();

AIChannel myChannel;

myChannel = analogInTask.AIChannels.CreateVoltageChannel(

    "dev1/ai1", //The physical name of the channel

    "myChannel", //要與此通道關聯的名稱

    AITerminalConfiguration.Differential, //差動接線

    -10, //-10v minimum

    10, //10v 最大值

    AIVoltageUnits.Volts //使用伏特
);

 

以 C/C++ 建立工作項目

使用 DAQmx CreateTask() 函式可建立工作項目,並可使用 DAQmx CreateAIVoltageChan() 建立類比輸入電壓通道。如需進一步了解如何針對不同類型的量測作業建立通道,請參閱 NI-DAQmx C 參考輔助說明。下列程式碼片段示範如何運用這 2 個函式:

TaskHandle  taskHandle=0;
char        chan[256] = "Dev1/ai0";
float64     min = -10, max = 10;

DAQmxCreateTask("",&taskHandle);

DAQmxCreateAIVoltageChan(taskHandle ,chan ,"", DAQmx_Val_Cfg_Default, min, max, DAQmx_Val_Volts, NULL);

 

參考範例:

LabVIEWDigital - Finite Output.vi
Thermocouple - Continuous Input.vi
CVIWrite Dig Port
Cont Thrmcpl Samples-Int Clk
.NETWriteDigPort
ContAcqThermocoupleSamples_IntClk

 

NI-DAQmx Trigger


LabVIEW 中的觸發器


許多資料擷取應用需要單一介面卡在不同功能範圍內執行同步化作業 (例如類比輸出與計數器)。其他某些應用則須同步多個介面卡。要達成同步化,便須在單一或多個介面卡的不同功能範圍內執行觸發訊號路由。NI-DAQmx 能夠自動執行此項路由。使用 NI-DAQmx Trigger 函式時,所有有效的觸發訊號皆可做為函式的來源輸入。舉例來說,在下列 NI-DAQmx Trigger VI 之中,介面卡 2 的開始觸發訊號不須執行任何顯式路由,即可做為介面卡 1 開始觸發的來源。

 

在 .NET 建立觸發器

建立 Task 物件與通道之後,即可透過呼叫 Task.Triggers 集合的方法,新增觸發器至工作項目。下列程式碼片段能夠建立 Digital Edge Start Trigger:

analogInTask = new Task();

DigitalEdgeStartTriggerEdge triggerEdge = DigitalEdgeStartTriggerEdge.Rising;

analogInTask.AIChannels.CreateVoltageChannel( ... );

analogInTask.Triggers.StartTrigger.ConfigureDigitalEdgeTrigger("PFI0", triggerEdge);

介面卡將根據傳送至 ConfigureDigitalEdgeTrigger 函式的參數,於開始擷取資料之前,在內部或外部通道尋找上升或下降的數位邊緣。上述程式碼片段能夠設定介面卡,在 PFI 0 上尋找上升的數位邊緣觸發。

 

在 C/C++ 建立觸發器

運用 DAQmxCfgDigEdgeStartTrig() 函式建立數位邊緣觸發。如需進一步了解如何建立不同類型的觸發,請參閱 NI-DAQmx C 參考輔助說明。下列程式碼片段示範如何運用函式在 PFI 0 建立數位開始觸發,並尋找該通道上的升緣。

char        startTrigger[256] = "Dev1/PFI0";
int         startEdge = 0; // rising edge

DAQmxCreateTask("",&taskHandle));

DAQmxCreateAIVoltageChan(taskHandle, chan, "", DAQmx_Val_Cfg_Default, min, max, DAQmx_Val_Volts, NULL);

DAQmxCfgDigEdgeStartTrig(taskHandle, startTrigger, startEdge);
 

 

Timing and Synchronization Features of NI-DAQmx 文件所提供的額外相關資訊,說明如何使用 NI-DAQmx Trigger 函式執行與 NI-DAQmx 的同步化作業。

參考範例:

LabVIEWVoltage - Finite Input.vi
Voltage - Continuous Input.vi
CVIAcq-Int Clk-Dig Start&Ref
Cont Acq-Int Clk-Anlg Start
.NETAcqVoltageSamples_IntClkDigStartAndRef
ContAcqVoltageSamples_IntClkAnalogStart

NI-DAQmx Timing


NI-DAQmx TimingLibrary»NI-DAQmx»Timing [CVI]

Task.Timing Property [.NET]







NI-DAQmx Timing 函式可設定硬體時序的資料擷取作業的時序。這包含指定連續或有限作業、選擇有限作業要擷取或產生的樣本數量,以及必要時建立緩衝區等等。

針對需要取樣時序的作業 (類比輸入、類比輸出與計數器),NI-DAQmx Timing 函式的 Sample Clock 實體將設定取樣時脈的來源 (可為內部來源或外部來源) 與速率。取樣時脈會控制擷取與產生樣本的速率。工作項目的各個虛擬通道中,每個時脈脈波都將擷取或產生 1 個樣本。

 

在 LabVIEW 中設定工作項目時序


下列 LabVIEW 程式圖示範了如何使用 NI-DAQmx Timing VI 的取樣時脈實體,透過外部取樣時脈,設定連續的類比輸出產生作業。


Timing and Synchronization Features of NI-DAQmx 文件所提供的額外相關資訊,說明如何使用 NI-DAQmx Timing 函式執行與 NI-DAQmx 的同步化作業。

大部分的計數器作業不需取樣時序,因為受量測的訊號即已提供時序。此時,這些應用便須使用 NI-DAQmx Timing 函式的 Implicit 實體。在下列 LabVIEW 程式圖中,NI-DAQmx Timing VI 的 Implicit 實體設定了緩衝脈波寬度的擷取作業,以便擷取特定數量的樣本。


在 .NET 中設定工作項目時序

如果要設定取樣時脈的來源、取樣時脈的速率,以及要擷取或產生的樣本數量,便須運用 Channel.Timing.ConfigureSampleClock() 函式。下列程式碼片段能夠以連接至介面卡 PFI 0 的外部取樣時脈為架構,建立連續的擷取作業。

analogInTask = new Task();

analogInTask.AIChannels.CreateVoltageChannel( ... );

analogInTask.Timing.ConfigureSampleClock(

"/Dev1/PFI0", // external clock source line or use "" for internal clock

10000, // expected rate of external clock or actual rate of internal clock

SampleClockActiveEdge.Rising, // acquire on rising or falling edge of ticks

SampleQuantityMode.ContinuousSamples, // continuous or finite samples

1000 // number of finite samples to acquire or used for buffer size if continuous

);

 

在 C/C++ 設定工作項目時序

運用 DAQmxCfgSampClkTiming 函式在 C/C+ 設定工作項目時序。下列程式碼片段則可用於以 10000 hz 頻率運作的內部時脈。

char        clockSource[256] = "";
float64     rate = 10000;

DAQmxCfgSampClkTiming(taskHandle, clockSource, rate, DAQmx_Val_Rising, DAQmx_Val_ContSamps, 1000);

 

部分資料擷取介面卡使用交握做為數位 I/O 作業的時序。交握藉著與外部裝置交換請求、確認時序訊號來傳輸各個訊號。NI-DAQmx Timing 函式的 Handshaking 實體可針對數位 I/O 作業設定交握時序。

參考範例:

LabVIEWVoltage - Continuous Output.vi
Counter - Read Pulse Width and Frequency (Finite).vi
CVICont Gen Volt Wfm-Ext Clk
Buff Semi-Period-Finite
.NETContGenVoltageWfm_ExtClk
MeasBuffered_SemiPeriodFinite

 

NI-DAQmx Start Task


DAQmx Start TaskLibrary»NI-DAQmx»Task Configuration/Control»Start Task [CVI]

Task.Start Method [.NET]


正如前言所述,NI-DAQmx 使用的狀態模型省略了非必要的重新設定流程,因此能夠提升效率並優化效能。此狀態模型具有 5 個狀態,皆可附加工作項目。有關這些狀態的詳細資訊,可至 NI-DAQmx 輔助說明NI-DAQmx Key Concepts»Channels and Tasks in NI-DAQmx»Tasks in NI-DAQmx»Task State Model 下取得。

NI-DAQmx Start Task 函式能將工作項目具體轉換為運作狀態。在運作狀態之中,該工作項目將執行指定的擷取或產生作業。在未使用 NI-DAQmx Start Task 函式的情況下,執行 NI-DAQmx Read 函式,工作項目將隱式轉換為執行狀態並自動啟動。在未使用 NI-DAQmx Start Task 函式的情況下,如果執行 NI-DAQmx Write 函式,此工作項目也將因為所指定的 auto start 輸入而在背景進行轉換。

雖然這並非必要的步驟,還是建議使用 NI-DAQmx Start Task 函式確實開啟與硬體時序擷取或產生作業有關的工作項目。此外,如須多次執行 NI-DAQmx Read 函式或 NI-DAQmx Write 函式 (例如迴圈),便應搭配使用 NI-DAQmx Start Task 函式。否則,工作項目的效能將會因為不斷重新開始、結束而降低。如需取得 NI-DAQmx Start Task 函式使用時機的額外資訊,可參閱 When to Use the DAQmx Start Task and DAQmx Stop Task VIs 文章。

 

在 LabVIEW 建立工作項目

下列 LabVIEW 程式圖說明不須使用 NI-DAQmx Start 函式的原因 (類比輸出的產生作業僅包含單一軟體時序樣本)。

LabVIEW 程式方塊圖


下列 LabVIEW 程式圖的情狀則相反,說明必須使用 NI-DAQmx Start 函式的原因 (NI-DAQmx Read 函式必須多次執行,才能自計數器讀取資料)。

NI-DAQmx Start 函式

 

在 .NET 建立工作項目

如果要啟動工作項目,請使用 Task 物件中的 Start() 函式。下列程式碼片段採用 Start() 函式。

analogInTask = new Task();

analogInTask.AIChannels.CreateVoltageChannel( ... );

analogInTask.Timing.ConfigureSampleClock( ... );

analogInTask.Start();

 

在 C/C++ 啟動工作項目

如要啟動工作項目,請使用 DAQmxStartTask() 函式。所用的程式碼片段如下。

DAQmxStartTask(taskHandle);

 

參考範例:

LabVIEWCounter - Continuous Output.vi
Current - Continuous Input.vi
CVIDig Pulse train-Con
Cont 0-20mA Samps-Int Clk
.NETGenDigPulseTrain_Continuous
ContAcq0_20mACurrentSamples_IntClk

NI-DAQmx Read


DAQmx ReadLibrary»NI-DAQmx»Read Functions [CVI]

ChannelReader Class [.NET]



NI-DAQmx Read 函式可自指定的擷取工作項目中讀取樣本。此函式使用不同實體,可以選取擷取類型 (類比、數位或計數器)、虛擬通道的數量、樣本數量與資料類型。將 DAQ 介面卡 FIFO 上特定數量的樣本傳送至 PC 記憶體內的緩衝區之後,NI-DAQmx Read 函式可將樣本從 PC 緩衝區移至應用開發環境 (ADE) 的記憶體。

在 LabVIEW 讀取資料

下圖顯示 NI-DAQmx Read VI 不同實體的 4 個範例。

NI-DAQmx Read VI


可讀取多個樣本的 NI-DAQmx Read 函式實體提供輸入項目,能在函式執行時,指定讀取的每通道樣本數。針對有限的擷取作業,將每通道樣本數指定為 -1,函式便會在擷取完全部所需的樣本之後,再讀取這些樣本。針對連續的擷取作業,將每通道樣本數指定為 -1,函式便可在執行時,讀取緩衝區內目前可用的所有樣本。在下列 LabVIEW 程式圖中,NI-DAQmx Read VI 已經過設定,能夠從多個類比輸入虛擬通道讀取數個樣本,並以波形方式回送資料。此外,由於已將每通道樣本數設為常數值 10,因此 VI 每次執行時都將在各個虛擬通道讀取 10 個樣本。

 

在 .NET 讀取資料

如要使用 NI-DAQmx .NET 函式庫執行讀取作業,請使用讀取器與串流物件。此程式設計形式與檔案和網路 I/O 的 .NET Framework 形式類似。

類別具有 I/O 的相關屬性,例如 CurrentReadPosition,以及適用於原始 I/O 的方法。若要取得對應於特定工作項目的 DaqStream 類別實體,則使用 Stream 屬性。DaqStream 類別的實體無法直接具現化。

如要在 NI-DAQmx 函式庫執行讀取作業,請建立讀取器實體並傳遞建構函式中的 DaqStream 類別實體。接著,請呼叫讀取器類別的方法讀取資料,如下列程式碼片段所示:

analogInTask = new Task();

analogInTask.AIChannels.CreateVoltageChannel( ... );

//Create the reader and attach it to the stream
AnalogSingleChannelReader reader = new AnalogSingleChannelReader(analogInTask.Stream);

//執行讀取
double[] data = reader.ReadMultiSample(100);

 

以 C/C++ 讀取資料
請使用 DAQmxReadAnalogF64() 函式從 C/C++ 的類比輸入工作項目中讀取類比資料。如需了解其他讀取函式,請參閱 NI-DAQmx C 參考輔助說明。下列程式碼片段可從單一通道中讀取 1000 個樣本。

int numRead = 0;

DAQmxReadAnalogF64(taskHandle, 1000, 10.0, DAQmx_Val_GroupByScanNumber, data, 1000, &numRead, NULL);

 

參考範例:

LabVIEWVoltage - SW-Timed Input.vi
Digital - Finite Input.vi
CVIOne Sample
Read Dig Chan
.NETAcqOneVoltageSample
ReadDigChan

 

NI-DAQmx Write


DAQmx WriteLibrary»NI-DAQmx»Write Functions [CVI]

ChannelWriter Class [.NET]





NI-DAQmx Write 函式可寫入樣本至指定的產生工作項目。此函式使用不同實體,可以選取產生類型 (類比或數位)、虛擬通道的數量、樣本數量與資料類型。NI-DAQmx Write 函式可將樣本從應用開發環境 (ADE) 的記憶體移至 PC 記憶體內的緩衝區。接著,這些樣本又將從 PC 緩衝區傳送至 DAQ 介面卡 FIFO,以便執行產生作業。 

NI-DAQmx Write 函式的每個實體都具備自動啟動輸入的功能,可用來決定是否隱式啟動尚未執行顯式啟動的工作項目。正如此文件先前於 NI-DAQmx Start Task 部分所述,應透過 NI-DAQmx Start Task 函式啟動使用硬體時序的產生工作項目。如需多次執行 NI-DAQmx Write 函式,則應搭配 NI-DAQmx Start Task 函式以大幅提升效能。

在 LabVIEW 寫入資料

下圖顯示 NI-DAQmx Write VI 不同實體的 4 個範例。

在 LabVIEW 寫入資料


下列 LabVIEW 程式圖,針對有限類比輸出的硬體時序產生作業,提供連接至 NI-DAQmx Write VI 自動啟動輸入的「False」布林常數。NI-DAQmx Write VI 已經過設定,能夠針對單一通道,將類比輸出資料的多個樣本,以類比波形的方式寫入至工作項目。

DAQmx Write VI


在 .NET 寫入資料

如要使用 NI-DAQmx .NET 函式庫執行寫入作業,請使用撰寫器與串流物件。寫入過程與上述讀取資料的過程類似。

如果要在 NI-DAQmx 函式庫執行寫入作業,請建立撰寫器實體並傳遞建構函式中的 DaqStream 類別。接著,請呼叫撰寫器類別的方法,以寫入資料,如下列程式碼片段所示:

analogOutTask = new Task();

analogOutTask.AOChannels.CreateVoltageChannel( ... );

//Create the writer and attach it to the stream
AnalogSingleChannelWriter writer = new AnalogSingleChannelWriter(analogOutTask.Stream);

//Perform the write
double[] data = writer.WriteMultiSample(100);

 

在 C/C++ 寫入資料
如果要寫入類比資料,請使用 DAQmxWriteAnalogF64() 函式。如需了解如何撰寫其他形式的資料,請參閱 NI-DAQmx C 參考輔助說明。下列程式碼片段可以寫入 1000 個類比資料樣本。

int written = 0;

DAQmxWriteAnalogF64(taskHandle, 1000, 0, 10.0, DAQmx_Val_GroupByChannel, data, &written, NULL);

 

參考範例

LabVIEWVoltage - Finite Output.vi
Digital - Finite Output.vi
CVIVolt Update
Write Dig Chan
.NETGenVoltageUpdate
WriteDigChan

 

NI-DAQmx Wait Until Done


DAQmx Wait Until DoneLibrary»NI-DAQmx»Task Configuration/Control»Wait Until Task Done [CVI]

Task.WaitUntilDone Method [.NET]


NI-DAQmx Wait Until Done 函式將等待資料擷取作業完成之後,才結束工作項目。此函式主要用於確認工作項目停止之前,特定擷取或產生作業均已完成。NI-DAQmx Wait Until Done 函式最常用於有限作業。此函式一旦結束執行,便已完成有限的擷取或產生作業,因而能在不影響運作的情況下,終止工作項目。此外,透過 timeout 輸入便能指定最長等待時間。如果擷取或產生作業並未在這段時間內完成,函式便會退出並跳出對應的錯誤訊息。

在 LabVIEW 執行 Wait Until Done

下列程式圖使用的 NI-DAQmx Wait Until Done VI 函式能在清除工作項目之前,確認有限數位輸出作業皆已完成。

DAQmx Wait Until Done VI


在 .NET 執行 Wait Until Done

如需進一步了解如何在 .NET 使用這項功能,請參閱 GenMultVoltUpdates_IntClk 的隨附範例。

在 C/C++ 執行 Wait Until Done

DAQmxWaitUntilTaskDone() 函式主要用以等候緩衝區的所有樣本皆已產生。此函式應在「撰寫函式」或「啟動函式」之後呼叫。

 

參考範例

LabVIEWDigital - Finite Output.vi
Voltage - Finite Output.vi
CVIDig Pulse
Mult Volt Updates-Int Clk
.NETGenDigPulse
GenMultVoltUpdates_IntClk

 

NI-DAQmx Clear Task


DAQmx Clear Task Library»NI-DAQmx»Task Configuration/Control»Clear Task [CVI]

Task.Dispose Method [.NET]


 

NI-DAQmx Clear Task 函式會清除指定的工作項目。如果該工作項目正在執行,則函式將在停止工作項目後,釋放所有資源。工作項目一旦清除,除非重新建立,否則不能使用。因此,如需再次使用工作項目,便應使用 NI-DAQmx Stop Task 函式終止但不清除工作項目。

針對連續作業,則應使用 NI-DAQmx Clear Task 函式終止實際的擷取或產生作業。

在 LabVIEW 清除工作項目

下列 LabVIEW 程式圖顯示計數器所產生的連續脈衝列。直到退出 While Loop,至 NI-DAQmx Clear Task VI 開始執行之前,脈衝列都將持續做爲輸出。

DAQmx Clear Task VI


在 .NET 清除工作項目

在工作項目結束讀取或寫入作業後,只要呼叫 Task.Dispose 方法即可。

在 C/C++ 清除工作項目

在工作項目結束讀取或寫入作業後,使用 DAQmxClearTask() 函式。

參考範例

LabVIEWVoltage - Continuous Output.vi
Counter - Count Edges (Continuous Clock).vi
CVICont Gen Volt Wfm-Int Clk
Cnt Dig Events
.NETContGenVoltageWfm_IntClk
CountDigEvents

 

NI-DAQmx Properties

DAQmx Properties Attribute [CVI]

Property [.NET]

NI-DAQmx Properties 可用於存取與資料擷取作業有關的所有屬性。可將這些屬性寫入至 NI-DAQmx Properties 加以設定;也可以在 NI-DAQmx Properties 讀取這些屬性的目前值。

許多屬性都可藉由先前所述的 NI-DAQmx 函式設定。例如,Sample Clock Source Sample Clock Active Edge 屬性即可使用 NI-DAQmx Timing 函式設定。然而,一些較不常用的屬性卻只能透過 NI-DAQmx Properties 存取。

在 LabVIEW 運用屬性(屬性節點)


在 LabVIEW 中,使用單一 NI-DAQmx Property Node,便可寫入/讀取多個屬性。例如,下列 LabVIEW NI-DAQmx Timing Property Node 便設定了取樣時脈的來源。接著,讀取取樣時脈的來源。最後,則設定了取樣時脈的活動邊緣。


在下列 LabVIEW 程式圖中,NI-DAQmx Channel Property Node 啟用硬體低通濾波器,並設定濾波器的截止頻率,以輔助應變規量測作業。

LabVIEW 程式方塊圖


 

在 .NET 使用屬性

正如上述 Timing 部分所述,許多屬性必須在 Task 物件中的子類與集合完成設定。可用下列程式碼片段執行 NI-DAQmx 常用的屬性:

//Create a new NI-DAQmx Task
Task t = new Task();

//Access the subobject properties of the Task class
t.Timing.SamplesPerChannel = 1000;

 

在 C/C++ 使用屬性

各項工作項目屬性皆須透過 getter 與 setter 函式取得或設定。如需取得更多資訊,請至 NI-DAQmx C 輔助說明下的 NI-DAQmx C Properties,觀看屬性表與對應函式。

參考範例

LabVIEWStrain - Continuous Input.vi
Thermocouple (with OTCD) - Continuous Input.vi
CVICont Strain Samples
Cont Accel Samps-Int Clk-Anlg Start
.NETAcqStrainSamples
ContAcqAccelSamp_IntClk_AnalogStart

 

結論

NI-DAQmx 能夠縮短開發時間,並提升資料擷取應用的效能。NI-DAQmx 縮短開發時間的其中一個方法便是提供 API,僅須使用少數函式,便能發揮大部分的功能。實際上,只要習得此文件所述的 10 個函式,便足以處理 80% 的資料擷取應用。

深入了解

Was this information helpful?

Yes

No