05-07-2015 04:33 AM
皆様、こんにちは。
お陰様で、XControlに複数のプロパティを定義することはできました。
ところが、困ったことに今度はXControlに追加定義したプロパティをXControlを構成する複数の表示器が持つ元々のプロパティに反映させる
方法がわかりません。
やりたいことは、
外部の数値制御器の数値 → XControlのスケール最大値プロパティ → そのとき表示されているXControl表示器のスケール最大値
という流れでXControlの外からXControlを構成する表示器のスケールを任意に変更させることです。
添付ファイルの説明
・Vスライド - スケール最大値.png
XControlの外観.viのイベントストラクチャーにて「スケール最大値が変更された場合」のイベントを追加し、Vスライド表示器を右ク
リック後コンテキストメニューで
作成 → プロパティノード → スケール → 範囲 → 最大値
と操作してプロパティノードを作成し、XControlに追加したスケール最大値プロパティをXControl構成コンポーネントのVスライドに
反映させるようにした状態です。この状態ではエラーにはなりません。
・XControl - スケール最大値.png
しかし、上記の状態は最終的な使用目的とは異なるので、プロパティ・ノードのリンクを削除し、各表示器のリファレンスを参照す
るように変更したところ、今度は「スケール最大値が倍精度実数であるのに対し、プロパティノードのScale.Maximumが倍精度
実数ではない」とのエラーになってしまいます。
ヘルプを参照しても該当する内容が見つからず、困っています。
XControlを構成する表示器のプロパティを制御する手法、あるいはそれを具体的に説明してあるURLがありましたら、お教えくださ
るようお願い致します。
解決済! 解決策の投稿を見る。
05-07-2015 04:35 AM
実際のXControlを添付するのを忘れていました。
05-08-2015 01:31 AM
こんにちは、
現在、3つのスライドリファランス(V,Hスライド、タンク)と一つのノブリファランス(ゲージ)を配列にする際にデータタイプが「スライドまたはノブrefnum」に強制的に変換されています。
オブジェクト(例:制御器や表示器)のクラス階層によって使えるプロパティノードが異なります。
「ノブ(Knob)」と「スライド(Slide)」の属するクラスは「スケール付き数値(NumWthScl)」の属するクラスより下位のクラスなので、スライドプロパティノードやノブプロパティノードの持つスケール>>範囲>>最大値はNumWthSclクラスにはないです。
クラスについての詳細はこちらの資料を参照してください。
http://zone.ni.com/reference/ja-XX/help/371361J-0112/lvprop/propmeth_class_hierarchy/
よって、クラス名でノブの場合とスライダの場合を分けてスケールの最大値を設定することで問題を解決出来ると思います。
添付したPNGとVIをご覧になってください。
05-08-2015 03:25 AM
dragon1さま
ありがとうございました。
クラスの継承関係を考慮しなければいけなかったのですね。
お陰様で、XControlに追加したプロパティとオリジナルのオブジェクトのプロパティを接続できるよう
になりました。
ところが、別の制御器出力をXControlのスケール最大値・最小値・反転の各プロパティ入力に接続
してみたところ、別の制御器の数値や状態を変更してもそれがXControlに反映されません。
XControlでは表示状態変更イベントをトリガーとしてスケール最大値・最小値・反転を反映させるよ
うにしてますが、別の制御器の数値を変更しただけではXControlの表示状態変更イベントが発生し
ないのか、それともXControl構成オブジェクトの内部プロパティを変更するには別のイベントを使わ
なければならないのかどうか。あるいは、まったく異なるメカニズムで実装しなければいけないのか
わかりません。いろいろと試行錯誤はしているのですが・・・。
どなたか解決策をご教示頂けないでしょうか。よろしくお願い致します。
05-10-2015 11:26 PM
そうですね。
こちらでアナログ表示器テスト.VIを実行してスケール設定を試してみた結果、外観の「Display in state.スケール最大値:値変更」イベントが発生しませんでした。ちなみに、イベントの中にポップアップダイアログを入れて確認しました。
表示器種別機能のように「表示状態を変更」イベントにスケール調整のプロパティを追加してみたらXControlのスケールが制御出来ました。
NIコミュニティのサンプルコードにXcontrolを使う例が色々ありますので参考になるかと思います。
05-11-2015 03:41 AM
dragon1さま
おかげ様で、XControlのスケール上下限値設定およびスケール反転を実現することができました。
ありがとうございました。