フィードバックノード
- 更新日2025-04-04
- 8分で読める
フィードバックノードを使用して、前回のブロックダイアグラムの実行またはループの反復からのデータを保存します。フィードバックノードは前回の実行から状態情報を保存および回収するのに便利です。
フィードバックノードは、受信するデータにアクションを遂行しません。その代わり、フィードバックノードは初期化端子から値を受け取り、その値を次の入力端子に転送します。フィードバックノードは、新しい値を受け取ると次の入力端子に渡すまでその値を保持します。フィードバックノードは、フィードバック制御理論およびデジタル信号処理のz-1ブロックと同様です。
フィードバックノードを作成する
以下に示すとおり、サブVI、関数、あるいはサブVIと関数のグループの出力を同じVI、関数、またはグループの入力に配線する場合、およびオプションダイアログボックスでブロックダイアグラムページの帰還ワイヤ内にフィードバックノードを自動的に挿入を有効にする場合、フィードバックノードは自動的に表示されます。帰還ワイヤ内にフィードバックノードを自動的に挿入はデフォルトで有効に設定されます。
また、関数パレットでフィードバックノードを手動で選択することができます。
フィードバックノードのサンプルについては、Structures\Feedback NodeディレクトリのFeedback Node - Building an Array VIを参照してください。
初期化端子
初期化端子はフィードバックノードの初期値を設定します。以下に示すように、初期化端子の外観はフィードバックノードの構成によって変化します。
ブロックダイアグラムにフィードバックノードを配置する際、初期化端子はノードに接続されたまま残り、ノードはVIがコンパイルまたはロードする度にグローバルに初期化されます。最初の実行時でのフィードバックノードの初期入力はデータタイプのデフォルト値となります。ただし、フィードバックノードの初期値を設定できます。初期値を設定すると、フィードバックノードはVIの最初の呼び出しで実行中にその値に初期化されます。最初の実行後は、VIが実行するたびに、初期値は前回の実行からの最終値となります。ループでフィードバックノードを使用する場合、初期化端子をループの左端に移動して、ループが実行されるたびにノードを初期化するように設定することができます。
有効化端子
フィードバックノードの保存機能を有効または無効にするには、以下に示す有効化端子を使用します。
フィードバックノードを右クリックして、ショートカットメニューから有効化端子を選択すると有効な端子を表示できます。有効化端子をTRUEに設定すると、フィードバックノードはプロパティダイアログボックスまたはノードのショートカットメニューで構成したとおりに実行されます。有効化端子がFALSEに設定されている場合、端子の値が再びTRUEに設定されるまで、フィードバックノードは前回の実行または反復からの最後の値を出力し続けます。
データのサンプル
フィードバックノードは、デフォルトでは前回の実行または反復のデータだけを保存します。ただし、プロパティダイアログボックスの構成ページでフィードバックノードの出力を遅延させる実行または反復の数を増やして、フィードバックノードが後続の複数の実行または反復のデータサンプルを保存するようにすることができます。遅延を1回を超える実行または反復に増やすと、フィードバックノードは指定した遅延が完了するまで初期値のみを出力します。そして、フィードバックノードは保存した値を一度に1つずつ順番に出力を開始します。
![]() | メモ (FPGAモジュール) プロパティダイアログボックスのFPGA実装ページのFPGAリセットメソッドを無視チェックボックスをオンにすると、LabVIEW FPGAモジュールは基本となるレジスタのインスタンス化のリセットを削除します。この削除により、フリップフロップの代わりにシフトレジスタルックアップテーブル (SRL) を使用して、コンパイラに遅延を実行するオプションが追加されます。SRLは、多数の遅延を単一のルックアップテーブル (LUT) に統合するため、フリップフロップを使用する場合と比較してFPGAのリソース消費を大幅に減少することができます。 |
たとえば、遅延を3に指定すると、フィードバックノードは3回のループ反復で初期値を出力します。それに続く反復では、最初の反復 (反復0) の値、続いて2番目の反復の値という順番で値が返されます。以下のブロックダイアグラムは、初期値が0、遅延が3に指定されたフィードバックノードの動作を示しています。
ループ反復 | フィードバックノードが出力する値 | 終了値 | フィードバックノードが保存する値 |
---|---|---|---|
実行前または反復0 | なし | なし | 0、0、0 |
0 | 0 | 0 | 0、0、0 |
1 | 0 | 1 | 0、0、1 |
2 | 0 | 2 | 0、1、2 |
3 | 0 | 3 | 1、2、3 |
4 | 1 | 5 | 2、3、5 |
5 | 2 | 7 | 3、5、7 |
6 | 3 | 9 | 5、7、9 |
7 | 5 | 12 | 7、9、12 |
上記のブロックダイアグラムでは、フィードバックノードが初期値0を3回出力し、その後最初に受け取った値 (0) を出力します。
![]() | メモ 複数の実行または反復に遅延を設定した場合、配列を初期化端子に配線して、各遅延要素を任意の値に初期化できます。 |
矢印方向
フィードバックノードを右クリックし、ショートカットメニューから方向を変更を選択することで、ワイヤに沿ったデータフローを示すフィードバックノードの矢印の方向を変更することができます。矢印の方向を変更すると、フィードバックノードおよびブロックダイアグラム上でフィードバックに接続されているワイヤの外観のみが変化し、データフローの方向は変化しません。
Z変換表示
ノードを右クリックして、ショートカットメニューからZ変換表示を選択すると、フィードバックノードがZ変換表示を表示するように変更することができます。この表示変更で、フィードバックノードの外観はフィードバック制御論理および信号処理のz-1ブロックのようになります。ノードをZ変換表示に変更しても、フィードバックノードの装飾的な外観が変更されるだけで、ノードの機能に変更はありません。
フロントパネル表示器およびフィードバックノード
フィードバックノードと同様の同じサイクルのワイヤに接続されたフロントパネル表示器には、フィードバックノードに相対するワイヤの位置により異なる値が表示されます。以下のブロックダイアグラムでは、初期値の設定を行い、表示器に最終値を転送し、その値をフィードバックノードに返す次の入力値にフィードバックノードは初期値を渡します。
上記のブロックダイアグラムでは、「インクリメント」関数は、表示器に値が渡される前に4の初期値上で操作されていました。したがって、フロントパネル表示器には5が表示されます。ただし、以下のブロックダイアグラムでは、フィードバックノードは同じデータ値を「インクリメント」関数に転送しますが、表示器には異なる値が表示されます。
上記のブロックダイアグラムでは、フィードバックノードの初期値 (4) は、「インクリメント」関数に達する前に表示器に達していました。「インクリメント」関数からフィードバックノードに送信された最終値が5である場合でも、フロントパネル表示器には4の初期値が表示されます。