サブVIの入力端子に値が配線されているかを判定する | マーブルルール

サブVIの入力端子に値が配線されているかを判定する

Tips

スポンサーリンク

この記事で扱っていること

  • サブVIの入力端子に値が配線されているかを判定する方法

を紹介しています。

どちらかというとあまりない特殊な状況かと思いますが、サブVIの入力端子に定数や制御器が配線されているかを判定する必要がある時にどうやって判定するかの仕組みを用意することを考えます。

通常、メインVI上に置かれたサブVIへ値を渡す(入力する)場合にはワイヤを配線しますが、もしワイヤ配線をしていなくてもサブVIはデフォルト値を使用して処理を行うことができます。

このデフォルト値とは、例えば数値で言えば何も設定しない場合には「0」ですが、「0」以外の値もデフォルト値として設定することができます。

そのため、サブVIが実行されるときに、ある制御器の値がどんな値であれ、それが「デフォルト値としてその値が指定されている」のか「デフォルト値と同じだけれど上位のVIからたまたま同じ値が渡されてその値が指定されている」のかはわからないことになります。

この記事では、そんな場合であってもワイヤ配線がされているかどうかを判定させることを考えています。

スポンサーリンク

どんな結果になるか

仕組みを紹介するだけなので結果を見せるのはとてもシンプルなVIで紹介します。

メインVIには数値制御器と出力結果を表示する文字列表示器が二つずつおかれています。

このメインVIにはあるサブVIがあって、二つの数値制御器を受け付けられるとします。

そして、これらの数値制御器のデフォルト値はそれぞれ1と2に設定しています。

このサブVIの中身は、それぞれの数値制御器に3および5を足す、という単純な処理を行うだけですが、出力する結果としては、メインVIから値を渡されてその結果になったかの判定も含め表示してくれるものとします。

このサブVIがメインVI上に配置されていたとして、メインVIから片方の制御器にだけ値を入力します。

プログラムを実行すると結果が出てきますが、メインVIから値を渡されたかどうかで出力される文字列が変わっています。

プログラムの構造

やっていることはとてもシンプルで、サブVIへの入力に対し、入力値であることを判定させるブールフラグを合わせたクラスタを用意しています。

サブVI側では、メインVIから値を受け取る制御器はクラスタになっているはずですが、そのクラスタの中のフラグ(ブール制御器)のデフォルト値はFalseとしておきます。

あとは、完全に一致するクラスタかどうかをサブVI内で判定することで、メインVIからの入力値であるかどうかを判定できます。

入力値は数値である必要はなく、クラスタ要素にできるすべてのデータタイプで同じことができます。

フラグのためのブール値さえあれば、あとはクラスタの他の要素として、同じくブールだったり、配列だったり、はたまたクラスタでもなんでもいいということですね。

入力値があるサブVIと入力値がないサブVIに分ける

同じサブVIを使用したい、でもメインVIから入力を行う必要がある場所と行わなくてもいい場所がある、という場合に、このサブVIを内包した別のサブVIを用意するという手も考えられます。

あまり現実的ではないかもしれませんが、何かの役に立つかもしれないので例を紹介します。

下記の図の上の方のブロックダイアグラムは、トップレベルVIのブロックダイアグラムです。

ここにsub alternative.viというサブVIが置かれており、その中身は、上で紹介したサブVIなのですが、入力を一つしか置いていません。

よって、sub alternative.viの結果Bは常に「デフォルト値」を使用した結果を得られることになります。

この記事では、サブVIの入力端子に値が配線されているかを判定する方法を紹介しました。

この仕組みが必要となる場面は限られていると思いますが、いざこのような機能を実装しようと思ったときに悩んだ際にパパっと実装できるよう、参考になればうれしいです。

ここまで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました