必要: VIスクリプト

VIスクリプトを使用すると、実行時まで内容が分からないターゲットVIを検査または変更できます。他のVIスクリプトアプリケーション同様、操作するターゲットVIのオブジェクトのリファレンスを取得する必要があります。しかし、実行時までターゲットVIの内容が分からないため、「VIオブジェクトリファレンスを開く」関数を使用してラベルでオブジェクトを検索することはできません。代わりに、「Gオブジェクトを走査」VIを使用して同じクラスに属するオブジェクトのグループを識別します。その後、返されたオブジェクトの配列を反復して操作したいオブジェクトを決定できます。

使用するオブジェクト

このVIスクリプトタスクには以下のオブジェクトが必要です。

解決方法

操作を開始する前に: 以下の手順の各ステップを説明したサンプルを参照するには、labview\examples\Application Control\VI Scripting\Finding and Modifying ObjectsディレクトリにあるObtaining Unknown Object References VIを開きます。

  1. 検査または編集するオブジェクトが含まれているターゲットVIのリファレンスを取得します。

    サンプルの詳細

    サンプルでは、「VIリファレンスを開く」関数がターゲットVIパス制御器で指定されたVIのリファレンスを提供します。この実装により、ユーザは、VIパスを指定するだけでスクリプトVIをあらゆるターゲットVIに適用できます。さらに、スクリプトVIをサブVIに変換すれば、ユーザは複数のVIにスクリプトVIをプログラム的に適用することができます。

  2. リファレンスを取得したいオブジェクトのクラスと場所を特定します。
    1. オブジェクトを含むVI―このリファレンスを「Gオブジェクトを走査」VIのVI refnum入力に配線します。
    2. VI内の場所―オブジェクトは、ターゲットVIのフロントパネル、ブロックダイアグラム、クラスタ、ストラクチャ (Forループやケースストラクチャなど) のダイアグラムのいずれにも含まれている可能性があります。走査ターゲット入力から定数を作成して、「Gオブジェクトを走査」VIが検索する場所を指定する必要があります。

      サンプルの詳細

      サンプルでは、ブロックダイアグラムオブジェクトである制御器の端子を操作する必要があります。このため、スクリプトVIは、検索するコンテナとしてBDを指定します。

      メモ 目的のオブジェクトがクラスタまたはストラクチャのダイアグラムに含まれている場合は、走査ターゲット入力の列挙リストからOtherを選択します。いずれの場合も、オブジェクトを含むクラスタまたはダイアグラムのリファレンスを「Gオブジェクトを走査」VIのその他refnum入力に配線します。
    3. オブジェクトのクラス名―一般的なVIオブジェクトの構造を参照して操作するオブジェクトのクラス名を確認します。

      サンプルの詳細

      サンプルでは、スクリプトVIは制御器の端子のリファレンスを取得するため、制御器端子のクラス名である「制御器の端子」を使用します。

  3. Gオブジェクトを走査」VIにステップ2の情報を配線することにより、対象オブジェクトのリファレンスを取得します。
  4. 返されたリファレンスの配列を反復して、個々のオブジェクトを操作します。

    サンプルの詳細

    サンプルでは、スクリプトVIはForループを使用して、リファレンス配列の各要素にアクセスします。

  5. より特定のクラスに変換」関数を使用して、返されたリファレンスをより特定のクラスに型変換します。「Gオブジェクトを走査」VIは、クラス名入力で指定したクラスに属するリファレンスではなく、Gオブジェクトリファレンスの配列を返します。しかし、「より特定のクラスに変換」関数を使用して、返されたリファレンスをクラス名で指定したクラスに変換できます。リファレンスをより特定のクラスに変換すると、リファレンスのより特定のプロパティやメソッドを呼び出すことができます。

    サンプルの詳細

    サンプルでは、スクリプトVIは返されたリファレンスを制御器の端子に変換します。制御器の端子:ラベル.表示プロパティをTRUEに設定するのが制御器端子のラベルを表示する唯一の方法であり、Gオブジェクトにはラベル.表示プロパティが使用できないため、このクラスの変換は必須です。「Gオブジェクトを走査」VIは制御器の端子オブジェクトに限定して検索したため、この変換からエラーは発生しません。

  6. リファレンスをプロパティノードまたはインボークノードに配線して、リファレンスされたオブジェクトの情報を取得または設定します。

    サンプルの詳細

    サンプルでは、スクリプトVIはプロパティノードを使用して、制御器の端子リファレンスのラベル.表示プロパティをTRUEに設定し、対応する制御器の端子のラベルを表示します。

  7. 使用が終わったオブジェクトリファレンスは、1つずつ「リファレンスを閉じる」関数を使用して閉じます。

注意とアドバイス

  • 必要に応じて各リファレンスのクラスを確認する―親クラスの名前を「Gオブジェクトを走査」VIに配線すると、親クラスは同じですが、子クラスは必ずしも同じではないリファレンスの配列が返されます。たとえば、「Gオブジェクトを走査」VIを使用してループクラスのオブジェクトを検索すると、ForループとWhileループ両方のリファレンスが返されます。次の2つの方法のいずれかを使用して、リファレンスのクラスを確認します。
    • より特定のクラスに変換」関数を使用して、リファレンスを特定のクラスに型変換します。関数からエラーが返されない場合は、リファレンスが特定のクラスに一致したことを意味します。
    • 返された個々のリファレンスのクラス名プロパティと、一致させたいクラス名を比較します。
  • 開いたリファレンスをすべて閉じる―多くのリファレンスが開いていると、VIのパフォーマンスが遅くなります。パフォーマンスの詳細については、VIおよびオブジェクトリファレンスを閉じるを参照してください。

追加サンプル

「Gオブジェクトの走査」VIを使用するサンプルについては、labview\examples\Application Control\VI Scripting\Finding and Modifying ObjectsディレクトリにあるUsing Traverse VIを参照してください。