LabVIEWは元々プログラミングが苦手な人、専門ではない人でもなるべく簡単に目的を達成できるようにと開発されたプログラミング言語です。
そして、この目的というのはハードウェアの操作だったりします。ハードウェアを制御して信号を測定したりあるいは信号を出すといったことがLabVIEWでは意外とあっさりできてしまいます。
とはいっても、LabVIEWを全然触ったことがないという方にとってはいくらそんなことを文章で言われてもよく分からない!というのが本音だと思います。
そして「なんだかんだ言ってもプログラミング言語なんでしょ、苦手だな」という方にとってはどれくらい簡単なのかが分からない状態でやみくもに学び始めてもモチベーションが上がらないと思います。
そこで、本記事ではLabVIEWの細かい知識には深く入らず大雑把にどんな操作でハードウェアを扱えるようになるのか、簡単な流れをステップごとに紹介していきます。特別LabVIEWの知識がなくても読んでいただけるかなと思います。
いくつか注意点なども交えながら紹介していきますが、この記事を見ながら進めていけば簡単な測定とその記録ができるようになります。
なお、本記事はNational Instruments社が出しているハードウェアであるDAQと呼ばれる製品を使用することを想定しています。そんなハードウェア持っていないよという方でもシミュレーション機能を使って実際に同じような作業を真似ることはできるのでそのことについても触れていきます。
大まかな流れと下準備
では実際にどのようにしてハードウェアを扱うかについてみていきます。
今回は、ハードウェアで信号を測定しその測定信号を記録するというところまで行います。
大まかな流れは次の4つのステップとなります。
- NI MAXでハードウェアを検出、名前を付ける
- LabVIEWでハードウェアの構成を行う
- LabVIEWで記録の仕方を構成する
- LabVIEWで各機能をつなぎ合わせる
これらは直感的に行える操作が多いです。次の項目から一つずつ解説していきますね。
・・・の前にここで前提条件を一つ。以下の記事で紹介するDAQというのはハードウェアのことなのですが、このハードウェアを動作させるためのドライバソフトウェアが必要になります。
National Instruments社のDAQハードウェアに対するドライバソフトウェアはDAQmxと呼ばれていて、「LabVIEW DAQmx ダウンロード」などと検索するとインストーラをダウンロードできるページがググれると思うのでそこから入手します。(これ自体は無料で入手できるものになっています)
LabVIEWのバージョンとDAQmxのバージョンが異なっている場合対応していない(互換性がない)ことがあるので、DAQmxのダウンロードページにあるReadmeを確認して、LabVIEWをインストールした後にこれと互換性のあるDAQmxをインストールすることが必要です。
NI MAXでハードウェアを検出、名前を付ける
まずはじめのステップです。それは、ハードウェアがちゃんとPCに接続され認識もされているかを確認する作業です。
ハードウェアが正しく接続されているか、一般的にはWindowsのデバイスマネージャで確認するかと思いますが、LabVIEWでハードウェアを扱う際にはNI Measurement & Automation Explorer (通称NI MAX)を使用します。
大雑把に言えば、これは「LabVIEWで使用するハードウェアを管理するためのソフトウェア」です。
既に上記のソフトウェアをインストールしていてこの記事を読まれている方は、そんなソフトウェアインストールしたことないな、と思われるかもしれませんが、DAQmx等のドライバソフトをインストールすると勝手にインストールされています。
NI MAXを開くといくつかの項目が出るのですが、今回重要なのはマイシステムの中のデバイスとインタフェースの項目です。
こちらを展開すると、既にいくつか項目が並んでいると思います。(使用している環境によって、表示される項目数が異なる場合があります)
もし、ハードウェアを持っている場合には、PCにつなげてみてください。本記事では、たまたま持っていたUSB-6361というDAQハードウェアを接続した場合で説明します。ちなみにUSB-6361とはUSBで接続するタイプのハードウェアで、アナログやデジタルの信号の測定や出力を行うことができるものです。
ハードウェアがない場合
さて、ここでハードウェアを持っていないよという方は後の記事を追えない・・・のかというとそうではなく、ハードウェアをシミュレーションする機能でNI MAX上にハードウェアを登場させることができます。
やり方はとても簡単で、デバイスとインタフェースを右クリックして新規作成、この中からNI-DAQmxシミュレーションデバイスまたはモジュール式計測器シミュレーションデバイスという項目を選択して次へをクリック、表示されるウィンドウからシミュレーションしたいハードウェアを選択するだけです。
このようにすることで、LabVIEWで操作可能な、仮想のハードウェアを構成することができます。
ハードウェアがない場合にはこの方法でシミュレーションデバイスを用意して続きを読んでいただければと思います。
さて、実機あるいはシミュレーションでNI MAX上にハードウェアが表示されたら、このステップでやることは半分終わりです。NI MAXは本当はもっといろんな機能があるのですが、今回は「セルフテスト」と「デバイス名の変更」を行います。
「セルフテスト」はPCがそのデバイスをちゃんと認識していますよね?という通信確認を行う機能です。実機をつないでNI MAX上に表示されているのであればまぁ基本的に成功するはずです。(シミュレーションデバイスは100%成功します)
「デバイス名の変更」は、この後LabVIEWでそのデバイスを指定する際の名前を決めます。後でいくらでも変更可能なのですが、デフォルトだと「Dev1」などという表記なので区別しやすい名前にすることをオススメします。
これでNI MAXの設定は終わりです。
より実際的なNI MAXの使用
NI MAXでは他にもいろいろなことが行えます。以下の内容は読み飛ばしてしまってもその後の内容に直接関係はない補足的な内容なのですが、実際に本格的にハードウェアを使用する際には使うことの多い機能です。
まずは、デバイスのピン配列の確認です。いちいちマニュアルを持ってきたり検索したりすることなく、NI MAX上でピン配列を確認できるので、配線がわからなくなった場合にすばやく確認することができます。
次にテストパネルです。以下で紹介するLabVIEWによるハードウェア操作を行う前に、簡易的にテスト測定を行える機能です。データの記録はできませんが、センサーからの信号などが正しくとれていそうか、プログラムを組む前に確認できる機能として重宝します。
LabVIEWでハードウェアの構成を行う
次に早速LabVIEWで構成を行っていきます。
LabVIEWを開いたら、新規VIを選択する(あるいはCtrl + Nを押す)ことで新しいviを開きます。なお、viとはLabVIEWで作られたプログラムファイルのことです。
新規viが開いたら、二つのパネルが出ると思います。一つはフロントパネル、もう一つはブロックダイアグラムと呼ばれます。それぞれ大雑把に
- フロントパネル・・・ユーザーインタフェース
- ブロックダイアグラム・・・コードを記述
のためのウィンドウだと考えてください。
今からするのはプログラムの構築なので、ブロックダイアグラムを選択します。といってもゴリゴリにプログラムを書くわけではありません。
ブロックダイアグラムを選択後、右クリックすると「関数」と書かれたウィンドウ(これを関数パレットと呼びます)が表示されるので、この中にある「計測I/O」の中の「DAQmx」>>「DAQアシスタント」を選択します。
DAQアシスタントの項目をクリック後、ブロックダイアグラムの適当な場所をクリックすることで配置できます。すると別のウィンドウが立ち上がります。
LabVIEWは、関数パレットに表示されていたように、それぞれの機能をブロック(関数)を使って組み合わせてプログラム全体を構築していきます。
中でもこのDAQアシスタントというのは特殊なブロックで、「あるまとまった機能を自動的に構成する」ブロックです。(名前を覚える必要はありませんがExpress VIと呼ばれます)
その「まとまった機能」の設定を行うためのダイアログウィンドウが開いた、ということになります。
ダイアログが開いたら、測定の種類を選択します。今回はアナログ信号の測定を行うので、アナログの信号測定に進み、その中から電圧を選択します。
そしてどのチャンネルで測定を行うかを指定します。DAQのハードウェアにはたくさんのチャンネル(信号線をつなげる端子)があります。今回はAI0を選択しますが、もちろん一度に複数のチャンネルを選択することもできます(Ctrlを押しながらチャンネルを選択)。
選択後終了を押すと、別の画面に切り替わって測定のパラメータを指定する画面が出てきます。
この画面では、サンプリング、つまり測定をどのように行うかを決定します。試しに今回は
- 集録モードは連続サンプル
- サンプリングレートは1000 Hz、サンプル数は1000
とします。他の設定はとりあえず今回はそのままにしてOKを押します。
あとはLabVIEWが勝手にこの設定に沿ったプログラムを自動生成してくれるのでこれで2つ目のステップは終わりです。
なお、下の図で表示される自動ループ作成を確認の項目は、「今構成したデータ測定を繰り返しますか?」ということを聞いています。ここで「はい」を選ぶと、水色のアイコンがグレーの枠でぐるっと囲まれます。このグレーの枠はWhileループと呼び、この枠に入った処理を繰り返すという意味になっています。
繰り返すということは処理が終わらないということ?と思われるかもしれませんが、この繰り返しの処理を終わらせるのが右下にある赤い丸ぽちです。緑色の線が水色のアイコンの一部から赤い丸ぽちにつながっていますが、これは「水色のアイコンから繰り返しを終わらせるかどうかの判断の情報が赤い丸ぽちにつながっている」状態です。今回はこの部分はこのままにして使うことにします。
パラメタの説明
ここで上で設定した各パラメタを補足で説明します。意味はわかっているよ、という方は読み飛ばしてしまって構いません。
サンプリングレートとは、データを測定する間隔です。ハードウェアは配線したワイヤからの信号を受け取っているのですが、その信号を常に処理(AD変換)できるわけではありません。1秒に決まった数の信号を取得しています。サンプリングレートは、この「決まった数」を指定します。
例えばサンプリングレートが1000 Hzというのは、1秒間に1000個のデータを取得するという意味になります。別の言い方をすると、一点一点の間隔が1/1000秒、つまり1ミリ秒となっているということです。
次にサンプル数ですが、これは後述するグラフ表示に関わってきます。ここでは大雑把に、「グラフに一度に何点表示させるか」を指定すると思ってください。
例えばサンプルレートが1000 Hz(1ミリ秒)でサンプル数が1000ということは、「1ミリ秒間隔でとられてきたデータを1000点分グラフに表示する」ということなので、グラフには1秒分のデータが表示されることになります。もっと言うと、1秒にグラフは1回更新されるということです。
もし他の値にした場合にもわかるように書くと、
・グラフには一度に「サンプル数÷サンプルレート」秒分のデータが表示される
・1秒にグラフは「サンプルレート÷サンプル数」回更新される
と言えます。
記録の仕方を構成する
さて、プログラムとしてはもうこれでハードウェアからの信号の測定はできるようになりました。ですがせっかくとったデータも「その場限り」では意味がないかなと思うので、次にデータを記録する方法を構成します。
再びブロックダイアグラムを右クリックして今度はファイルI/Oから計測ファイルに書き込むを選択、これもブロックダイアグラム上に置いておきます。
こちらもDAQアシスタント同様Express VIなので、ブロックダイアグラム上に置くとダイアログウィンドウが立ち上がるはずです。
本記事では扱いやすいようにExcelに保存することを想定します。とりあえずは以下の図のように構成してください。
これも終わったらデータを保存するプログラムの構成はもう終わりなのでこのステップはここで終了です。
各機能をつなぎ合わせる
さて、最後のステップです。これまでの二つの機能、つまりハードウェアを操作するという機能とデータを保存するという機能を組み合わせます。
ブロックダイアグラム上にあるDAQアシスタントのデータと書かれた部分の右側にマウスカーソルを合わせるとマウスカーソルの形が糸巻状に変わるのでこの状態でクリックし、そのまま今度は計測ファイルに書き込むの信号の左側をクリックします。
すると下の図のようになるはずです。これをLabVIEWでは「ワイヤで配線する」などと言います。つまり、DAQアシスタントという処理から得られたデータを、計測ファイルに書き込むという処理に渡すことで、「測定したデータを保存する」ということを表わしています。
プログラムのアルゴリズム部分としてはこれで完成です。ただ、このまま実行すると今どんな信号を測定しているのかユーザーが見ることができません。そこで、測定結果をグラフとして確認するために、ユーザーインタフェースを作成します。
ユーザーインタフェースについてはフロントパネルを選択します。(ブロックダイアグラムを選択した状態でCtrl + Eが楽です)
既に「停止(F)」というものが置かれていると思いますが、これはDAQアシスタントの構成の結果LabVIEWが自動的に生成したプログラムの停止ボタンです。
これに加えてデータを表示させるためのグラフの表示器を用意します。フロントパネル上で右クリックすると「制御器パレット」が表示されるので、グラフを選択して波形グラフをクリック、フロントパネルの適当な場所に配置します。
なお、LabVIEWをインストールしたてだと制御器パレットとしては下の図とは異なる表示になっているかもしれません。私はシルバーという項目が好きなのでこれを一番上に持ってきていますが、もし下の図と同じようにしたい場合には以下の別記事の項目を参考にしてみてください。
これでデータをグラフで表示できるようになった・・・と思いきや、このままプログラムを実行してもグラフには何も表示されません。なぜならこのままではフロントパネルのグラフはただの枠でしかなく、ここに何の情報を表示させるかの指定を行う必要があるためです。
先ほどは、DAQアシスタントのデータを計測ファイルに書き込むに渡していました。このデータをグラフにも渡してやると、データをグラフに表示させるという意味になります。
そこでブロックダイアグラムに戻り(Ctrl + E)、グラフの左側にマウスカーソルを合わせるとまたアイコンの形が変わるのでクリックし、DAQアシスタントと計測ファイルに書き込むを結んだ線上でまたクリックします。
おおよそ下の図のようになったらOKです。
さて、これでプログラム作りは終了です。
実行して結果を確かめる
では実際にこのプログラムを実行してみます。実行には矢印ボタンあるいはCtrl + Rのショートカットキーを押します。
実行結果としてグラフに何かしら信号が見えていたらプログラム作りは成功です。
さて、動作することが分かったら、プログラムを止めます。止めるときには、フロントパネル上にある停止ボタンを押して止めます。このプログラムは停止ボタンを押さない限りどんどんExcelにデータがたまるので注意してください。
もしN MAXでシミュレーションデバイスを構成してこれを使用している場合、「グラフに何か表示されているがこれは何?」という方もいると思います。ここでグラフに表示されているのは、「シミュレーションデバイスが適当な周波数の正弦波を測定している」という状況をシミュレーションしていると考えてください。
プログラムを止めたら早速、保存したデータを見てみます。計測ファイルに書き込むの関数で特にファイル名の部分を変更していない場合、デフォルトではC:\Users\<ユーザー名>\Documents\LabVIEW Dataのパスにtest.xlsxというファイルがあるのでこのExcelファイルを開くことで、今動かしたプログラムで記録されたデータを見ることができます。
停止ボタンを押さなくても停止する場合
もしDAQアシスタントのパラメタを上記のパラメタではなく別の値、例えばサンプリングレートを10000、サンプル数を1000としていた場合、環境によってはプログラムが停止ボタンを押さなくても止まってしまうことがあります。(LabVIEWの設定によっては、以下で紹介している方法をとらなくてもエラーの表示が出て止まるかもしれません)
これはエラーで止まっている状態だと考えられます。試しに、下の図の要領でエラーを表示させるような表示器を作ってみてプログラムを実行した際にどのようなエラーが出るかを確認します。
準備を整えた状態でもう一度プログラムを実行すると、下の図のようなエラーが出ることがあります。
このエラーは、簡単に言えば「ハードウェア側で取得しているデータが得られる速度に対してLabVIEW側で読み取る速度が遅いですよ」ということです。残念ながら、今回の記事で紹介している方法は最適化されたプログラムの組み方ではないので、もしこのエラーが起きた場合には
・サンプリングレートを下げる
・サンプル数を上げる
・Excelではなく他のファイル保存形式(例えばTDMS)を選択する
といったことでエラーが起きなくなるかを検討することになります。
もちろん、他のやりようもあるのですが、LabVIEWについてある程度知っていないとできないため今回は割愛しています。
さて、いかがだったでしょうか?実機を使用する、シミュレーションデバイスを使用するいずれの場合でも全く同じで、LabVIEWでハードウェアを操作する場合の最もシンプルな形が上で紹介してきた流れになります。
プログラミング言語と聞いていたけれど実際はダイアログで構成を行う部分が多く、ワイヤ配線というLabVIEW独特の操作はちらっとありましたが、ほとんど知識がなくてもプログラムが組めたことが確認できたかと思います。
実際LabVIEWでより複雑でカスタマイズしたハードウェア制御を行うにはもちろん他の知識も必要です。例えば、National Instruments社製のDAQハードウェアであれば基本的に上記の流れでプログラムを組むことができますが、他のハードウェアはまた異なるコードの書き方があります。また、複数のハードウェアを組み合わせることやより細かいハードウェアの制御などはどうしてもLabVIEW専門の知識をつける必要があり、今回のようなダイアログ形式で設定を行うような感覚とは異なる場合もあります。
ですが、LabVIEWあるいはLabVIEWによるハードウェア制御のイメージが全くないという方に読んでいただいている場合には、少しでも具体的にイメージを持てるようになってもらえれば嬉しいです。
本記事の内容の発展形として、効率のいいプログラムを書く方法についての記事もあるのでよかったら参考にしてみてください。
また、これを機にDAQのプログラムに興味が出た、という方向けに、DAQアシスタントなどのExpress VIを使用せずにプログラムを書いていこうというシリーズの記事も出していますので、こちらも参考にしてもらえるとうれしいです。
ここまで読んでいただきありがとうございました。
コメント