NI製品ディスカッション

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

サブVIのループ実行結果をメインVIで毎回受け取る方法

t添付のtest_child.viで3秒ごとにデータを取得させています。test_parent.viにtest_child.viをサブVIとして配置して、test_parent.vi実行したときにtest_parent.viでも3秒ごとにtest_child.viで取得したデータを表示させるにはどのようにしたらよいでしょうか。
すべてをダウンロード
0 件の賞賛
メッセージ1/6
4,975件の閲覧回数
dn0 様

平素より弊社製品をご使用いただき誠に有難うございます。
日本ナショナルインスツルメンツ技術部の櫻田と申します。


ご添付頂いたプログラムを拝見させて頂きました。
サブVIで3秒単位で取得したデータをメインVIで取得するには
test_child.viのwhileループを削除して、test_parent.viをwhileループでループさせる方法が適当かと思われます。
添付の画像をご参照下さい。

添付画像の実行の順序は次の通りです。
1)test_parent2.viを実行開始します。
2)test_parent2.viのループ内に入ります。
3)test_child2.viを呼び出し実行します。同時に停止ボタンの状態をループの条件端子に渡します。
4)現在の時刻を取得して表示し、現在の時刻の取得と同時に3秒の待機がスタートします。
5)test_child2.viを呼び出し実行した3秒後に、実行が終了します。
6)test_parent2.viで現在時刻を表示します。(3秒前にtest_child2.viで取得した値)
7)(3)の時点で停止ボタンが押されていなければ、(2)に戻り、ループを繰り返します。
  (3)の時点で停止ボタンが押されていれば、実行が終了します。

両VIでデータの取得と表示のタイミングが異なる点にご注意下さい。

また、このような構成の場合には
メインVIのループ内にサブVIの出力を使用する他の処理があると、3秒間隔でのデータ取得にはなりません。
3秒間隔でのデータ取得と表示を、より正確に行いたい場合には
サブVIにはデータ取得のみを置き、時間の管理はメインVIに待機関数等を配置して行う方法が簡便です。

以上、ご不明な点等ございましたらご連絡下さい。
よろしくお願い申し上げます。

日本ナショナルインスツルメンツ技術部
櫻田
0 件の賞賛
メッセージ2/6
4,946件の閲覧回数
櫻田様
 
ご回答ありがとうございます。
添付のviのように単純な場合はご指摘の方法でできるのですが、例えばスタックシーケンスの途中のスタックにデータ取得部分がある場合はメインviでループをまわしてしまうと最初や最後のスタックも実行されてしまいます。
 
サブviの特定の場所でループされる実行結果をメインviで同時に表示できると助かります。対処法が無いようでしたらサブviの構成要素をさらにサブviにしてメインループでご指摘のようにデータ取得部分をループでまわす方法にしたいと思います。
 
dn0
0 件の賞賛
メッセージ3/6
4,921件の閲覧回数

横槍で恐縮です。

いろいろやり方あると思いますが、添付のような所望の動作に近いでしょうか。

メインからはサブを1回しか呼んでいませんが、メインの表示器のリファレンスを渡しているので、サブの中でメインの表示器に表示させたいときにこのリファレンスを使って値を書き込めます。メインは、ただひたすら停止ボタンが押されるのを待つのみで、サブ側ではループで1秒に1回乱数を発生させつつ5回に1回メインの表示器に表示させています。

LabVIEW6のものなので、上位バージョンでは他の方法もあるかと思います。

 

0 件の賞賛
メッセージ4/6
4,905件の閲覧回数
お世話になっております。
日本ナショナルインスツルメンツ技術部の櫻田です。


白石様のご提案の方法で、dn0様のご所望の動作が可能だと思います。
解決方法をご提案頂きありがとうございます。

私の方からは、グローバル変数を用いた方法を提案させて頂きます。
グローバル変数は、グローバルVIを介して、VI間の値の受け渡しを行うことが可能です。
プログラムに関しましては、添付の画像をご参照下さい。

グローバル変数は関数パレットのストラクチャに有ります。
作成方法等はLabVIEWのヘルプをご参照頂ければと思います。


白石様がご提案された制御器リファレンスを使用した場合は
複数の制御器に同一のプロパティを設定する場合等に便利です。
一方、グローバル変数を使用した場合は
直感的にデータの受け渡しを行っていることが理解しやすいのですが
変数がメモリ領域を使用するため、多用すると処理速度が低下する恐れがあります。


以上、ご不明な点等ございましたらご連絡下さい。
よろしくお願い申し上げます。

日本ナショナルインスツルメンツ技術部
櫻田
0 件の賞賛
メッセージ5/6
4,879件の閲覧回数

櫻田様、白石様

アドバイス頂きありがとうございました。今回は白石様の方法でプログラムの作成し、無事問題を解決できました。

グローバルVIの方法も今後使わせてもらいます。

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

dn0

 

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