この記事で扱っていること
- デジタル出力の波形をデザインしてから出力する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWを使用してNational Instruments社のDAQ製品のデジタル出力を行うとき、「出力させたいデータ」の指定方法はいくつかあるのですが、DAQmxドライバに標準で付属してくるサンプルでは例えば8つのラインをビット列に見立て数字で指定するためにHIGHとLOWのタイミングが分かりづらかったりします。
思った通りのパターンを出すために、ブールの配列を用意してその配列の一つ一つをHIGHあるいはLOWと指定して出力させることもできますが、パターンが長いと不便で、かつその場で波形を確認できないのでなかなかわかりにくかったりします。
そこで、HIGHとLOWの状態とそれがどれくらい続くかの時間指定を行うだけで出力パターンをデザインできる機能を考えてみました。
その場ですぐに出力パターンがデジタル波形グラフに表示されるため、パターン全体を目視するのもとても楽になります。
どんな結果になるか
大元のプログラムは有限のデジタル出力としました。別に連続デジタル出力でも構いませんが、あるパターンをデザインしてそれを一回だけ実行するというような場面を想定しました。
このプログラムを実行すると、別ウィンドウが立ち上がり、ここで最小分解能と各ラインのHIGHやLOWの状態およびそれらの時間を指定することができます。
HIGH、LOWはLED制御器(ブールのLEDは通常表示器扱いですが右クリックで制御器に変更したものを使用)で決められます。
この最小分解能の設定が、メインVIで指定するサンプリングレートを決めます。
デザインが完成したらOKボタンを押すことで実際にそのデザインしたデジタルデータパターンを出力させることができます。
プログラムの構造
メインとなるプログラムは単純で、有限デジタル出力のサンプルからトリガなど省いた状態です。(トリガがあったら動作しないという意味ではなく、今回の記事に特に関係ない部分をそぎ落としてシンプルな形にしているだけです)
このプログラムの左上にあるdigital_out_design.viというサブVIが肝になってきます。このサブVIはVIプロパティの「ウィンドウの外観」でカスタマイズすることで、メインVIの中で実行された際にフロントパネルが表示されるようになっています。
このサブVIでは、効率化のためにイベントストラクチャを使用しました。イベントとしては3つ登録しています。
エラーの入出力のためにケースストラクチャを使用していますが、フロントパネル上ではこのエラー制御器、表示器を表示する必要はないため、適当な位置においてフロントパネルのウィンドウサイズを変えて見えなくなるようにしています。
フロントパネル上のクラスタ配列の値が変化するとこれをForループを二回使ってそれぞれの中身の要素を見て、HIGH(TRUE)やLOW(FALSE)を何個用意するかを計算し(指定された時間÷最小分解能)、それを配列初期化関数で用意しているだけです。
他のイベントとしてはデザインした波形をやり直すための初期化ボタンおよびデザインが終わったあとにこのサブVIを終了させるためのボタンを用意しています。
このサブVIができたら、メインVIの中に置くのですが、このサブVIから取り出す値は実際のデジタル波形だけでなく、サンプルレートの値も取り出します。この値はDAQmxタイミングの関数に渡すことで、デザインしたデジタル波形と同じサンプルレートを指定できるようになります。
前回実行時のデザインを引継ぎたい場合
デジタル波形をデザインして、後でそのデザインを再度使用する、あるいは前に使用したデザインを少しだけ変える、といった場合のために、作ったデザインを保存する機能を付けることもできます。
エクストラな内容なので機能として実装する必要がない、ということであればコーディングは不要とは言え、何かと便利かもしれないので一応紹介しておきます。
イベントは、ファイルを保存する場合と保存されたファイルを読み込む場合とで二つ追加します。
ファイル保存は配列のデータをある形式(後で読むときに読みやすい形式)にフォーマットして保存しています。
ファイル読み込みのイベントでは、ファイルから読み込んだ内容を配列へ入れるときには値(信号)プロパティを使用しています。値プロパティだと値を入れるだけなのですが値(信号)プロパティに書き込むことで、配列の値変化のイベントをプログラム的に実行させることができるようになります。
テキストファイルから読み取る関数は通常だと全体を一度に読んでしまいますが、右クリックしてライン読み取りを有効な状態としておくことで、最小時間分解能などの情報をそれぞれ別個に取り出せるようにしています。
デジタル出力のサンプルの指定方法より、こうした目に見えた形での出力波形デザインの方が、どんな波形を出せるかはっきりわかり使い勝手はいいと思うので参考にしてもらえるとうれしいです。
ここまで読んでいただきありがとうございました。
コメント