03-07-2018 12:59 AM
manakaと申します。
表題の件で悩んでおります。
VIの簡単な説明をいたしますと
ある制御器に、デフォルトで「2」と入っていたとします。
フロントパネルでユーザーがその制御器の値を「5」に変更し、SETボタンを押下すると、
その数値をデフォルト値として設定し、それ以降「5」を使用したいのです。
困っている点としては、他の動作の関係上、VIが定期的にすべての制御器をデフォルト値に戻す処理が加えられている点です。
これを回避するために、「5」と入力したらデフォルト値に設定してしまいたいのです。
つたない説明で申し訳ありませんが、どなたかお力お貸しください。
よろしくお願いいたします。
03-07-2018 07:10 PM
manaka 様こんにちは、
平素よりNI製品をご利用頂きまして誠に有難うございます。
本件はブール制御器をクリックすると、制御器の値をデフォルト値に変更するというプログラムを作成する予定しょうか。
この場合、イベントストラクチャとインボークノードを使用していただければと思います。
最初に、制御器の値をデフォルト化する、または制御器の値を最初期化するには、次の手順を推奨いたします。
1.制御器の値を入力
2.LabVIEWの編集メニュから「現在の値をデフォルト設定にする」または「値をデフォルトに最初期化」を選択
インボークノードを利用すると値をデフォルト値に再初期化する方法がございますので、案内いたします。
どのようにプログラム的にフロントパネル上の全ての値をデフォルト値に再初期化するのでしょうか
http://digital.ni.com/public.nsf/allkb/435D95F9C3B60F6F86257607000E124B
Initializing VI Elements to Default Values
https://forums.ni.com/t5/LabVIEW/Initializing-VI-Elements-to-Default-Values/td-p/1892911
次に、上記のインボークノードをイベントストラクチャ内に配置していただければと思います。
ブール制御器の値の変更が発生するとイベントストラクチャ内のコードが実行されるので、
制御器の値がデフォルト値に変更することができます。
イベントストラクチャの使い方に関する資料もございますので、ご参照いただければと思います。
イベントストラクチャの基本的な使い方
回答は以上です。
ご不明な点がございましたら、気軽にご返信下さい。
03-07-2018 07:53 PM
Z.Dzukarnain 様
早速のお返事ありがとうございます。
>本件はブール制御器をクリックすると、制御器の値をデフォルト値に変更するというプログラムを作成する予定しょうか。
おっしゃる通りでございます。
VI全体の構成としては、イベントストラクチャとケースストラクチャで、
要素をエンキューなどを使って、イベントが起きたらメッセージを送り、希望のケースを実行しています。
そのケースストラクチャのデフォルトケースに、インボーグノードで「VIのすべてをデフォルト設定に戻す」をいれ、デフォルト値にリセットしています。
このデフォルトケースは、最初だけでなく定期的に実行されるので、
ユーザーが制御器の値を変更したものをすぐにデフォルト設定にしたいというものです。(デフォルトケースがまわってしまうと、ユーザーが設定したものが消えてしまうため。)
>ブール制御器の値の変更が発生するとイベントストラクチャ内のコードが実行されるので、制御器の値がデフォルト値に変更することができます。
複数制御器がある場合、一部の制御器のみを(ブール制御器が押された際に)デフォルト設定に再設定するということが可能という意味でしょうか?
全体的に説明不足ですみませんでした。
宜しくお願い致します。
03-19-2018 03:13 AM
manaka 様こんにちは、
ご返信いただきありがとうございました。
値を実行中に複数回変更したいとの旨、承知いたしました。
以前案内いたしましたインボークノードは少々機能が限られておりますので、
本件の場合にはプロパティノードのご使用を推奨いたします。
「デフォルト設定に戻す」のインボークノードを使用する場合、LabVIEW編集メニュの「現在の値をデフォルト設定にする」にて設定された値にしか戻れませんので、ご了承いただければと思います。
また、下記資料の通り、プログラム的にVIのデフォルト値を変更できますが、デフォルト値を変更するためにまた別のVIを作成いただく必要がございます。
「現在の値をデフォルト設定にする」メソッドがVI実行中に実行できないため、
LabVIEWではVIのデフォルト値のプログラム的再設定は同じVIから行えません。
Set the Default Value of a Control in a VI Programmatically (プログラム的にデフォルトの値を変更)
https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z0000019OiiSAE
Is it possible to set the current value as default while VI is running? (VIが実行中に現在の値をデフォルト化できますか)
制御器の値を定期的に変更し、デフォルト値として使用する場合、プロパティノードをご使用していただければと思います。
デフォルトの値を制御器に書き込む簡単なVIを作成しましたので、ご参照いただければと思います。
また、プロパティノードにて変更可能なプロパティ(「Value」項目)をまとめた資料がございますので、ご参照いただければと思います。
制御器・表示器のプロパティノードの共通項について
http://digital.ni.com/public.nsf/allkb/862004880179A90A86256C0F00204FA6
> 複数制御器がある場合、一部の制御器のみを(ブール制御器が押された際に)デフォルト設定に再設定するということが可能という意味でしょうか?
はい、イベントストラクチャ内のコードが一部の制御器のみの値を変更するように作成された場合、指定された制御器の値のみが変更されます。
もちろん、値変更されたい制御器をイベントストラクチャ内に配置する必要がございます。
回答は以上です。
ご不明な点がございましたら、お気軽にご返信下さい。