LabVIEWのループ反復間でデータを受け渡す

本ページの内容

ループを使ってプログラミングする際、LabVIEWでは前回のループ反復からのデータにアクセスすることが少なくありません。例えば、ループの各反復で1つのデータを集録していて、5つのデータごとに平均する場合、前回のループ反復からのデータを保持しておく必要があります。

シフトレジスタ

 

ビデオ: シフトレジスタ

ループの前回の反復から次の反復へ値を渡す際には、シフトレジスタを使用します。シフトレジスタは、ループの縦枠上に向かい合って配置された2個の端子です。

ループの右側の端子には上向き矢印が表示され、反復完了時のデータを保存します。レジスタの右側に接続されたデータは、次の反復に転送されます。ループの実行後、シフトレジスタに保存されている最後の値はループの右側の端子です。

シフトレジスタを作成するには、ループの右または左枠を右クリックして、ショートカットメニューから「シフトレジスタを追加」を選択します。

シフトレジスタはどのタイプのデータでも転送でき、シフトレジスタに配線された最初のオブジェクトのデータタイプに自動的に適用します。各シフトレジスタの端子に配線するデータは、同じタイプである必要があります。

ループには、複数のシフトレジスタを作成することができます。ループ内で複数の操作が前の反復値を使用している場合は、図1に示すように、複数のシフトレジスタを使用してストラクチャ内の異なるプロセスからのデータ値を保存します。

図1. 複数のシフトレジスタを使用する

シフトレジスタを初期化する

シフトレジスタを初期化すると、VIの実行時にシフトレジスタがループの最初の反復に渡した値がリセットされます。シフトレジスタを初期化するには、図2に示すように、制御器または定数をループの左側のシフトレジスタ端子に配線します。

図2. 初期化されたシフトレジスタ

図2で、Forループは5回実行し、シフトレジスタが保持する値は実行のたびに1ずつ増分します。Forループが5回実行すると、シフトレジスタは最終的な値である5を表示器に渡し、VIは中止します。VIを実行するたびに、シフトレジスタは値0から開始します。シフトレジスタを初期化しないと、ループが最後に実行した際にシフトレジスタに書き込まれた値が使用されます。ループが一度も実行していない場合は、データタイプのデフォルト値が使用されます。初期化されていないシフトレジスタを使用すると、VIの逐次実行の間で状態情報が維持されます。

図3. 初期化されていないシフトレジスタ

図3で、Forループは5回実行し、シフトレジスタが保持する値は実行のたびに1ずつ増分します。VIを初めて実行すると、シフトレジスタは0の値で開始します。この0の値は、32ビット整数のデフォルト値です。Forループが5回実行すると、シフトレジスタは最後の値である5を表示器に渡し、VIは中止します。VIの次回の実行では、シフトレジスタは前回の実行の最終値である値5から開始します。Forループが5回実行すると、シフトレジスタは最後の値である10を表示器に渡します。VIをもう一度実行すると、シフトレジスタは値10から開始する、という具合になります。初期化されていないシフトレジスタは、VIが閉じられるまで前回の反復の値を保持します。

スタックシフトレジスタ

スタックシフトレジスタでは、前回の複数のループ反復のデータにアクセスすることができます。積み上げられたシフトレジスタは過去の複数回の反復値を記憶し、それらを次の反復に渡すスタックシフトレジスタを作成するには、左側の端子を右クリックしてショートカットメニューから「要素を追加」を選択します。

スタックシフトレジスタは、ループの左側のみに作成できます。右側の端子は、現在の反復で生成されたデータのみを次の反復に転送するからです。

図4. スタックシフトレジスタの使用

上記のブロックダイアグラムのように他の要素を左側の端子に追加した場合、最後の2回の反復で生成された値は、次の反復に渡されます。最新の反復値は一番上のシフトレジスタに格納されます。下の端子は、前の反復から渡されるデータを保存します。

新しい方法でLabVIEWの基礎を学習する

新しい対話形式の方法で、LabVIEWの概念を学習しましょう。

学習を続ける

前へ実行ストラクチャ
エラーを処理する次へ