LabVIEWを触ったことがない方に向けて、それなりのプログラムが書けるようになるところまで基本的な事柄を解説していこうという試みです。
シリーズ6回目として小規模なプログラムを作るとともにデバッグツールの扱いについてみていきます。
この記事は、以下のような方に向けて書いています。
- データタイプはわかったけれどもっとプログラム書いてみたい!
- デバッグツールをどのように使うか知りたい!
もし上記のことに興味があるよ、という方には参考にして頂けるかもしれません。
なお、前回の記事はこちらです。
簡単な演算プログラムを作る
シリーズ⑤の記事でデータタイプに様々なものがあることをみてきました。読み物ばかりでもつまらないので、これまでの内容で簡単にできる、演算プログラムを作っていきます。
今回は良く使用するであろう数値データタイプを使用して簡単な四則演算のプログラムを組んでみることにします。ただでたらめに四則演算をするのでは面白くないので、よくありがちですが、温度の表記を変換する、つまり華氏を摂氏に変換する計算を行ってみようと思います。これができたらもう立派なプログラムです。
事前の準備としてまずどんな演算をする必要があるのかみていきます。華氏を摂氏に変換する式はCを摂氏、Fを華氏として以下のように表されます。
C=5/9×(F-32)
以前扱ったのは単にHello Worldなどの文字列を表示させるだけのあまり実用性のない(?)プログラムでしたが、今回は単位換算ということでより実用的なプログラムです。
まず制御器と表示器を用意します。上の式に当てはめると、制御器には華氏を、表示器には摂氏を表すことになるので、これらを用意しておきます。制御器、表示器のラベルは配置時あるいは配置後にダブルクリックで任意の文字にできます。
フロントパネルの編集を終えたら、ブロックダイアグラムの編集に移ります。この計算では、割り算、掛け算、引き算の3種類が必要になります。ブロックダイアグラムで右クリックして現れる関数パレット上で数値の項目にマウスカーソルを合わせ、そこにある差、積、商のアイコンを一つずつ配置していきます。
計算で最初に必要なのは5/9ですが、どちらも定数になります。商のアイコンの左側にマウスカーソルを合わせると、上と下にオレンジ色の点が表れて「x」や「y」と表示が出るのでそれぞれで右クリックして定数を作成します。
xに5、yに9を設定して「5÷9」を表します。商の右側には、計算の結果が出てきます。
試しに商の関数の右側にマウスカーソルを合わせて、「x/y」と表示された状態で右クリックして表示器を作成しておきます。この時点では他の積や差に値が入っていないということでエラーが起こるため、プログラムを実行できないことに注意してください。
次にF-32の部分を表現します。これも差の関数のxとyにそれぞれ配線をしますが、この場合xには「華氏」の制御器を配線します。こちらも表示器をつけておきます。
最後に今までの計算の結果を掛け算します。結果同士の掛け算なので、下の画像のようにワイヤを結んでいくことになります。この計算の結果が摂氏なので、表示器につなげます。
図のようにしていればエラー状態にはなっていないはずなので、これで華氏を摂氏に変換するプログラムの完成です。フロントパネル上の華氏の値を指定する数値制御器に好きな値を入力し実行して動作を確認してみてください。
全く同じプログラムにしていた場合、実行すると摂氏の結果だけではなく、割り算や引き算のところにつけた表示器に値が出ることがわかります。例えば華氏を50としていると、引き算の部分には50-32で18と表示されるはずです。
一つ一つの計算が意図した通りに動いているのがこれで確かめられました。でも、本来x/yやx-yの計算結果って別にいらないですよね?
今回のプログラムは簡単な処理なので確かめる必要がそもそもないと思われるかもしれませんが、今後プログラムを作る中で値をどうしても確認しないといけない場面は出てきます。そんなとき今回のように表示器をつけてしまえば、実行してフロントパネルで値を確認をすることができます。
が、今回のような小規模のプログラムならともかく、大規模なプログラムになるとそもそも必要な制御器、表示器も多い中でさらに表示器を増やしたりするのは結構大変です。それにデバッグが終わったらまた消さないといけないため手間がかかります。
デバッグツールでプログラムが正しいかを確認する
せっかくなので、様々なデバッグツールをここで紹介していきます。いきなり新規のプログラムでデバッグツールを学ぶのではなく、動作や結果がわかっているプログラムで試して、使用感を確認すると今後も応用できると思います。
- プローブ
- ワイヤ値を保持
- 実行のハイライト
- ブレークポイント
- ステップ実行
プローブ
そんなときに使えるのがプローブです。これは「あるワイヤにどのタイミングでどんなデータが通っているか」を確認できるデバッグツールです。使い方は簡単で、値を調べたいワイヤを右クリックして「プローブ」を選択するだけです。すると、プローブ監視ウィンドウというものが立ち上がります。
ウィンドウには、プローブで調べることのできる値の名前、値、そして最終更新、つまりその値がどの時点での値だったのかを表示する項目があります。
調べたい箇所に複数プローブを設定するとその分項目数が増えます。また、ブロックダイアグラムにはプローブを用意した順に1、2と番号がつきます。この状態でプログラムを実行すると値をこの監視ウィンドウで確かめることができます。
例えば試しに先ほどの商や差の結果を表示器の代わりにプローブで見てみます。
このプローブ機能には注意点があり、使用している間はブロックダイアグラムを消せません。正確には、ブロックダイアグラムを消してしまうと、プローブ監視ウィンドウも消えてしまいます。そのため、プローブ使用中はブロックダイアグラムを消してはならないのです。
また、このプローブは調べたい箇所にあらかじめプローブの設定を行う必要があることにも注意する必要があります。実際、プログラム実行中にプローブをおくこともできる(その場合にはワイヤをクリックするだけでプローブを置けます)のですが、プログラムを実行後、終了した後に「あ、この部分の値は何だったんだろう」という場合には時すでに遅しで調べることができません。
ワイヤ値を保持
こんな場合に備えて使えるデバッグツールとして「ワイヤ値を保持」という機能があります。
この機能をONにしておくと、プログラム終了後であっても「このワイヤの値は何だったんだ?」と調べたいときにその部分のワイヤにプローブを置くことで、後追いでその値を知ることができます。とても便利ですよね。
ただし、すべてのワイヤの値をメモリに保持している状態なので、余計にメモリを消費します。(念のため補足。メモリ、はLabVIEWが値をどれだけ扱えるか、覚えていられるかの量で、上限があります。)そのためデバッグを必要としない場合には常にこの機能をOFFにします。
実行のハイライト
他にもデバッグに有効で頻繁に使うものが「実行のハイライト」機能です。ブロックダイアグラム上にある電球マークです(特に言っていませんでしたが、デバッグツールはブロックダイアグラムでのみ選択できます)。
この機能はプログラムを実際に動かしてワイヤに通っている値をスローモーションのアニメーションで見せてくれる機能です。そして各ワイヤでどういった値が流れているかも見ることができます。デバッグにかなり重宝して私も頻繁に使用しています。
ただこの機能には、プログラムの動作そのものが本当に遅くなってしまうという難点があります。そのため、この機能を使用していない場合と使用した場合とで全体の挙動や結果が変わるということが起こりえます(処理速度が重要ではないプログラムの場合には影響しませんが、何かしらタイミングが重要になるプログラムにとっては期待した動作とならないことがあります)。
また、プログラムが大きい場合であっても、初めから実行が遅くなってしまうという弱点もあります。本当はプログラムの途中の一部分の挙動を見たいのに、そこまでの動作も遅くなってしまうことでデバッグに時間がかかることもあり得ます。
ブレークポイント
この弱点については、さらなる別のデバッグツールである「ブレークポイント」との併用で克服することができます。
ブレークポイントは、プローブと同じように使用したいワイヤを右クリックして「ブレークポイント」の項目を選びます。そして、このブレークポイントが置かれたワイヤはプログラム実行中で一時停止をします。
例えば大きいプログラムのある一部分を実行のハイライトで確認したい場合、その確認したいコードの直前にブレークポイントを置いておき実行させます。そしてプログラムがそこでいったん止まったら、実行のハイライトをONにしてプログラムを再開することで続きからゆっくり動作を確認することができます。
なお、この「ブレークポイントを置いて止まったら実行のハイライトをして」というデバッグ方法はLabVIEW 2019以降ではもう少し便利な機能で代用できます。(下の図はNIサンプルファインダの「解析、信号処理および数学」>>「数学」>>「楕円フィット」を例にしています)
ステップ実行
私個人ではあまり使用しないのですが、ステップ実行というデバッグツールもあるので最後にこちらを紹介していこうと思います。
操作自体は、「ユーザーが一つずつの関数の実行タイミングを制御する」といったイメージです。ステップ実行のボタンを押すたびに一つずつの関数が実行されていきます。
関数は一つずつ、ユーザーがステップ実行のボタンを押すごとに実行されます。もし実行される関数が「中に入れる」ようなもの(例えばそれ自体がまた小さなプログラムになっているようなもの、サブVIと呼びます)である場合には、その中に入ってまた個々の関数を実行するかあるいはその関数をまるまる実行した状態として次に進むかを選択できます。
そのため、ステップ実行は一つ一つの動作を逐次確認しつつデバッグしたい場合に向きます。もちろん、実行のハイライト同様、ブレークポイントとの併用も可能です。
実際にここで紹介したデバッグツールは良く使う機会があります。特にプローブと実行のハイライトは重宝すると思うので、意図していない動作をした際にはまずこれらでデバッグを試してみてどこに原因があるのかを確かめる力を身に着けてもらえればと思います。
さて、次回はファイル保存の基礎についてみていこうと思います。LabVIEWでデータをファイルに保存するプログラムは基本さえ押さえてしまえば特別難しい操作ではないので安心してください。
もしよろしければ次の記事も見ていってもらえると嬉しいです。
ここまで読んでいただきありがとうございました。
コメント