この記事で扱っていること
- ファイルから読みだした出力波形を自由に切り替える方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWを使用してハードウェアから特定の波形を出力するには、その波形の情報を波形データとして用意しておきこれを出力を行うための関数に渡す必要があります。
本記事ではNational Instruments社製のハードウェアであるDAQを使用することを前提に、波形データはあらかじめファイルで用意してあってこれを任意に切り替えて出力させるような方法を紹介します。
どんな結果になるか
プログラムのフロントパネルには、出力したい波形のデータが入ったファイルを指定するファイルパス、その中に入っている出力波形を表示するグラフ表示器があり、あとはDAQで出力を行う際の基本的なパラメタを載せています。
プログラムを実行するとファイルパスの中身を読んで出力したい波形を確認でき、反映させるというボタンを押すことで実際に出力させることができます。
ファイルパスを変更して別の波形情報を表示させたとしても、反映させるボタンを押さない限り実際に出力させる波形は影響を受けません。
ただし、後述するようにこのプログラムは「再生成を許可しない」状態としていて出力するデータ(サンプル)を常にデバイスに送っていますが、実際に信号が切り替わるタイミングはすぐではなくタイムラグがあります。
あくまで、プログラムを実行しながら、次に出す波形の形を確認しつつ出力させるものの出力タイミングはシビアではない場合に使用します。
プログラムの構造
ファイルから読みだす部分と出力をする部分に分けるため、ループを二つに分けてキューで結んでいます。いわゆる生産者ループがファイル読み込みを行う側になります。
ファイル読み込みの部分はイベントストラクチャで実装しており、波形を反映させるという場合のみエンキューをして波形を出力します。
二つの上下に並んだWhileループにいく前段階ではDAQタスクの基本的な設定を行っています。
一番最初には、とにかく出力するファイルが何かしら指定されていないと話にならないので、出力波形保存ファイルパスが空の場合にはファイルが指定されるまでその後の動作に進みません。
なお、もしこの時点で指定したファイルが正しくない(波形を記録したファイルではない)場合には以降プログラムは正しく動作しないので停止させて最初からやり直しになります。
また、出力タスクにおけるDAQmx書き込みのプロパティとして再生成モードを「許可しない」にしています。新しい波形を出力するために余計な再生成をデバイスのバッファ側で行わせないためです。
上下に並んだWhileループの上側では、まずタイムアウトイベントが実行されるように、イベントストラクチャの左上のタイムアウト値に0が入るようにします。
つまりこのイベントは最初に必ず実行されるようになっていて、指定したファイルパスの中身を呼び出して要素をエンキューし、下のWhileループに渡すようにしています。
これ以降タイムアウトイベントは起こらない(タイムアウト値に-1を入れている)ものの、出力波形保存ファイルパスを変更してもこのイベントは発生し、そのファイルの中身を「セットされた波形」グラフに表示させるようにしています。
他のイベントについては以下の図の通りです。
波形を反映させるのボタンの値変更で、ファイルから読みだした波形を下のWhileループに渡しますが、先頭に要素をエンキューすることに注意です。
続いて下のWhileループ。
上のWhileループからエンキューされた波形データを受け取るか、その後自分自身で再度要素をエンキューするかして回ります。
キューを排出している部分がありますが、もしこの処理がないとプログラムが上手く動きません(一つ前に出していた波形と新たな波形を交互に出すことになります)。
デキューがエラーの場合はWhileループを終了するようにします。
このデキューがエラーになるのは、上のWhileループが終了してキューが解放される場合で、「解放されたことでキューがなくなったためデキュー元がなくなりエラーが起きた」ということを利用してループを止める方法を適用しています。
波形ファイルの用意の仕方
本記事で紹介しているプログラムを動かすには、そもそも波形データを記録したTDMSファイルが必要になります。
TDMSファイルを用意するのに最もシンプルな形は以下のようなプログラムです。
より複雑な、いくつかの波形が組み合わさったようなものを作りたいということであれば、別記事でいくつか紹介しています。
波形データファイルを作る注意点としては、出力させる際の条件(サンプリングレートやDAQmxタイミングで指定するサンプル数)に対応した波形データを用意してファイルに書き込むことです。
本記事では、あらかじめファイルに用意した波形データを任意のタイミングで読み出し実際にハードウェアから出力させる方法を紹介しました。
LabVIEWのサンプルファインダにあるサンプルでも基本関数の出力であれば問題なくできますが、特定の波形をTDMSファイルとしてあらかじめ持っておくだけで自在に出力波形を変えられるので、特定の信号パターンを切り替えたいときなど参考にしてもらえるとうれしいです。
ここまで読んでいただきありがとうございました。
コメント