• 検索結果がありません。

データファイルからの出力

ドキュメント内 Visual C++によるDA入門書 (ページ 42-48)

4. チュートリアル

4.7. データファイルからの出力

FbiDa.DLL では、 CSV ( Comma Separated Value )形式でファイルに保存されたアナログ出力デ ータをボードより出力することが可能です。以下にその方法を記載します。

Step1.メインウィンドウ作成 メインウィンドウ作成 メインウィンドウ作成 メインウィンドウ作成

ここでは、これから作成するプログラムの画面作成を行います。

1.

Visual C++ を起動し新しいプロジェクト(プロジェクト名: DaFileOut )を作成します。

2.

プロジェクトに FBIDA.LIB ファイル、 FBIDA.H ファイルのパス指定を行い、ライブラリフ

ァイル fbida.lib をリンクします。

3.

メインウィンドウにメニューアイテムの追加を行います。ポップアップのチェックをはずし 以下のように設定します。

ID ID_FILEOUT

キャプション ファイル出力

図 図 図 図 4-27

4.

メンバ関数 OnFileout の設定を行います。以下のように設定します。

プロジェクト DaFileOut

クラス名 CDaFileOutView

オブジェクト ID ID_FILEOUT メッセージ COMMAND

Step2 2 2.出力データの作成 2 出力データの作成 出力データの作成 出力データの作成

ここでは、これから出力を行う、アナログ波形データファイルの作成を行います。データファ イルの作成には、 Microsoft Excel 等のデータ解析機能を備え、かつ CSV 形式へのファイル出力 が可能なアプリケーションがあれば、より効率よくその作成が行えますが、通常のテキストエデ ィタでも作成可能です。

チェックをはずします

1.

List 7-1 に示す、テキストファイルを作成します

2.

作成したテキストファイルをファイル名「 DATA.CSV 」で、先ほど作成したプロジェクトフ ァイルが保存されている場所と同じ場所に保存します。

List

-1 CSV

データ:[正弦波])

2.500000 2.813333 3.121724 3.420311 3.704384 3.969463 4.211367 4.426283 4.610819 4.762067 4.877641 4.955718 4.995066 4.995066 4.955718 4.877641 4.762067 4.610819 4.426283 4.211367 3.969463 3.704384 3.420311 3.121724 2.813333 2.500000 2.186666 1.878275 1.579688 1.295615 1.030536 0.788632 0.573716 0.389180 0.237932 0.122358 0.044281 0.004933 0.004933 0.044281 0.122358 0.237932 0.389180 0.573716 0.788632 1.030536 1.295615 1.579688 1.878275 2.186666

Step3 3 3.データファイルからの出力 3 データファイルからの出力 データファイルからの出力 データファイルからの出力

1.

FileView を表示し、 SourceFile フォルダを展開して DaFileOutView.cpp の以下の位置(最初の 部分)に #include “fbida.h” を追加します( List7-2 )

List

-2 fbida.h

のインクルード)

// DaFileOutView.cpp : CDaFileOutView クラスの動作の定義を行います。

//

#include "stdafx.h"

#include "DaFileOut.h"

#include "DaFileOutDoc.h"

#include "DaFileOutView.h"

#include "fbida.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

2.

ClassView を表示し、 CDaFileOutView クラスを展開して OnFileout 関数に以下のコード

( List7-3 )を記述します。

List

-

CDaFileOutView

クラスの

OnFileout

関数のコード

データファイル出力)

