第 4 章 チュートリアル 18
4.6 データファイルからの出力
FbiDa.DLLでは、 CSV(Comma Separated Value)形式でファイルに保存されたアナログ出力データを
ボードより出力することが可能です。以下にその方法を記載します。
Step1. 出力データの作成
ここでは、これから出力を行う、アナログ波形データファイルの作成を行います。データファイ ルの作成には、 Microsoft Excel等のデータ解析機能を備え、かつCSV形式へのファイル出力が可能 なアプリケーションがあれば、より効率よくその作成が行えますが、通常のテキストエディタで も作成可能です。
1. 下記コードに示す、テキストファイルを作成します。
2. 作成したテキストファイルをファイル名「Data.csv」で、プロジェクトファイルが保存されてい
る( 『正弦波出力』〜『その他の波形出力』までで作成したサンプルプログラムがある)場所と同
じ場所に保存します。
(List14 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
Step2. データファイルからの出力
1. 『正弦波出力』で作成したフォーム上にコマンドボタン(CommandButton)コントロールを描画 し、オブジェクト名を「cmdFileOut」に、Captionプロパティを「ファイル」に変更します。
2. 作成したコマンドボタン(cmdFileOut)のClickイベントに下記コードを記述します。
( List15 コマンドボタン (cmdFileOut) の Click イベントのコード)
Private Sub cmdFileOut̲Click() Dim pszFname As String Dim Fn As Long Dim RecCount As Long
'データファイルパス指定
pszFname = App.Path & "¥DATA.CSV"
'データ件数取得 Fn = FreeFile
Open pszFname For Input As #Fn
RecCount = 0 Do Until EOF(Fn) Input #Fn, dummy$
RecCount = RecCount + 1 Loop
Close #Fn
'ボードの設定
nRet = DaSetBoardConfig(hDeviceHandle, RecCount, 0, 0, 0) If nRet <> DA̲ERROR̲SUCCESS Then
MsgBox "ボードの設定に失敗しました"
Exit Sub End If
' 出力設定
Config.ulSmplRepeat = 0 Config.fSmplFreq = 20000 Config.SmplChReq(0).ulChNo = 1 Config.SmplChReq(0).ulRange = DA̲0̲5V
' アナログ出力更新設定
nRet = DaSetSamplingConfig(hDeviceHandle, Config) If nRet <> DA̲ERROR̲SUCCESS Then
MsgBox "アナログ出力更新設定に失敗しました"
Exit Sub End If
'バッファ内の出力データをクリアします nRet = DaClearSamplingData(hDeviceHandle) If nRet <> DA̲ERROR̲SUCCESS Then
MsgBox "バッファのクリアに失敗しました"
Exit Sub End If
'アナログデータを出力します
nRet = DaStartFileSampling(hDeviceHandle, pszFname, FLAG̲CSV, RecCount) If nRet <> DA̲ERROR̲SUCCESS Then
MsgBox "アナログ出力に失敗しました" & Hex(nRet) End If
End Sub
プログラムの入力が終わったら、保存した後、プログラムを実行し、「ファイル」ボタンをクリ
ックしてください。
では、データファイルからのアナログ出力処理ですが、まず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
となります。
では次に、 List15 コマンドボタン(cmdFileOut) の処理を読み取ってみましょう。プログラムは まず、データファイルの格納位置とそこに登録されているデータ件数を取得します。
この後、これまでのサンプルプログラムと同様にアナログ出力更新の設定を行い、データファイ ルからのアナログ出力を行っています。
データファイルからアナログ出力にはDaStartFileSampling関数を使用します。
データファイルからのアナログ出力では、アナログ出力の繰り返し設定はできません。データフ ァイルに定義された件数のみの出力となります。
また、CSV形式のデータファイルからのアナログ出力では、データファイルに記載された物理量 をDLL内部でバイナリ値に変換するためオーバーヘッドがかかり、設定したアナログ出力更新レ ートでアナログ出力が行えない場合があります。
「使用例」
nRet = DaStartFileSampling(hDeviceHandle, pszFname, FLAG̲CSV, RecCount)
関数が失敗するとエラーコ ードが格納されます。
ボードのオープン時に取得したデバイスハ ンドルを指定します。
データファイルのファイルパスを指定します。
ファイル形式を 指定します。
出力を行うデータ件数を指定します。
ここでは、50件のデータのため波形出力時間は短いですが、データの件数を増やすことで、この 時間も長くなります。
弊社Web siteのダウンロードサイトにある『チュートリアル・プログラムソース集(Visual Basic)
[BPC-0809]』をダウンロードして頂くと、ファイル名「SAMP.CSV」に2万件のデータがありま す。そちらのファイルで確かめて頂くと一層ご理解頂けると思います。
ファイルを変更する場合は、下記コードのプログラム中の DATA.CSV の部分を SAMP.CSV に変更してください。
(List16 コマンドボタン (cmdFileOut) の Click イベントの変更コード )
Private Sub cmdFileOut̲Click() Dim pszFname As String Dim Fn As Long Dim RecCount As Long
'データファイルパス指定
pszFname = App.Path & "¥SAMP.CSV"