NI製品ディスカッション

cancel
Showing results for 
Search instead for 
Did you mean: 

LabVIEWで任意の数のサブviを呼び出して並列処理を行う方法を教えてください。

Solved!
Go to solution

LabVIEWで数値の制御器を用いて任意の数だけサブviを呼び出して並列処理を行わせたいと考えています。

現状では、ブロックダイアグラム上にある程度の個数を配置した上で、任意の個数だけ動かすという方法しか実現できておらず、最初に設置した個数以上は処理できないため、行き詰っています。

0 Kudos
Message 1 of 10
(147 Views)

まず、呼び出すサブVIは同じもの(.vitまたは再入実行VI)と考えてよいですね?

基本的にはVIリファレンスを開いて非同期呼び出しを使います。条件によってコードが多少違います。

1) サブVIはフロントパネルを表示しますか?

2) サブVIからの出力データを受け取る必要はありますか?

 

Message 2 of 10
(112 Views)

すみません、補足いたします。


whileループを行う同一のサブviを指定した数だけメインviで呼び出し並列処理を行いたいと考えています。

1)フロントパネルは表示する必要はないです。制御や表示はメインのフロントパネルで行う予定です。
2)考えているのは、動いているwhile文の中にローカル変数もしくはキューを用いてデータを入出力させたいということです。

0 Kudos
Message 3 of 10
(83 Views)

追加

J.H.Watsonさんが示されたVIリファレンスの非同期呼び出しを自分でも調べてプログラムを作ってみたのですが、個々のVIは値を途中で書き込むことが出来ない、終了させないと値を取り出せない、のでしょうか?

0 Kudos
Message 4 of 10
(77 Views)

通常のサブVI(関数)と同じように使うなら、引数を渡して実行完了後に結果をもらうように作ります。

呼び出し側VIと並列に複数起動し、それらとの間でデータをやり取りするには、そのように作ります。

 

整理します。

・サブVIはメインVIから実行中に起動され、ある程度の時間継続して動作し続け、何かの仕事をしてくれる。

・メインVIは自身の仕事をしながら必要に応じてサブVIたちとメッセージ(コマンド・レスポンスやデータ値)をやり取りする。

・サブVIのフロントパネルは表示せず、メインVIからの指令で終了する。

で、合ってますか?

Message 5 of 10
(70 Views)

はい、その要件で合っています。

0 Kudos
Message 6 of 10
(58 Views)

メインとサブ間の通信にはいろいろな方法があります。グローバル領域系、イベント通知系、通信プロトコル系・・・

ちょうどよい資料が見つからなかったので、キューを使ったサンプルVIを添付します。

メインVIとメモリ監視VIを開いて、両方実行してみてください。(LabVIEW2014のVI)

0 Kudos
Message 7 of 10
(54 Views)
Solution
Accepted by yiw9030

上のサンプルだと、返事が返ってくるまでの時間がまちまちの場合に使いづらいことに気がつきました。

こっちのほうが用途に合っているかもしれません。

 

Message 8 of 10
(29 Views)

返信遅くなりましてすみません。

早速試したところ、私が行いたいことが全部含まれていて大変感激しました。

わざわざ、調べていただいたとのことでありがとうございました。

0 Kudos
Message 9 of 10
(15 Views)

お役に立ててよかったです(^^)

0 Kudos
Message 10 of 10
(9 Views)