WaveForms SDKを使う

Analog Discovery 2をdwfcmdから使う

WaveFormsは非常に良くできたアプリケーションであるが、速度や繰り返しの関係でC++から直接操作したいことがある。そういう場合は、対応した関数群を順次呼び出すことで機能が実現できるかもしれない。WaveForms SDKは”WaveForms”をインストールするとデフォルトでインストールされるようだ。在処は、標準では、

どのような関数が用意されていて、色々な言語から呼び出せるかは、“WaveForms SDK Reference Manual”を見ればよい。C++ひいてはC++ Builder CEから呼び出すことを試行する前に、上図のsamplesの中に、

というディレクトリがある。ここにサンプルプログラムがあるのだが、c,cs,py,vbはそれぞれC,csharp,python,visual basicを指すというのは開発に携わっている人ならピンとくるはずだ。残りのdwfcmdってなんだろう?

結論から言うと簡易言語でAnalog Discovery 2の機能を操るものである。今更であるが、Analog Discovery 2の主要な機能は、

AD変換器つまりオシロスコープの性能:
•	入力チャネル数: 2CH
•	周波数帯域: 30MHz
•	サンプリング周波数: 100Msps
•	分解能: 14bit
DA変換器つまり信号発生器の性能:
•	出力チャネル数: 2CH
•	出力電圧範囲: ±5V
•	周波数帯域: 20MHz
•	サンプリング周波数: 100Msps
•	分解能: 14bit

もちろんDigital IOも16bit(本)ある。

さてC++ Builder CEでのドライブの前に、dwfcmdの例を示そう。といってもsampleからだが、例えば”analoginout.txt“の中身は、

#debug=1
#Connect to the first available device
connect

#Select analogout first channel and enable
analogout
channel=1
enable=1

#Select function, configure frequency and ampltiude
sine
frequency=15Hz
amplitude=1V

#Start analogout channel
start

#Select analogin, enable channel 1
analogin
channel=1
enable=1

#Set frequency and number of samples to acquire
frequency=10k
samples=1000

#Wait a bit for device offset to stabilize
pause=2s

#Perform acquistion and save samples
start
finish
save=file1.csv

#Stop analogout channel 0
analogout
channel=1
stop

となっている。実際にはこのコマンド群を記述したファイルをdwfcmd.exeに入力すればよい。準備としては、gen1->scope1へだけつないで、

$ ./dwfcmd analoginout.txt
Starting AnalogOut Channel 1 generator, run infinite.
Starting AnalogIn single acquisition on 2 channels at 10kHz of 1000 samples, 100msec.
Call finish to wait for the acquisition to terminate.
Waiting to finish AnalogIn single acquisition.
Call save to export data to file.
Saved AnalogIn Channel 1 samples to file: "file1.csv"
Stopping AnalogOut Channel 1 generator.

これでSignal generator 1から出力した信号をScope 1で取得し、結果をfile1.csvに出力したということが見てとれる。結果はExcelから読み込めるcsvなので、file1.csvをダブルクリックして、読み込んだ上でグラフ化してみよう。

データが取れているようですね。dwfcmd.exe自体のソースファイルも提供されているので、何をやっているかはわかります。一通りのことはできますが、ループや条件分岐等々はサポートされていないので、ある程度複雑なことはCないしC++から駆動するのが吉です。あ、もちろん他の言語でもいいわけです。C++から駆動することを次の記事で書くかもしれません。

コメント