準備階段
本教學需要您在電腦上安裝及準備以下軟體和硬體:
- LabWindows/CVI 7.0 或以上版本。
- NI-DAQmx 7.0.1 或以上版本。
- 支持NI-DAQmx 的 DAQ 硬體裝置。 (您可參考NI-DAQ 7.x Readme中 NI-DAQmx 支援的裝置清單)
有關安裝和配置軟體和硬體的資訊,請參閱DAQ Quick Start Guide 以及裝置文檔。
建立task
您可以使用 DAQ 小幫手快速建立 DAQ task(任務)。task是一個或多個具有timing、triggering和其他屬性的虛擬通道的集合。從概念上來說,task代表您要執行的measurement(量測)或generation(生成)。您可以在task中設置和保存所有設定資訊,並在應用程式中使用該task。
要從 LabWindows/CVI 啟動 DAQ 小幫手,請選擇 Tools»Create/Edit DAQmx Tasks。出現如圖 1 的對話框。

圖1
建立用於 LabWindows/CVI 專案的task時有兩個選擇:
- 基於 MAX 的tasks: 特點是可以被同一電腦上的其他程式所使用。您可以直接從 MAX 中查看、編輯和測試此類task。您可以在多個專案中使用基於 MAX 的task,甚至那些不是在 LabWindows/CVI 中建立的task。
- 基於專案的task: 儲存在專案中。儲存在專案中的task是該專案的本地task。如果您需要在多個開發人員之間共享task定義或將task定義儲存在版本控制系統中,則基於專案的task會更加方便。
以下分別介紹此兩種方式:
建立基於 MAX 的task
- 從Create/Edit DAQmx task對話框中選擇在Create New Task in MAX。
- 點擊“OK”啟動 DAQ 小幫手。
- 接著選擇您的task選擇量測種類,然後點擊Next。
- 選擇virtual channel (虛擬通道)並點擊Next。
- 輸入task的名稱,然後點擊Finish。
- 接著在如圖 2 的 DAQ 小幫手面板中,您可以配置特定於通道的設定,例如scaling(縮放)、輸入限制和終端配置。您還可以配置特定於task的設定,例如timing和triggering。

圖2
- 當您指定各種設定後,您可以測試task。點擊“Test”按鈕以驗證task是否正常工作。
- 完成後點擊“OK”。 DAQ 小幫手將task保存到 MAX。
關於使用 DAQ 小幫手設定task的更多資訊,請參考
DAQ Assistant Help,它已隨著 NI-DAQmx 一起被安裝至您的電腦中了。
建立基於專案的task
- 從Create/Edit DAQmx task對話框中選擇Create New Task in Project。
- 點擊“OK”啟動 DAQ 小幫手。
- 根據您的需求為您的task選擇量測類型,然後點擊Next。
- 選擇virtual channel(虛擬通道)並點擊Next。
- 接著在如圖 3 所示的 DAQ 小幫手面板中,您可以配置特定於通道的設定,例如scaling(縮放)、輸入限制和終端配置。您還可以配置特定於task的設定,例如timing(計時)和triggering(觸發)。
- 當您指定各種設置時,您可以測試task。點擊“Test”按鈕以驗證task是否正常工作。
- 最後在圖 3 所示的 DAQ 小幫手面板下方區域輸入以下資訊:
- Task Name - task的名稱以及將建立的 .c 、 .h和.mxb 文件的前綴。例如,使用DAQTaskInProject作為task名稱。
- Create Task Function - 讓您呼叫用來建立和配置task的函式名稱。例如,使用CreateDAQTaskInProject作為task建立函式。
- Target Directory - 生成的三個文件將被儲存的路徑位置。

