【初心者向け】LabVIEWプログラム開発で注意する3つのこと

LabVIEW,プログラミング

前回の記事でLabVIEWを使用してプログラムを開発する時に気をつけたいこととして、「データフロー」についての解説を行いました。

データフローについてはLabVIEWでプログラム開発をしていく上で重要なことですが、他にもプログラムを開発する時に注意をしたいことを今回は3つ書いています。

プログラムを作成するときに効率良く作業を行っていくためには非常に重要です。

注意したい3つのこと

  • LabVIEWでプログラムを作成する時もも仕様書は作成する
  • VI内にコメントを記載したり、アイコンを変更すること
  • プログラムのデバッグを行う時は必要な場所だけを見る

LabVIEWでプログラムを作成する時も仕様書は作成する

LabVIEWでプログラムを作成する場合でも仕様書は作成をしましょう

後で修正を行ったり機能を追加するときに、プログラムの処理を思い出すときに役立ちます。1ヶ月も経過すると以前に作成をしていたプログラムの内容は忘れてしまいます。

LabVIEWでプログラムではよくある事例ですが、プログラムの設計仕様書を全く作成せずにプログラム開発を行ってしまうということがあります。

仕様書を全く作成せずにプログラムを作成してしまうと、他の人にとってはプログラムがブラックボックス化します。もちろん自分にとってもブラックボックスになり得ます。

NI社が開催をしているLabVIEWの実践集中のセミナーに参加した際に、講師の方が参加者に対して仕様書を書いてからプログラム開発を行っている確認をしたところ、仕様書を作成している人は僅かでした。

グラフィカルプログラミング言語なので、テキストベースの言語と違って、後からでも見たら解ると思うかもしれませんが、1ヶ月も経過した後に見ると自分の作ったプログラムでさえ、詳細を覚えていないと言うことが多々あります。

仕様書を作成せずに、プログラム開発を行うと、必要な機能や処理が不明瞭なまま開発を行うため、開発途中で何度もコードの修正が発生し、無駄な作業時間が増えます。

上記の画像は以前、自作をしたプログラム「TypingLv-Upper」のメインプログラム内に描いている内容です。(プログラムの規模が大きくなっているので、LabVIEWの自動配置機能を使用して位置調整したため、ワイヤーの位置がやや変な所にあります。)

このプログラムは仕様書を全く作成せずに、思いついた通りにプログラムを作成しています。
そのため、修正が多く発生し、無駄なコードが数多くある状態になっています。

