LabVIEW 2018ヘルプ
発行年月: 2018年3月
製品番号: 371361R-0112
製品情報を参照
ダウンロード (Windowsのみ)
必要: VIスクリプト
VIスクリプトのタスクを実行するには、作成、編集、または確認するVIやオブジェクトのリファレンスを開く必要があります。リファレンスを返すVI、関数、プロパティ、およびメソッドを使用する際に、リファレンスを作成または開きます。リファレンスが開いている間は、対応するVIやオブジェクトはメモリから削除されません。このため、多数のリファレンスが開いた状態になっていると、多数のVIやオブジェクトがメモリ上に存在することになり、LabVIEWのパフォーマンスが遅くなります。使用可能なメモリが足りない場合は、新規VIおよびオブジェクトを作成できなくなることもあります。こういったパフォーマンスの問題を回避するためには、スクリプトVI内で開いたVIやオブジェクトのリファレンスをすべて閉じてください。
作成または開いたリファレンスは、「リファレンスを閉じる」関数を使用して閉じます。ただし、以下の操作により副次的に閉じられるリファレンスは閉じることはできません。
動作 |
副次的影響 |
一般:削除メソッドを使用 |
削除するオブジェクトのリファレンスが閉じる |
Gオブジェクト:置換メソッドを使用 |
置換するオブジェクトのリファレンスが閉じる |
VIのリファレンスを閉じる |
VI内のオブジェクトのリファレンスが無効になる場合がある |
使用するオブジェクト
このVIスクリプトタスクには以下のオブジェクトが必要です。
解決方法
操作を開始する前に: 以下の手順の各ステップを説明したサンプルを参照するには、labview\examples\Application Control\VI Scripting\Managing ReferencesディレクトリにあるClosing References VIを開きます。
手順を展開すると、このサンプルの詳細が表示されます。
- スクリプトVIのブロックダイアグラム上にある、すべてのVIおよびVIオブジェクトのリファレンスを識別します。
サンプルの詳細
サンプルでは、スクリプトVIは以下の場所でリファレンスを開きます。
- VIリファレンスを開く―ターゲットVIのリファレンスを開く
- Gオブジェクトを走査―ターゲットVIの関数オブジェクトのリファレンスを開く
- 関数:端子[]―関数のすべての端子のリファレンスを開く
- 端子:接続されているワイヤ―各端子に接続されているワイヤのリファレンスを開く
- ワイヤ:端子[]―ワイヤのすべての端子のリファレンスを開く
- 関数:置換―置換する関数のリファレンスを開く
- 関数:端子[]―置換する関数のすべての端子のリファレンスを開く
- 各リファレンスがLabVIEWで最後に使用される時を確認します。
リファレンスのデータフローを追跡する場合は、次の点を考慮します。
- VI内のオブジェクトのリファレンスを使用するには、そのVIのリファレンスを開く必要があります。
- ノードの端子のリファレンスを使用するには、そのノードのリファレンスを開く必要があります。
サンプルの詳細
サンプルでは、開かれたリファレンスは以下の場所で最後に使用されています。
- ターゲットVIのリファレンス―VIの最後このリファレンス以外の開かれたリファレンスはターゲットVI内のオブジェクトリファレンスであるため、VI全体ではこのリファレンスが使用されます。
- 関数のリファレンス―関数:置換メソッドの後
- 関数の端子のリファレンス―端子:接続されたワイヤメソッドの後
- ワイヤのリファレンス―ワイヤ:削除メソッドの後
- ワイヤの端子のリファレンス―端子:ワイヤを接続メソッドの後
- 置換関数のリファレンス―関数:端子[]メソッドの後
- 置換関数の端子リファレンス―端子:ワイヤを接続メソッドの後
- 開かれたリファレンスは、使用後できるだけすぐに「リファレンスを閉じる」関数に配線します。エラークラスタが提供するデータフローを使用して、各「リファレンスを閉じる」関数が実行されるタイミングを制御します。上で述べた、リファレンスを閉じることによる副次的影響を考慮します。
サンプルの詳細
サンプルでは、スクリプトVIはほとんどのリファレンスを使用後すぐに閉じます。しかし、それが不可能な特殊なケースも2件含まれています。
- 関数:置換メソッドは、置換する関数のリファレンスを閉じます。このため、スクリプトVIは関数:置換メソッドの実行後はリファレンスを閉じる必要がありません。
- ワイヤ:削除メソッドは、削除するワイヤのリファレンスを閉じます。このため、スクリプトVIはワイヤ:削除メソッドの実行後はリファレンスを閉じる必要がありません。
注意とアドバイス
- オブジェクトリファレンスを閉じてから、オブジェクトのあるVIのリファレンスを閉じる―VIのリファレンスを閉じると、そのVI内で開いていたオブジェクトのリファレンスは無効になる可能性があります。このため、VIリファレンスは、VIリファレンスとVI内のオブジェクトのリファレンスをすべて使用し終わった後に閉じるのが安全です。
- できるだけすぐにリファレンスを閉じる―大量のリファレンスが開いていると、LabVIEWの実行速度が遅くなります。アプリケーションによってはこの影響をほとんど受けない場合もありますが、大きなアプリケーションでは、パフォーマンスが劣化します。プログラム中でリファレンスを早めに閉じることにより、リファレンスが不必要にメモリ内に残ることを防ぎます。
- 可能なかぎり、VIの終点前にリファレンスを閉じる―VI内のリファレンスは、VIの実行終了後自動的に閉じられるので、VIの終点でリファレンスを閉じてもパフォーマンスは向上されません。
追加サンプル
VIスクリプトの使用時に多くのリファレンスを閉じる別のサンプルについては、labview\examples\Application Control\VI Scripting\Creating VIsディレクトリのCreating New VI From Scratch VIを参照してください。