LabVIEW +
ソフト開発 +
実験・研究装置開発 +
システム開発 +
納入事例 +
会社概要 +
LabVIEWで条件分岐(if-elseやswitch文に相当)を表現する際に不可欠なケースストラクチャ(Case Structure)。ただ配置して使うだけでなく、入力するデータの種類(セレクタ)の選び方ひとつで、プログラムの拡張性やバグの発生率は劇的に変わります。
本ページでは、測定代行株式会社の長年のシステム開発経験に基づき、可読性とメンテナンス性を極限まで高める「正しいケースの選び方」と、上級者が実践している「応用的な使い方」を詳しく解説します。
ケースストラクチャのセレクタ(左壁の『?』端子)には様々なデータ型を接続できます。それぞれの特徴を理解して使い分けるのが「綺麗なコード」への第一歩です。
3つ以上の状態やコマンドに分岐させる場合、「列挙体」を接続するのがベストプラクティスです。 ケース名が「初期化」「計測」「保存」といった具体的な文字列で自動定義されるため、プログラムの可読性が格段に向上します。さらに、列挙体に新しい項目を追加した際、ストラクチャ側で「すべてのケースを追加」を右クリック一発で実行できるため、追加漏れによるバグ(未定義の挙動)を完全に防ぐことができます。
ケースのセレクタに「エラークラスタ」のワイヤを直接接続すると、自動的に「エラー(Error)」と「エラーなし(No Error)」の2つのケースに変化します。 「エラーがないときだけ通常の処理を行い、エラーがある場合は処理をスキップして次のVIへエラーをパスする」という、LabVIEW独自の非常にクリーンな例外処理回路を構築できます。
文字列や整数を繋ぐと、自由な名前や数値をケース名(例:"Start", 100など)に指定できますが、文字の打ち間違い(タイポ)や、想定外の数値が入ってきた際の制御が難しくなります。これらを使用する場合は、必ず「デフォルト(Default)」ケースを設定し、想定外の入力が来た際のセーフティ回路を設ける必要があります。
ケースストラクチャの上部にあるケース識別子ラベル(ケース名が表示されている枠)には、複数の条件をまとめて記述することができます。
これにより、無駄にケースの数を増やしてプログラムを肥大化させることなく、スマートに分岐ロジックを整理できます。
列挙体を使ってケースを分ける際は、必ずその列挙体を「タイプ定義(.ctl)」として保存してください。 システムが大規模になり、数十個のVIで同じ列挙体(ステート)を共有するようになっても、タイプ定義の元ファイルを変更するだけで、すべてのケースストラクチャの分岐条件が自動的に一斉更新されます。仕様変更に強い、プロの設計に欠かせないテクニックです。
ケースストラクチャ内でデータを外に出す際(トンネル)、一部のケースで配線を忘れるとトンネルが白抜きになり、実行ボタンが割れてしまいます。 右クリックで「未配線ならデフォルトを使用」を選択するとエラーは消えますが、数値なら「0」、ブールなら「False」が勝手に出力されるため、バグの温床になります。すべてのケースにおいて、意図したデータを明示的に配線するのが、止まらないシステムを作るための鉄則です。
「既存のプログラムを修正しようとしたが、ケースストラクチャが何重にもネスト(入れ子)されていて、どこを触ればいいか分からない」「ステートマシンの設計が上手くいかず、拡張性の高いアーキテクチャの相談をしたい」といった課題はございませんか?
測定代行株式会社は、LabVIEW受託開発のプロフェッショナル集団です。ケースストラクチャやタイプ定義、デザインパターン(QSMなど)を最適に組み合わせ、誰が見ても理解しやすく、将来の改造やセンサーの追加にも柔軟に対応できる「美しいプログラム」を構築いたします。
複雑化したレガシーコードのリファクタリング(整理・改修)から、最先端の実験装置の自動化システム開発まで、LabVIEWのことなら何でもお気軽にご相談ください。