当初、TypingLv-Upperについては数値をループ間で受け渡すことまでは考えていましたが、その後の処理方法については全く検討をせずに開発を行ったため、上手にデータの受け渡しをすることが出来なくなり、複数のグローバル変数を使用して、無理矢理プログラムを成立させています(プログラムの可読性が悪い

プログラムの規模が大きくなるとプログラムの内容を把握するのが難しくなるため、理解を補助するための資料として仕様書は必要となってきます。

プログラム開発を行う前に仕様書を作成することで、受け渡すデータの内容や、プログラムの流れを明確化することが出来ます。

簡単に作成をすることが出来る設計仕様書の一つとしてフローチャートがあります。フローチャートを作成することによって、プログラムの間違いがプログラムを実装する前に見つけることが出来ます。(大事)

フローチャートを作成する場合は「draw.io」というWebサービスがオススメです。

仕様書を作成するのは非常に面倒ですが、後々のことを考えれば面倒でも作成した方が良いと考えます。

VI内にコメントを記載したり、アイコンを変更すること

プログラムの処理方法や、何の役割を持っているプログラムかをVIに記載することでVIを修正するときの作業性が向上したり、プログラムの修正ミスを予防することが出来ます。

NI社が行っているLabVIEWの開発者認定試験(CLD)でもプログラム及びVIのプロパティにコメントが記載されていないと減点の対象になります。VIのアイコンも標準のままは減点対象です。

他社が見て解るようにプログラムを作成することが重要す。

VI内にコメントを追記する

VI内にコメントを記載する箇所は大きく3種類あります。

  • ブロックダイアグラムへのコメント記載

ブロックダイアグラム上にコメントを追記します。ツールパレットにある「テキスト」を選択することでブロックダイアグラム上の任意の任意の位置に書き込むことが出来ます。

フロントパネルにもコメントを書き込むことは出来ますが、通常はブロックダイアグラム上にコメントを書き込みます。(フロントパネルはユーザーインターフェースなのでプログラム開発者以外の人が見る可能性あるため。)

  • ワイヤーのラベルにデータ内容を記載する

ワイヤーを選択し、右クリックで「表示項目」⇒「ラベル」を選択することで上記の画像のようにワイヤー上にラベルを配置することが出来ます。プログラムを作成していると同じ種類のワイヤーを複数配置する場合があるので、ワイヤーのラベルに流れているデータの内容を書くことで、何のワイヤーかを見分けやすくなります。
(上記の画像はAPNGを使用しているためブラウザによっては動作しない場合があります。)

  • VIプロパティのドキュメントを書く

「ファイル」⇒「VIプロパティ」を開き、カテゴリ内の「ドキュメント」を選択します。VIの説明欄にVIの動作仕様について記載を行います。VIの説明欄に記載した内容は詳細ヘルプのウィンドウに表示されるので、サブVIの場合は入力しておくと便利です。(サブVIの中を開かなくても、動作仕様を確認することが出来ます。)

プログラムのデバッグを行う時は必要な場所だけを見る

ブレークポイント機能、プローブ機能を上手に活用して、デバッグ時間を短縮しましょう。

LabVIEWのデバッグ機能について

Labviewのデバッグ機能はグラフィカル言語の特徴を生かして視覚的に見て解るようになっています。初心者でもプログラムがどのように動作しているのかを簡単に理解出来ます。

メニューバーの下にあるプログラム実行ボタン等の右横に電球マークのボタンがあります。これが点灯している状態でプログラムを実行するとデバッグを行うことが出来ます。

しかし、何も考えずにプログラムを最初からデバッグ機能を使用して動作確認をしていると一つの処理を終えるまでに時間を要します。

特にN回目のループ処理後の動作を確認しようとした場合、最初から見ているのでは日が暮れます。

上記画像のプログラムだと、デバッグ機能を使用せずにプログラムを実行した場合、一番処理に時間のかかるForループは約10秒で完了します。

しかし、デバッグ機能を使用して最初から動作確認を行った場合、完了するまで306秒(約5分)かかりました。ループ回数が多かったり、規模の大きなプログラムになると確認するだけで膨大な時間を要します。

プログラムの最初からデバッグを行うと、プログラム開発しているよりもデバッグ中の画面をただ眺めている時間が長くなってしまいます。

ブレークポイントでデバッグを効率的に行う

デバッグの時間を短縮する手段として最初からデバッグするのではなく、ブレークポイント機能を利用すると効率よくデバッグが出来ます。

ブレークポイント機能を利用するとブレークポイントの位置までは通常の実行速度で処理がされ、ブレークポイントの位置に来たらプログラムが一旦停止します。

ブレークポイントの設定はワイヤーを選択して右クリックしてから「ブレークポイント」⇒「ブレークポイント」の設定から設定を行うことが出来ます。

ブレークポイントを設定するとワイヤー上に赤点が表示されます。上記画像のブレークポイントの位置だと除算が開始される前にプログラムが一時停止します。

一時停止したら、デバッグ機能をONにして「継続」ボタンをクリックすることで、一時停止が解除され、プログラムが再稼働します。

継続ボタンを押すと自動的にプログラムが順次処理されていきますが、1つ1つの処理がどのようになっているのかをゆっくりと確認をしたい場合は①~③のシングルステップボタンを使用します。各ボタンの機能としては下記の通りとなっています。

①サブVI内部の処理もデバックします。また次の処理を1つだけ実行します。
②サブVI内部の処理についてはデバックしません。次の処理を1つだけ実行します。
③ストラクチャ内部から脱出します。また処理が全て終了した場合にVIを終了するのにも使用します。

一時停止をした位置からデバッグを行うことで、任意の位置からデバッグを開始できるためデバッグ時間の短縮化を図ることが出来ます。

※ブレークポイントについてはブレークポイントを解除または無効を選ばない限り、プログラムを実行すると毎回同じ場所で一時停止をします。

もし不要になったらブレークポイントの解除または無効にしてください。まとめて設定を行いたい場合はブレークポイントマネージャーより設定を行うことが出来ます。ブレークポイントを設定するときと同様の方法で行えます。

プローブについて

LabVIEWのデバッグ機能の一つとして、ワイヤー上に流れているデータを確認することが出来ます。

確認したいデータのワイヤーを選択して右クリックすると「プローブ」と表示されるのクリックするとプログラム実行中にワイヤー上へ流れているデータを確認することが出来ます。

プローブしている場所には「プローブ番号」が表示されます。上記の画像では「No7」で表示されています。
(上記の画像はAPNGを使用しているためブラウザによっては動作しない場合があります。)

プローブしているワイヤーの値については「プローブ監視ウィンドウ」というのが表示されるので、Noごとに値が表示されます。
(上記画像ではForループのワイヤーに流れている値を監視しました。)

通常はプログラム実行中にプローブをしないとワイヤー上の値を読み込むことが出来ません。しかし、下記のボタンをONすることでワイヤーに値を保持することが出来ます。(※最終的な値のみ)

「継続」と「シングルステップ」ボタンの間にあるのは「ワイヤーの値を保持」するボタンになります。

機能としては、プログラムの実行完了後でもワイヤーに値を保持しているため、実行完了後でもプローブの値を読み込むことが出来ます。通常は実行前に測定したいポイントにプローブを当てないと値は表示されません。

※「ワイヤーに値を保持」を使用するとパソコンのメモリを多く確保する必要があるため注意が必要です

まとめ

  • グラフィカルプログラミング言語であるLabVIEWでも仕様書が無いと後々の修正・追加作業で大変なことになるため仕様書は作成しましょう。作業効率が非常に悪くなります。
  • VIにはコメントを残しましょう。仕様書と同じく、処理の説明をVI内に書いておくだけで後で見直すときに役立ちます。
  • デバッグは全てを見るのではなく必要な所だけを見て、効率よく行いましょう。