01-19-2015 11:35 PM
初めまして。
LabVIEW2014の使用を始めたばかりですが、ヘルプを検索しても見つからなかったので投稿しました。
やりたいことは何かというと、LabVIEWのフロントパネルに配置した数値表示器の表示種別を動的に変化させたいのです。
つまり、信号の入力チャンネルがその都度入れ替わるようなケースで、
ケース1 表示器0 → ゲージ
表示器1 → タンク
ケース2 表示器0 → タンク
表示器1 → 縦棒グラフ
・・・・・・・・・・・・・・・・・・
のように使用ケースに合わせてひとつの表示器オブジェクトの外観を任意に変更させたいのです。
このようなことは可能なのかどうか。不可能だという結論でも結構です。
ご存じの方はやり方、あるいはやり方が示してあるサイトのURLを示してくださると幸いです。
以上、よろしくお願い致します。
解決済! 解決策の投稿を見る。
01-21-2015 12:50 AM
こんにちは
今回のケースは表示器の表示・非表示で対応できると思います。
サンプル添付しますのでご覧ください。
表示・非表示の切り替えはプロパティノードを使用しています。
このサンプルは1つのループに表示・非表示の判定も入れてるので、
ループ毎に判定動作を繰り返してます。
実際に宙さんがプログラムを作るときはイベントストラクチャ等を使用するのが
いいかと思います。
このへんはヘルプにあるので参照下さい。
ご参考になればと思います。
01-21-2015 03:26 AM
magu magu様
コメントありがとうございます。
種別の異なる表示器を複数用意しておいて、それらのうち必要な表示器を表示させ、不要な表示器は非表示にする手法は存じて
おります。
ただこの方法では、例えばアナログ入力のチャンネル数が8、必要な表示器種別の数が8だとすると、8×8で64個の表示器をフロ
ントパネルに配置せざるをえず、表示・非表示の制御が非常に複雑になります。
当方は汎用化を目指していて、アナログ入力のチャンネル数が8なら、フロントパネルに配置する表示器の数も8としたいということ
です。
つまり、抽象的な表示器を入力チャンネル数分だけ用意しておき、各チャンネルの表示条件で表示器の種別を選択したら、当該チ
ャンネルを指定された種別の表示器に動的に変化させたいのです。
このような汎用化はLabVIEWでは不可能なのでしょうか。
magu magu様に限らず、どなたか解決法をご存知の方はその手法をご教示いただけると幸いです。
そんなの、現在のLabVIEWでは無理だよというダメ押しでも結構です。
皆様、よろしくお願い致します。
01-21-2015 07:27 AM
お世話になります。
宙様には適切なアドバイスが出来なく申し訳ありませんが、
当方もこの辺りの動作に非常に興味があるので、グラフや表示器を動的に
変更出来るのであれば、ぜひ教えて頂きたいです。
当方の知る限り、表示器自体の種別をプログラム的に変更することは出来ないと考えます。
チャンネル数と共に表示器が増えてしまうのは厄介ですが、
少なくとも決まった表示器をフロントパネルに設置する必要があるかと・・・
そもそも表示器の変更が必要なプログラムの場合は、別のviを起動させるような作り方を
した方が良いのではないでしょうか?
01-21-2015 06:04 PM - 編集済み 01-21-2015 06:24 PM
上級者向けになりますがサブパネルを使用することで可能になります。サブパネルのサンプルプログラムがLabVIEWに付属しているはずですが調べてみるとよいと思います。
サブパネルは制御器です。サブパネル内に他のVIのフロントパネルを映し出すことができます。たとえば、ケース1の場合は、ケース1.vi を、ケース2の場合はケース2.viをサブパネルに映し出すことができます。それぞれのケースX.viにそれぞれの組み合わせの制御器群を配置すればよいです。
サブパネルを使う際はまずしっかりとした枠組みを作ることが必要です。たとえば、ケース3を追加しようと思ったときに、簡単にそれができる枠組みです。これにはいろいろな方法があります。また、サブパネルは複数のVIをパラレルに動かすという側面があるため、他のケースに移行する際に現ケースをしっかりと停止させるなどの注意が必要です。
01-21-2015 06:39 PM - 編集済み 01-21-2015 06:40 PM
>ただこの方法では、例えばアナログ入力のチャンネル数が8、必要な表示器種別の数が8だとすると、8×8で
>ントパネルに配置せざるをえず、表示・非表示の制御が非常に複雑になります。
LabVIEW開発でよく陥ってしまう部分ですね。
数値表示器がメータ、タンクなどの装飾があるものではなく、ただ数字を表示すればいいのであれば、数値表示器だけにこだわる必要はありません。数値表示器は結局のところ数の文字列を表示しているに過ぎませんので文字列制御器をうまく使えばいいと思います。
たとえば、以下のような対処方法があります。
1)データを文字列にフォーマットしてしまう。文字列だと改行もできますし、一個の文字列表示器で対応できるので汎用性があります。
たとえば、Num[4]の数値配列なら、
Channel 1 -> 3.50
Channel 2 -> 4.50
Channel 3 -> 10.0
Channel 4 -> 0.00
と文字列にしてしまうことができます。これがNum[1000]ともなれば表示しきれなくなりますが、それは数値表示器を使っても同じです。縦軸のスクロールバーで対応できます。
2)はじめの対処方法は一次元の配列に対応できますが、2次元となるとなかなか難しいですね。2次元のデータを扱うのに便利なのがなんといっても、マルチコラムリストボックスです。
これを使えば2次元データを何チャンネルでも表示できます。ここで必要になってくるのが、二次元数値配列を2次元文字列配列に変換し、マルチコラムリストボックスのプロパティノードを使ってデータを更新する作業です。
私は上の2通りの方法を多用していますよ。フロントパネルを頻繁に更新する必要がなくなるので重宝しています。
01-21-2015 07:53 PM
宙様
LabVIEW プロフェショナル開発システムをご利用されている場合はXControlで対応できる可能性があると考えておりますが、いかがでしょうか。
XControlを使用する (LabVIEWヘルプ)
http://zone.ni.com/reference/ja-XX/help/371361L-0112/lvconcepts/using_labview_xcontrols/
Creating New Front Panel Objects with LabVIEW XControl (英文)
http://www.ni.com/white-paper/3198/en/
LabVIEWのサンプルファインダにもサンプルがございますので参照いただけたらと思います。
NIサンプルファインダのフォルダ一覧から ユーザインタフェースの作成 >> 制御器のカスタマイズ >> Simple Dual Mode Thermometer XControl.lvproj
また、こちらで外観を複数種類に変更する簡単なサンプルをLabVIEW 2014で作成いたしましたので、参照いただけたらと思います。
(基本的には複数表示器を表示・非表示するサンプルですが、複雑なプログラミングの部分をXControl側に隠すことができます)
NI 技術部 山縣
01-21-2015 10:25 PM
皆様、アドバイスありがとうございます。
今回の表示器は単なる数値表示だけでは事足りず、グラフィカルな表示が要求されています。
なので、サブパネルかXControlの使用が視野に入ってきます。
ただ、現在使用しているLabVIEWは自分が選定・購入したものではないので、具体的なグレー
ドは不明な上、差し迫った作業をしなければならないのでこの作業は一時休止です。
改めて問い合わせすることになると思いますが、そのときはよろしくお願い致します。
01-22-2015 12:25 PM
同時にモニタリングをする必要がないのでしたら、以下のように一個の表示器とリストボックスを組み合わせることもできます。
これは汎用性が高く、何チャンネルでも対応できます。
チャネルの数に応じてリストボックスの内容を更新して、Meterは選択済みのチャンネルのデータを表示するといった具合です。
ご参考までに
01-22-2015 09:14 PM
TailOfGon様
当方が目指しているのは、例えば入力チャンネル数が8だとして、任意のチャンネルに対して、
・使用の有無
・表示器の種別
・表示位置およびサイズ
などを任意に変更させるということなのです。
つまり、モニターするチャンネルの数も不定ならば、どのチャンネルを使用するかもその都度自
由に切り替えてもユーザーから見たらシームレスに動作するのが最終目標です。
なので残念ながら、せっかくご提案くださったのに当方の目的に合致しないようです。
ありがとうございました。