Forループでデータが失われるのはなぜですか?

更新しました Sep 14, 2023

使用製品

ソフトウェア

  • LabVIEW
  • LabVIEW Professional
  • LabVIEW Full

問題

LabVIEWプログラムにForループがあり、ループの入力と出力の間でデータまたはリファレンスが失われることがあります。なぜこのような動作が見られるのですか?また、どうすればそれを防ぐことができますか?

解決策

問題:

この問題は、いくつかのシナリオで発生する可能性があります。

  • まず、Forループのカウント(N)端子にゼロ値を配線すると、そこを通過する情報はすべて失われます。これは、ループ内部が実行されていないためです。そのため、データをForループの出力端子に渡すことはできません。これにより、Forループの入力トンネルに提供されたデータが事実上失われます。たとえば、下記のスニペットでは数値制御器と初期化された配列を、ゼロ回実行するように構成されたForループに渡しています。データフローがループ内で中断されるため、2つの出力は初期化されません。




 
  • 次に、Forループを初期化された配列要素の数よりも少ない回数実行すると、配列からデータを失うこともあります。たとえば、下記のスニペットのように3回実行するように設定された配列への入力として6つの数値が含まれている配列がある場合、出力配列は最初の3つの数値だけを保持します。
     




 
 

解決策:

データを保存するには、トンネルをシフトレジスタに変更します。このシフトレジスタはデータのメモリ割り当てを作成し、たとえループがゼロ回実行するように設定されていても、データがForループの出力で保存されることを可能にします。トンネルをシフトレジスタに変更するには、入力トンネルを右クリックしてシフトレジスタと置換を選択します。Forループの反復回数が自動インデックス配列またはファイルから決定される場合は、データの損失を防ぐためにサイズをゼロにしないでください。

追加情報

メモ: この画像は、プロジェクトで再利用できるLabVIEWコードを含むLabVIEWスニペットです。スニペットを使用するには、画像を右クリックしてコンピュータに保存し、ファイルをLabVIEWダイアグラムにドラッグします。