他のプログラムの関数などを削除

Tips

スポンサーリンク

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

  • 関数などをプログラム的に消す方法

を紹介しています。

注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。

LabVIEWには「プログラムをプログラムから作る」ための機能があります。

これだけだと何のことを言っているかよくわからないと思いますが、要はあるプログラムから別のプログラムの編集が行えるということです。

この操作は「VIスクリプト」と呼ばれている関数パレットにある関数を使用します。これはデフォルトでは使用できない関数(表示されていない)なので、オプションで設定をする必要があります。

プログラム的にプログラムを編集する、こうしたVIスクリプトの関数の具体例についてはサンプルファインダにいくつかあるのですが、関数を削除する機能についてのサンプルが見当たらなかったので作ってみました。

スポンサーリンク

どんな結果になるか

他のプログラムの中の関数を削除するプログラムはいたってシンプルで、どの関数、あるいはノードを削除するかを「ラベル名」で指定します。

例えば編集したい対象のプログラムの構造が以下のような構造になっていたとします。

こちらに対して、今回のプログラムを実行すると以下のような結果になります。対象のブロックダイアグラム上の要素(今回はフラットシーケンスストラクチャ)が削除されていることが分かります。

また、関数などのブロックダイアグラム上のものに対してではなくフロントパネル上のオブジェクトを削除することもできます。

なお、場合によっては削除をしたことでプログラムが動かなくなる場合もあるので、そういった要素を削除しないように十分注意する必要があります(削除したものはCtrl + Zでも戻すことができません)。

プログラムの構造

今回のプログラムを組むうえではまずVIスクリプトの機能を使用できる必要があるのでその設定を行います。これはオプションからVIサーバを選択して「VIスクリプトの関数、プロパティ、およびメソッドを表示」のチェックを入れます。

すると、「アプリケーション制御」のパレットの中にVIスクリプトパレットが表れます。

この中の関数を用いて以下のようなプログラムを組みます。

プロパティノードやインボークノードで見慣れない薄水色がついたものはVIスクリプトのオプション設定を行ったことで選択できるようになった項目で、VIオブジェクトリファレンスを開くの関数はVIスクリプトのパレットにあります。

ブロックダイアグラムへの操作になるかフロントパネルへの操作になるかは、下の図の赤枠で囲った部分の違いになります。

大切なのは、削除したい対象の種類をVIオブジェクトクラスで指定する部分です。正しい指定を行わないとプログラムが上手く機能しないことになります。(例えば上の図でブロックダイアグラムに対する操作では「フラットシーケンス」を、フロントパネルに対する操作では「グラフチャート」を選択しています)

VIオブジェクトリファレンスを開くの関数のVIオブジェクトクラスの入力端子を右クリックして定数を作成し、この定数をクリックして望みのクラスを選びます。結構種類が多いので探すのは大変かもしれません。

ストラクチャの中身に対して適用する場合

上で紹介したプログラム、例えば以下のような場合には適用できません。

なぜなら、消したい対象であるフラットシーケンスストラクチャはブロックダイアグラムに「直接」配置されているわけではなく、Forループの中身になっているからです。

このように入り組んでいる構造の場合には、少し工夫が必要で、ストラクチャ(今回の場合はForループ)のリファレンスをまず手に入れて改めてその「ダイアグラム」のリファレンスからVIオブジェクトリファレンスを開くの関数でフラットシーケンスストラクチャを選択するようにします。

つまり、「フラット」と名付けられたフラットシーケンスストラクチャは、プログラムそのものの「ダイアグラム」ではなく、Forループの「ダイアグラム」に属している状態と言えます。

複数のVIに対して特定の共通要素を削除する

例えばあるフォルダにある複数のVIに対して、一部のVIに共通してある関数などのオブジェクトをまとめて削除したい場合を考えます。

ここでは、以下の3つのVIが同じProgramsフォルダに入っているとします。

3つのうち、testprogram2.vi以外は同じ「フラット100」と名付けられたフラットシーケンスストラクチャがついているのに対し、testprogram2.viは「フラット200」という名前がついています。

もし対象とするオブジェクトがない場合にはエラーが起きます。このことを利用して、このプログラムではもしその対象とするものがないVIがあった場合にはそのVI名を列挙するようにしています。

なお、以下の例では、上の「 ストラクチャの中身に対して適用する場合 」で紹介したプログラムをサブVIとして使用しています。

ある程度大きな(いくつもサブVIがある)プログラムで、デバッグ用に何かしらの機能を複数のVIに対してつけているとき、最後それらが必要なくなってまとめて消したいときなどに使用できます。

今回の記事ではプログラム的に他のプログラムの関数やオブジェクトを削除する方法を紹介しました。が、他にもVI編集に関係する様々な操作を行うための選択肢がVIスクリプトのプロパティノードやインボークノードにあるので、眺めてみるのも面白いと思います。

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

コメント

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