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

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

ドキュメント内 TUT-0022 (ページ 45-51)

第 4 章  チュートリアル 16

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. メンバ関数 OnFileout の設定を行います。以下のように設定します。

プロジェクト DaFileOut クラス名 CDaFileOutView オブジェクトID ID_FILEOUT メッセージ COMMAND

Step2. 出力データの作成

ここでは、これから出力を行う、アナログ波形データファイルの作成を行います。データファイ

ルの作成には、 Microsoft Excel等のデータ解析機能を備え、かつCSV形式へのファイル出力が可能

なアプリケーションがあれば、より効率よくその作成が行えますが、通常のテキストエディタで

も作成可能です。

1. 下記コードに示す、テキストファイルを作成します

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

(List17 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. データファイルからの出力

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

(List18 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関数に以下のコードを記述しま す。

(List19 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("ボードの設定に失敗しました");

DaClose(hDeviceHandle);

return;

}

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

ここに追加します

// アナログ出力更新設定

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から下図のような波形で出力されます。オシロスコ ープの設定にもよりますが、下図のような波形が出力されます。

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

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

では、データファイルからのアナログ出力処理ですが、まず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

となります。

次に、 List19 CDaFileOutViewクラスのOnFileout関数のコード データファイル出力 の処理を 読み取ってみましょう。プログラムはまず、データファイルの格納位置とそこに登録されている データ件数を取得します。

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

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

「使用例」

    INT    nFilecount;

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

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

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

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

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

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

データファイルからのアナログ出力においては、アナログ出力の繰り返し設定はできません。デ ータファイルに定義された件数のみの出力となります。

また、CSV形式のデータファイルからのアナログ出力では、データファイルに記載された物理量

をDLL内部でバイナリ値に変換するためオーバーヘッドがかかり、設定したアナログ出力更新レ

ートでアナログ出力が行えない場合があります。

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

弊社Web siteのダウンロードサイトにある『チュートリアル・プログラムソース集(Visual C++)

[BPC-0810]』をダウンロードして頂くと、ファイル名「SAMP.CSV」に2万件のデータがありま す。そちらのファイルで確かめて頂くと一層ご理解頂けると思います。

ファイルを変更する場合は、 List19 CDaFileOutViewクラスのOnFileout関数のコード データフ ァイル出力 の出力レンジの部分を DA_5V に変更し、プログラム中の DATA.CSV の部分 を SAMP.CSV に変更してください。

(List20 CDaFileOutView クラスの OnFileout 関数の変更コード )

// 出力状態の設定

Config.fSmplFreq = 5000; // 出力更新レート = 5kHz Config.SmplChReq[0].ulChNo = 1; // 出力チャンネル = チャンネル1 Config.SmplChReq[0].ulRange = DA_5V; // 出力レンジ = -5V〜5V

ここを変更します

ドキュメント内 TUT-0022 (ページ 45-51)

関連したドキュメント