From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



どのようにすればLabVIEWのフロントパネルに配置されているオブジェクトの総数をプログラム的に数えることができますか?



使用ソフトウェア:
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: N/A

問題: あるVIのフロントパネルに配置されているオブジェクトの総数が知りたいのですが、プログラム的にオブジェクトの数を数える方法はあるのでしょうか?

解決策: はい、プログラム的にオブジェクトの数を数える方法には大きく分けて二つの方法があります。一つはインボーグノードを使用する方法、もう一つはプロパティノードを使用する方法です。LabVIEWのフロントパネルオブジェクトには、制御器、表示器、装飾体の3種類のオブジェクトが存在します。テキストツールを使用してフロントパネルにラベルが作成された場合には、これは装飾体として認識されます。
  1. インボーグノードを用いてフロントパネルの制御器や表示器の数を数える方法:
    この方法を使用するメリットは非常にシンプルであることです。しかしながらデメリットとして装飾体の数を数えることができないという面があります。プログラムの方法ですが、単純に"現在のVIのパス"や"VIリファレンスを開く"を使用してオブジェクトの数を数えたいVIのリファレンスを開き、インボーグノードの"リファレンス"入力端子へ接続し、メソッドから"全ての制御器の値を取得"を選択して下さい。
    "制御器"入力端子にブール定数の"True"を入力するとそのVIのフロントパネルに配置されている全ての制御器が、"False"を入力すると全ての表示器がクラスタ配列として出力されます。"配列サイズ"を使用することによって制御器や表示器の数をそれぞれ数えることができるため、それらの和をとることによってフロントパネルに配置されている制御器と表示器の総数を数えることができます。詳しくは添付のcount1.viにこの方法を実行するためのサンプルをご参照下さい。
  2. プロパティノードを用いてフロントパネルの制御器や表示器の数を数える方法:
    この方法のメリットは装飾体を含んだ全てのオブジェクトの数を数えることができることです。しかしながらプログラムは多少複雑になります。
    1. タブ制御器を使用していない場合:
      "現在のVIのパス"や"VIリファレンスを開く"を使用してオブジェクトの数を数えたいVIのリファレンスを開き、プロパティノードの"リファレンス"入力端子に接続してください。プロパティより"フロントパネル"を選択し、"パネル"からの出力を次のプロパティノードのリファレンス入力端子に入力してください。ここで"全てのオブジェクト[ ]"を選択することによってフロントパネルに配置されている全てのオブジェクトのリファレンス配列を取得することができますので、"配列サイズ"関数を使用することによって配列のサイズを取得し、フロントパネルに配置されているオブジェクトの総数を装飾体も含めて得ることができます。また、"全てのオブジェクト[ ]"の代わりに"制御器[ ]""装飾[ ]"を選択することによって制御器と表示器の総数や装飾体のみのオブジェクトの数を数えることも可能です。
      詳細は添付のcount2.viをご参照下さい。
    2. タブ制御器を使用している場合:
      この場合は上記の方法ではフロントパネルのオブジェクトの総数を取得することができません。これは、"全てのオブジェクト[ ]"プロパティノードがタブ制御器をまとめて一つのオブジェクトとみなしてしまうためです。そのためタブ制御器を使用している場合は上記のステップaで行ったような作業をまず行っていただき、その際にタブ制御器の中にいくつのオブジェクトが配置されているかを知る必要がありますので、タブ制御器の選択するタブの部分の付近にカーソルを合わせ、右クリック>>作成>>リファレンスを選択してリファレンスを作成していただき、プロパティノードの"リファレンス"入力端子に入力してください。プロパティから"ページ数"を選択し、ページ数からの出力をForループを使用してトンネル端子を通して自動指標付けを使用してループ内部に配置したプロパティノードのリファレンス入力端子に入力してください。プロパティから"ページ上のオブジェクト[ ]"を選択してください。この出力端子からページ内に配置されているオブジェクトのリファレンス配列が出力されますので、Forループの枠を右クリックしてシフトレジスタを作成し、左側のシフトレジスタの出力とプロパティノードからの出力を"配列要素挿入"を使用して配列を挿入し、配列要素挿入からの出力を右側のシフトレジスタに入力し全てのページに配置されている全てのオブジェクトのリファレンスの配列を作成してください。ループが終了しForループより出力されたリファレンス配列のサイズを"配列サイズ"を使用して取得することによってタブ制御器の内部の全てのオブジェクトの総数を検出することができます。
      詳細は添付のcount3.viをご参照下さい。

最後に、フロントパネルのオブジェクトの総数を取得する方法としてcount4.viを参照下さい。VIのパスを入力して実行するとフロントパネルに配置されているオブジェクト(制御器、表示器、装飾体)の数の合計が表示されます。このサンプルではタブ制御器内部にあるオブジェクトの数を取得するためにForループではなくWhileループを使用しています。


関連リンク: KnowledgeBase 2QE7BI59. Maximum Number of Front Panel Objects in LabVIEW 6.1

添付:


Count_VIs.zip - Count_VIs.zip


報告日時: 01/15/2004
最終更新日: 11/30/2010
ドキュメントID: 35EC9NFQ