NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

XControlのプロパティを構成表示器のプロパティに反映させる方法

解決済み
解決策を見る

皆様、こんにちは。

お陰様で、XControlに複数のプロパティを定義することはできました。

 

ところが、困ったことに今度はXControlに追加定義したプロパティをXControlを構成する複数の表示器が持つ元々のプロパティに反映させる

方法がわかりません。

 

やりたいことは、

  外部の数値制御器の数値 → XControlのスケール最大値プロパティ → そのとき表示されているXControl表示器のスケール最大値

という流れでXControlの外からXControlを構成する表示器のスケールを任意に変更させることです。

 

 

添付ファイルの説明

・Vスライド - スケール最大値.png

  XControlの外観.viのイベントストラクチャーにて「スケール最大値が変更された場合」のイベントを追加し、Vスライド表示器を右ク

  リック後コンテキストメニューで

    作成 → プロパティノード → スケール → 範囲 → 最大値

  と操作してプロパティノードを作成し、XControlに追加したスケール最大値プロパティをXControl構成コンポーネントのVスライドに

  反映させるようにした状態です。この状態ではエラーにはなりません。

 

・XControl - スケール最大値.png

  しかし、上記の状態は最終的な使用目的とは異なるので、プロパティ・ノードのリンクを削除し、各表示器のリファレンスを参照す

  るように変更したところ、今度は「スケール最大値が倍精度実数であるのに対し、プロパティノードのScale.Maximumが倍精度

  実数ではない」とのエラーになってしまいます。

 

 

ヘルプを参照しても該当する内容が見つからず、困っています。

XControlを構成する表示器のプロパティを制御する手法、あるいはそれを具体的に説明してあるURLがありましたら、お教えくださ

るようお願い致します。

 

すべてをダウンロード
0 件の賞賛
メッセージ1/6
4,202件の閲覧回数

実際のXControlを添付するのを忘れていました。

0 件の賞賛
メッセージ2/6
4,201件の閲覧回数

こんにちは、

 

現在、3つのスライドリファランス(V,Hスライド、タンク)と一つのノブリファランス(ゲージ)を配列にする際にデータタイプが「スライドまたはノブrefnum」に強制的に変換されています。

 

オブジェクト(例:制御器や表示器)のクラス階層によって使えるプロパティノードが異なります。

 

「ノブ(Knob)」と「スライド(Slide)」の属するクラスは「スケール付き数値(NumWthScl)」の属するクラスより下位のクラスなので、スライドプロパティノードやノブプロパティノードの持つスケール>>範囲>>最大値はNumWthSclクラスにはないです。

 

クラスについての詳細はこちらの資料を参照してください。

http://zone.ni.com/reference/ja-XX/help/371361J-0112/lvprop/propmeth_class_hierarchy/

 

よって、クラス名でノブの場合とスライダの場合を分けてスケールの最大値を設定することで問題を解決出来ると思います。

 

添付したPNGVIをご覧になってください。

 

すべてをダウンロード
0 件の賞賛
メッセージ3/6
4,170件の閲覧回数

dragon1さま

 

ありがとうございました。

クラスの継承関係を考慮しなければいけなかったのですね。

お陰様で、XControlに追加したプロパティとオリジナルのオブジェクトのプロパティを接続できるよう

になりました。

 

 

ところが、別の制御器出力をXControlのスケール最大値・最小値・反転の各プロパティ入力に接続

してみたところ、別の制御器の数値や状態を変更してもそれがXControlに反映されません。

XControlでは表示状態変更イベントをトリガーとしてスケール最大値・最小値・反転を反映させるよ

うにしてますが、別の制御器の数値を変更しただけではXControlの表示状態変更イベントが発生し

ないのか、それともXControl構成オブジェクトの内部プロパティを変更するには別のイベントを使わ

なければならないのかどうか。あるいは、まったく異なるメカニズムで実装しなければいけないのか

わかりません。いろいろと試行錯誤はしているのですが・・・。

 

どなたか解決策をご教示頂けないでしょうか。よろしくお願い致します。

0 件の賞賛
メッセージ4/6
4,161件の閲覧回数
解決策
トピック作成者が受理

そうですね。

 

こちらでアナログ表示器テスト.VIを実行してスケール設定を試してみた結果、外観の「Display in state.スケール最大値:値変更」イベントが発生しませんでした。ちなみに、イベントの中にポップアップダイアログを入れて確認しました。

 

表示器種別機能のように「表示状態を変更」イベントにスケール調整のプロパティを追加してみたらXControlのスケールが制御出来ました。

 

NIコミュニティのサンプルコードにXcontrolを使う例が色々ありますので参考になるかと思います。

http://www.ni.com/examples/ja/

メッセージ5/6
4,129件の閲覧回数

dragon1さま

 

おかげ様で、XControlのスケール上下限値設定およびスケール反転を実現することができました。

 

ありがとうございました。

0 件の賞賛
メッセージ6/6
4,120件の閲覧回数