void CDaFileOutView::OnFileout() {

// TODO: この位置にコマンド ハンドラ用のコードを追加してください

FILE *fp; // ファイルポインタ

HANDLE hDeviceHandle; // デバイスハンドル

DASMPLREQ Config; // DASMPLREQ構造体

INT nRet; // 関数の実行結果

INT nFilecount; // データ件数

char szTemp[40]; // ファイルデータ格納

nFilecount = 0;

// ボードの初期化を行います hDeviceHandle = DaOpen("FBIDA1");

if(hDeviceHandle == INVALID_HANDLE_VALUE){

AfxMessageBox("デバイスの初期化に失敗しました");

return;

}

// データ件数の取得 fp = fopen("DATA.CSV","r");

while(fgets(szTemp,20,fp) != NULL) nFilecount++;

fclose(fp);

// ボードの設定

nRet = DaSetBoardConfig(hDeviceHandle,nFilecount,NULL,NULL,0);

if(nRet != DA_ERROR_SUCCESS){

AfxMessageBox("ボードの設定に失敗しました");

ここに追加します

// アナログ出力設定情報読み出し

nRet = DaGetSamplingConfig(hDeviceHandle, &Config);

if(nRet != DA_ERROR_SUCCESS){

AfxMessageBox("アナログ出力設定情取得に失敗しました");

DaClose(hDeviceHandle);

return;

}

// 出力状態の設定

Config.fSmplFreq = 5000; // 出力更新レート = 5kHz

Config.SmplChReq[0].ulChNo = 1; // 出力チャンネル = チャンネル1

Config.SmplChReq[0].ulRange = DA_0_5V; // 出力レンジ = 0V〜5V // アナログ出力更新設定

nRet = DaSetSamplingConfig(hDeviceHandle, &Config);

if(nRet != DA_ERROR_SUCCESS){

AfxMessageBox("アナログ出力更新設定に失敗しました");

DaClose(hDeviceHandle);

return;

}

// バッファ内の出力データのクリア nRet = DaClearSamplingData(hDeviceHandle);

if(nRet != DA_ERROR_SUCCESS){

AfxMessageBox("バッファのクリアに失敗しました");

DaClose(hDeviceHandle);

return;

}

// アナログデータ(ファイルデータ)の出力

nRet = DaStartFileSampling( hDeviceHandle, "DATA.CSV", FLAG_CSV, nFilecount);

if(nRet != DA_ERROR_SUCCESS){

AfxMessageBox("アナログ出力に失敗しました");

DaClose(hDeviceHandle);

return;

}

AfxMessageBox("データ出力終了しました");

// 終了処理

nRet = DaClose(hDeviceHandle);

if(nRet != DA_ERROR_SUCCESS){

AfxMessageBox("デバイスの終了処理に失敗しました");

} }

プログラムの入力が終わったら、保存した後、プログラムを実行し、メニューバーにある「フ ァイル出力」ボタンをクリックしてください。

DATA.CSV に定義した値(電圧)がチャンネル 1 から下図のような波形で出力されます。オシ

ロスコープの設定にもよりますが、下図のような波形が出力されます。

図 図 図 図 4-28

※オシロスコープの設定により、異なる場合があります。

ファイルの出力が終了すると下図のダイアログボックスが表示されます。

図 図 図 図 4-29

では、データファイルからのアナログ出力処理ですが、まず CSV 形式ファイルの作成に関し説 明します。

作成する CSV 形式ファイルは、出力チャンネルを「, 」で区切り、出力値の物理量を行に定義 します。データファイル( DATA.CSV )はチャンネル 1 のみの出力でしたが、チャンネル 1, チ ャンネル 2 から同時に出力する場合は、

2.500000,2.500000 2.813333,2.813333 3.121724,3.121724 3.420311,3.420311 3.704384,3.704384

となります。

次に、 List7-3 の処理を読み取ってみましょう。プログラムはまず、データファイルの格納位置

とそこに登録されているデータ件数を取得します。

この後、これまでのサンプルプログラムと同様にアナログ出力更新の設定を行い、データファ イルからのアナログ出力を行っています。

データファイルからアナログ出力には DaStartFileSampling 関数を使用します。

データファイルからのアナログ出力においては、アナログ出力の繰り返し設定はできません。

データファイルに定義された件数のみの出力となります。

また、 CSV 形式のデータファイルからのアナログ出力では、データファイルに記載された物理 量を DLL 内部でバイナリ値に変換する為オーバーヘッドがかかり、設定したアナログ出力更新

「使用例」

    INT    nFilecount;

nRet = DaStartFileSampling DaStartFileSampling DaStartFileSampling DaStartFileSampling(hDeviceHandle, DATA.CSV, FLAG̲CSV, nFileCount);

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得した デバイスハンドルを指定します。

データファイルのファイルパスを指定します。

出力を行うデータ件数 を指定します。

フ ァ イ ル 形 式 を 指定します。

ここでは、 50 件のデータのため波形出力時間は短いですが、データの件数を増やすことで、こ の時間も長くなります。

弊社ホームページのダウンロードサイトにある「チュートリアル・プログラムソース集( Visual

C++ ) [ BPC-0810 ] 」をダウンロードして頂くと、ファイル名「 SAMP.CSV 」に 2 万件のデータが

あります。そちらのファイルで確かめて頂くと一層ご理解頂けると思います。

ファイルを変更する場合は、 List 7-3 の出力レンジの部分を DA_5V に変更し、プログラム

中の DATA.CSV の部分を SAMP.CSV に変更してください。

List

-

CDaFileOutView

クラスの

OnFileout

関数の変更コード)

// 出力状態の設定

Config.fSmplFreq = 5000; // 出力更新レート = 5kHz

Config.SmplChReq[0].ulChNo = 1; // 出力チャンネル = チャンネル1

Config.SmplChReq[0].ulRange = DA_5V; // 出力レンジ = -5V〜5V

ここを変更します

ドキュメント内 Visual C++によるDA入門書 (ページ 42-48)

関連したドキュメント