データ取得装置NI-DAQのVisual C++ 2010上での使い方

(1)ドライバのダウンロード

(2) NI-DAQからデータを取得するためのVisual C++ 2010の新規プロジェクトの作成方法

  • まず,新規プロジェクトを作成します.
  • プロジェクトへの追加情報
    • ツールバーから「プロジェクト>プロパティ>構成プロパティ>VC++ディレクトリ>インクルード」を選択し,「C:\Program Files (x86)\National Instruments\Shared\ExternalCompilerSupport\C\include」を追加.
  • ツールバーから「プロジェクト>既存項目の追加」を選択し,「C:\Program Files (x86)\National Instruments\Shared\ExternalCompilerSupport\C\lib32>msvc」の「NIDAQmx.lib」を選択.
  • 【コンパイルができない場合】
    • NI-DAQ用のincludeファイルとlibファイルとの関係が切れてしまって,エラーが出ることが推測されるため,上記の関連付けを再度確認してください.
  • 【Visual C++ 2012をインストールしている場合】
    • Visual C++ 2012をインストールしている場合,Visual C++ 2010のプロジェクトが動作しません.その場合は,Visial C++ 2012にて新規にプロジェクトを作成し,ni-daq.cppの内容をコピー&ペーストして,上記のinclude&libの関係付けを行ってください.
  • また,「Visual C++ 2012」と「Visual C++ 2010」を両方ともインストールしている場合も,Visual C++2010の方に不具合が生じる場合があります.その場合は,「Visual Studio 2010 Service Pack 1」<http://www.microsoft.com/ja-jp/download/details.aspx?id=23691>をインストールしてください.

(3)サンプルプログラムの説明

  • データ取得の基本となるサンプルコードは,「スタート>全てのプログラム>National Instruments>NI-DAQ>テキストベースコードサポート>DAQmx ANSI C>Simple Analog Input Example>Acq-IntClk.c」となります.
  • データ取得のサンプルコードにおいて重要なコマンドは,下記の3種類となります.使い方は,コマンドの説明ヘルプ「スタート>全てのプログラム>National Instruments>NI-DAQ>テキストベースコードサポート>NI-DAQmx C Reference Help」で確認してください.
    • DAQmxCreateAIVoltageChan:設定
    • DAQmxCfgSampClkTiming:設定
    • DAQmxReadAnalogF64:バッファに取得したデータを入力
#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
#include <NIDAQmx.h>
#include <math.h>
#include <time.h>

/***************************************************************/
// 設定変更部分
#define SAMPLING_RATE	2000	// 記録周波数[Hz]
#define TIME_DURATION	200	// PCに記録する時間間隔[ms]
#define NUM_OF_CH	2	// チャンネル数→ただし,「DAQmxCreateAIVoltageChan」の2個目の変数も変更の必要有
char device[]="Dev1/ai0:1";	// 使用するチャンネルの設定(例:Dev1/ai0, Dev1/ai3:6)
/***************************************************************/

#define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else

int i=0, j=0;

int _tmain(int argc, _TCHAR* argv[]){
	int32	error=0;
	TaskHandle	taskHandle=0;
	int32	read;
	float64	data[SAMPLING_RATE*TIME_DURATION/1000*NUM_OF_CH];
	float64	max=0;
	char	errBuff[2048]={'\0'};
 
	/*********************************************/
	// DAQmx Configure Code
	/*********************************************/
	DAQmxErrChk (DAQmxCreateTask("",&taskHandle));

	// データ取得の設定1
	DAQmxErrChk (
		DAQmxCreateAIVoltageChan(	taskHandle,
						device,//"Dev1/ai0:1",	// 物理チャンネルの範囲(例:Dev1/ai0, Dev1/ai3:6)
						"",
						DAQmx_Val_RSE,		// Referenced single-ended mode 
						-10.0,			// 計測の最大値[V]
						+10.0,			// 計測の最小値[V]
						DAQmx_Val_Volts,
						NULL));
	
	// データ取得の設定2
 	DAQmxErrChk (
		DAQmxCfgSampClkTiming(	taskHandle,
					"",
					SAMPLING_RATE,			// 1ch当たりのサンプリングレート[Hz]
					DAQmx_Val_Rising,		// サンプルクロックの立ち上がり時のタイミング
					DAQmx_Val_ContSamps,		// 有限:DAQmx_Val_FiniteSamps,連続:DAQmx_Val_ContSamps 
					SAMPLING_RATE*TIME_DURATION/1000));	// チャンネルごとのサンプル数
	
	/*********************************************/
	// DAQmx Start Code
	/*********************************************/
	DAQmxErrChk (DAQmxStartTask(taskHandle));

	/*********************************************/
	// DAQmx Read Code
	/*********************************************/
	// 連続データ取得
	while(1){
		// 特定時間間隔におけるデータ取得(1回分)
		DAQmxErrChk (
			DAQmxReadAnalogF64(	taskHandle,
						SAMPLING_RATE*TIME_DURATION/1000,		// チャンネルごとのサンプル数
						10.0,						// データ取得におけるタイムアウト設定[sec]
						DAQmx_Val_GroupByScanNumber,			// 時間順(DAQmx_Val_GroupByChannel:データ順)
						data,						// バッファ変数
						SAMPLING_RATE*TIME_DURATION/1000*NUM_OF_CH,	// データサイズ(チャンネルごとのサンプル数×チャンネル数
						&read,
						NULL));
	 
 	}//ループ終了

Error:
 	if( DAQmxFailed(error) )
		DAQmxGetExtendedErrorInfo(errBuff,2048);
	if( taskHandle!=0 )  {
		/*********************************************/
		// DAQmx Stop Code
		/*********************************************/
		DAQmxStopTask(taskHandle);
		DAQmxClearTask(taskHandle);
	}
	if( DAQmxFailed(error) )
		printf("DAQmx Error: %s\n",errBuff);

	return 0;
}

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-08-28 (水) 08:32:10 (1545d)