圖 3
- 點擊“OK”以生成task。
DAQ 小幫手生成三個文件來描述 LabWindows/CVI 中的task:source(
.c )、header(
.h ) 和task描述文件
(
.mxb ) 。 LabWindows/CVI 會自動地將這些文件加到
專案中。生成的source和header文件定義了task建立函式,其中包含以程式方式建立和配置指定task所需的程式碼。生成的task描述文件 (
.mxb ) 包含在 DAQ 小幫手中編輯task時使用的task的二進制描述。雙擊
.mxb檔案會在DAQ 小幫手打開該task。這些文件都連結到建立的task,因此您在 DAQ 小幫手對task所做的任何更改都會自動反應到生成的程式碼中。
關於使用 DAQ 小幫手配置task的更多資訊,請參考
DAQ assistant help,它已隨著 NI-DAQmx 一起被安裝至您的電腦中了。
在 LabWindows/CVI 專案中使用task
完成建立task後,您可以在 LabWindows/CVI 專案中使用它。
基於 MAX 的task
要使用基於MAX的task,呼叫DAQmxLoadTask,如圖4中最後一段code。
DAQmxLoadTask功能面板包含您電腦中的所有"基於MAX-DAQmx 的task"清單。在此功能面板中的Task Name 控件上按 <Enter> 可查看task 清單。
#include <NIDAQmx.h>
#include <cvirte.h>
static int32 samplesPerChan;
staticfloat64 data[1000];
staticTaskHandle daqTask;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* 記憶體不足 */
/* 下方函式呼叫加載 "基於 MAX 的task" */
DAQmxLoadTask("MyVoltageTask", &daqTask);
DAQmxReadAnalogF64 (daqTask, DAQmx_Val_Auto, 10.0,
DAQmx_Val_GroupByChannel, data, 1000, &samplesPerChan, 0);
DAQmxClearTask(daqTask);
return 0;
}
|
圖 4
基於專案的task
要使用基於
專案的task,請呼叫在生成的header文件中聲明
的task creation function (
建立
函式)(本範例中為 CreateDAQTaskInProject)。您還必須將其header文件include (包含)在您的主
專案文件中。請參考圖 5。
#include <NIDAQmx.h>
#include <cvirte.h>
/* include生成的header文件 */
#include "DAQTaskInProject.h"
static int32 samplesPerChan;
static float64 data[1000];
static TaskHandle daqTask;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* 記憶體不足 */
/* 下方函式呼叫加載 "基於專案的task"*/
CreateDAQTaskInProject(&daqTask);
DAQmxReadAnalogF64 (daqTask, DAQmx_Val_Auto, 10.0,
DAQmx_Val_GroupByChannel, data, 1000, &samplesPerChan, 0);
DAQmxClearTask(daqTask);
return 0;
}
|
圖 5
基於專案和基於 MAX 的task
在呼叫
DAQmxLoadTask或task建立函式後,增加執行所需操作所需的其他函式。
舉例來說,如果您從模擬輸入通道讀入資料,您可能需要使用
DAQmxReadAnalogF64函式。
完成task後呼叫之後記得呼叫
DAQmxClearTask函式以停止task並從記憶體中中清除該task。
生成範例程式碼
您還可以使用 DAQ 小幫手生成執行task所需的程式碼。
- 為 "基於 MAX 的task" 生成範例程式碼——在Source視窗中,右鍵點擊對DAQmxLoadTask的調用並選擇 Generate DAQ Example Code。
- 為 "基於專案的task" 生成範例程式碼——在Source視窗中,右鍵點擊對task建立函式的呼叫(例如CreateDAQTaskInProject ),然後選擇Generate DAQ Example Code。
當您為基於專案或基於 MAX 的task點選 Generate DAQ Example Code 時,將出現 Generate DAQ Example Code 對話框,如圖 6 所示。

圖 6
在對話框中,指定執行task的函式名稱和包含生成的範例程式碼的文件,然後點擊OK 。生成的程式碼包括定義執行task函式的source和header文件。 LabWindows/CVI 會自動地將這些文件增加到專案中並修改當前source文件以呼叫並執行task函式。呼叫時,執行task函式以程式化方式建立一個使用者界面以啟動task並顯示資料。
下圖顯示 "基於專案的task" 選擇生成 DAQ 範例程式碼後的範例source code。
#include <NIDAQmx.h>
#include <cvirte.h>
#include "DAQTaskInProject.h"
/* 範例程式的header文件 */
#include "DAQTaskInProjectExampleCode.h"
static int32 samplesPerChan;
static float64 data[1000];
static TaskHandle daqTask;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* 記憶體不足 */
CreateDAQTaskInProject(&daqTask);
/* 執行task的函式呼叫 */
RunDAQTaskInProject(daqTask);
return 0;
}
|
圖 7
編輯現有task
建立task後,您可以透過多種方式開啟 DAQ 小幫手來編輯task。您可以透過點擇Tools » Create/Edit DAQmx task來編輯任何類型的task。此命令啟動Create/Edit DAQmx task對話框,您可以在其中選擇要編輯的task。
您可以直接透過選擇My System » Data Neighborhood » NI-DAQmx task 以編輯基於 MAX 的task。
您可以透過雙擊 LabWindows/CVI 專案樹中的 .mxb文件來編輯基於專案的task。
當您完成task的編輯時,LabWindows/CVI 會根據您所做的任何更改自動更新 MAX task或專案中的配置文件。但是,您生成的範例程式碼不會自動更新。由於範例程式碼未直接連接到task,因此如果對task進行任何修改,則必須重新生成task的範例程式碼以反應所做的更改。
將 MAX task複製到專案
您可以建立一個新的基於專案的task,它是基於 MAX 的task的copy。在 Source 窗口中,右鍵點擊對DAQmxLoadTask的調用並選擇Copy DAQ Task to Project 。在出現的對話框中,您必須指定task名稱、task建立函式和目標目錄,就像您在 DAQ 小幫手中為基於專案的task指定的一樣。點擊“OK”後,LabWindows/CVI 生成source ( .c )、header( .h ) 和task描述文件 ( .mxb ) 並將這些文件增加到專案中;將呼叫 DAQmxLoadTask替換為呼叫新task建立函式;並include生成的header文件。
注意:MAX task與您建立的新專案task之間沒有連接。您對 MAX task所做的任何更改都不會自動反應在新專案task中。
額外資訊
關於 NI-DAQmx 的更多資訊以及使用 DAQ 小幫手配置task的更多資訊,請參考以下文件。
DAQ Quick Start Guide,位於開始»...»National Instruments»NI-DAQ
NI-DAQmx Help,位於開始»...»National Instruments»NI-DAQ
DAQ Assistant Help,可在 DAQ 小幫手的右側窗格中訪問
LabWindows/CVI Help,位於開始»...»National Instruments»LabWindows/CVI