VIスクリプトを使用してVIにオブジェクトを追加する
- 更新日2025-08-27
- 7分で読める
必要: VIスクリプト
VIスクリプトを使用して、VIのフロントパネルまたはブロックダイアグラムにオブジェクトをプログラム的に追加できます。このようなオブジェクトには、以下のようなものがあります。
- フロントパネル制御器 (ユーザ定義のカスタム制御器を含む)
- ブロックダイアグラムノード (関数、ストラクチャ、サブVIの呼び出しなどを含む)
- クラスタ、配列、およびストラクチャの要素
使用するオブジェクト
このVIスクリプトタスクには以下のオブジェクトが必要です。
解決方法
操作を開始する前に: 以下の手順の各ステップを説明したサンプルを参照するには、labview\examples\Application Control\VI Scripting\Creating ObjectsディレクトリにあるAdding Objects VIを開きます。
- ターゲットVIのリファレンスを取得します。
- 作成する新規オブジェクトの定義情報を決定します。
- 所有者のリファレンス―フロントパネルまたはブロックダイアグラム上のすべてのオブジェクトには所有者が指定されています。最も簡単なケースでは、オブジェクトの所有者は、VIのフロントパネルまたはブロックダイアグラムとなっています。ただし、オブジェクトがループ、ケースストラクチャ、シーケンスストラクチャ、あるいはクラスタなどのサブストラクチャ内にある場合は、そのサブストラクチャがオブジェクトの所有者となります。追加サンプルセクションには、ループ、配列、およびクラスタにオブジェクトを追加するサンプルがあります。
サンプルの詳細
サンプルは、ターゲットVIのブロックダイアグラムに新規の「差」関数を作成することを目標としています。正確に言えば、新規「差」関数の所有者はターゲットVIのブロックダイアグラムですが、スクリプトVIは、ターゲットVIのリファレンスを新規「差」関数の所有者として使用します。ただし、「新規VIオブジェクト」関数は、「差」関数などのオブジェクトがブロックダイアグラムのみに表示可能であることを認識しており、新規オブジェクトを適切な場所に配置します。
- クラス名―VIスクリプトで作成可能なすべてのフロントパネルまたはブロックダイアグラムオブジェクトは、VIサーバークラスに属します。作成するオブジェクトが属するクラスの名前を確認するには、VIの構造を参照してください。「新規VIオブジェクト」関数のオブジェクトクラスを示すには、クラス指定子定数を使用します。
サンプルの詳細
サンプルでは、「差」関数は関数クラスに属します。
- スタイル―すべてのネイティブLabVIEWオブジェクトには、オブジェクトタイプをさらに詳細に定義するスタイルが設定されています。制御器:スタイルIDプロパティまたはノード:スタイルプロパティを使用して、作成するオブジェクトのスタイルを識別できます。メモ サブVIやユーザ定義の制御器をターゲットVIに追加する場合は、スタイルを指定する必要はありません。
サンプルの詳細
サンプルでは、スクリプトVIは「差」関数を作成しているため、スタイルは差です。ノードのスタイルは、多くの場合ノードのクラスとは異なる点に注意してください。
- 場所―オブジェクトを作成する場合は、場所を必ず指定します。この場所は、オブジェクトの所有者の原点を基準とします。
サンプルの詳細
サンプルでは、スクリプトVIは、「差」関数の場所を(100, 200)と指定しています。
- (オプション) サブVIまたはユーザ定義のカスタム制御器へのパス―サブVIおよびユーザ定義のカスタム制御器を作成する場合は、「新規VIオブジェクト」関数のパス入力にソースファイルのパスを配線する必要があります。サブVIの呼び出しの作成の例については、追加サンプルセクションを参照してください。
- (オプション) 新規オブジェクトのサイズ―手動でサイズ変更できるオブジェクトは、サイズを指定できます。
サンプルの詳細
サンプルでは、スクリプトVIはサイズ変更できない「差」関数を作成しています。
- 所有者のリファレンス―フロントパネルまたはブロックダイアグラム上のすべてのオブジェクトには所有者が指定されています。最も簡単なケースでは、オブジェクトの所有者は、VIのフロントパネルまたはブロックダイアグラムとなっています。ただし、オブジェクトがループ、ケースストラクチャ、シーケンスストラクチャ、あるいはクラスタなどのサブストラクチャ内にある場合は、そのサブストラクチャがオブジェクトの所有者となります。追加サンプルセクションには、ループ、配列、およびクラスタにオブジェクトを追加するサンプルがあります。
- ステップ2の情報を「新規VIオブジェクト」関数に配線して、新規オブジェクトをターゲットVIに追加します。
- (オプション) 新規作成したオブジェクトをターゲットVIの既存のオブジェクトにプログラム的に追加します。
VIスクリプトを使用してオブジェクトを配線する方法のサンプルは、追加サンプルセクションで参照できます。
- 使用が終わったオブジェクトリファレンスは、1つずつ「リファレンスを閉じる」関数を使用して閉じます。
注意とアドバイス
- 可能な限り、複雑な新規VIをテンプレートから作成する―個々のコンポーネントオブジェクトを1つずつ作成してプログラム的に新規VIを作成することもできますが、テンプレートから新規VIを作成してからコードの一部を変更する方が簡単です。追加サンプルセクションのCreating New VI From Scratch VIは、シンプルなターゲットVIオブジェクトでも、一つずつ作成するには複雑なスクリプトコードが必要であることを示しています。テンプレートから新規VIを作成すると、このような複雑なスクリプトコードを避けることができます。
- 可能な限り、複雑な制御器はテンプレートから作成する―複雑な制御器は、プログラム的に一つずつ作成することも可能ですが、カスタム制御器を手動で作成して上記の手順に従って制御器のインスタンスを追加してから、必要に応じて部分的に変更を加える方が簡単です。カスタム制御器にリファレンスがある場合は、VI:リファレンスから作成する方法で制御器のコピーを作成することもできます。
- 開いたリファレンスをすべて閉じる―多くのリファレンスが開いていると、VIのパフォーマンスが遅くなります。パフォーマンスの詳細については、VIおよびVIオブジェクトリファレンスを閉じるを参照してください。
追加サンプル
配列制御器、数値表示器、サブVIの呼び出しをターゲットVIに追加する方法のサンプルは、labview\examples\Application Control\VI Scripting\Creating VIsディレクトリのCreating New VI From Scratch VIで参照できます。
「和」関数を他のオブジェクト (Whileループなど) に追加する方法のサンプルは、labview\examples\Application Control\VI Scripting\Creating ObjectsディレクトリのDrop Add Function Inside While Loop VIを参照してください。
オブジェクトをクラスタに追加する方法のサンプルは、labview\examples\Application Control\VI Scripting\Creating ObjectsディレクトリのDrop Digital Numeric Inside Cluster VIを参照してください。