このチュートリアルでは、生産者ループによって生成されたデータを処理する消費者ループを作成します。データを処理する方がデータを生成するよりも優先度が低いタスクであるため、消費者ループはタイミングループの代わりにWhileループを使用します。つまり、ハードウェアリソースが制限された場合、データを処理するよりも、制限された時間内にデータを生成することが重要になります。

消費者ループを作成する

Whileループとタイミングループは、「次のミリ秒倍数まで待機」関数を使用して同期を取るのが普通です。この方法でループを同期するのは必須ではありませんが、こうすると、タイミングループの実行が終わった後に、Whileループに一定時間存続する実行時間が与えられます。

以下の手順に従って、生産者ループと同じ周期を持つ消費者ループを作成します。

  1. Real-Time Main.viのブロック図内で、タイミングループの下にWhileループを配置します。
  2. Whileループ内に「次のミリ秒倍数まで待機」関数を配置します。
  3. 「次のミリ秒倍数まで待機」関数のミリ秒倍数入力を右クリックして、ショートカットメニューから作成→定数を選択します。
  4. タイミングループの周期に合わせて、定数として「250」を入力します。

生産者ループから消費者ループに確定的にデータ転送する

LabVIEWには、データを転送するための多くのメソッドが用意されていますが、その中には確定的なものとそうでないものがあります。RT FIFOは、確定的データ通信方法の一例です。確定性を実現するために、RT FIFOは実行時の前にデータ転送用のメモリを事前に割り当て、メモリへの予期しない書き込み遅延を防止します。RT FIFOは、先入れ先出しの順序でデータをバッファし、転送します。RT FIFO関数は、関数パレットのReal-Time→RT FIFOにあります。利用可能なその他のデータ通信方法については、LabVIEWヘルプトピックの「データ通信方法」を参照してください。

RT FIFOを使用して生産者ループから消費者ループにデータを転送するには、以下の手順に従ってください。

  1. 「RT FIFO作成」関数をループの外側と左側に配置します。
  2. タイミングループの表示器を「RT FIFO書き込み」関数に置き換えます。
    メモ 必ず「乱数」関数の出力を「RT FIFO書き込み」関数の要素入力に配線してください。
  3. 「RT FIFO読み取り」関数をWhileループ内に配置します。
  4. 「RT FIFO削除」関数をループの外側と右側に配置します。
  5. DBL数値定数を、「RT FIFO作成」関数のタイプ入力に配線します。
  6. 「RT FIFO作成」関数のRT FIFO出力を、他の3つの「RT FIFO」関数のRT FIFO入力に配線します。
  7. Whileループのループ条件アイコンを右クリックし、ショートカットメニューからコントロールを作成を選択して停止ボタンを作成します。
  8. ケースストラクチャをWhileループ内に配置します。
  9. ケースストラクチャセレクタラベルでFalseを選択します。
  10. 「RT FIFO読み取り」関数の空?出力を、ケースストラクチャのケースセレクタに配線します。
  11. 「RT FIFO読み取り」関数の出力要素出力を右クリックして、ショートカットメニューから作成→表示器を選択します。
  12. 表示器をケースストラクチャ内に配置します。
  13. 「RT FIFO読み取り」関数の出力要素出力に表示器を配線します。

エラー処理を追加する

関数のエラー端子を配線することがベストプラクティスです。これにより、VIの実行を中断することなく、エラー情報をVIを介して渡し、エラーを適切に処理できます。

Real-Time Main.viでエラーを配線するには、以下の手順に従ってください。

  1. タイミングループの入力ノードのサイズを変更して、5つの入力を含めます。
  2. タイミングループ入力ノードの一番下の入力を右クリックし、ショートカットメニューから入力を選択→エラーを選択します。
  3. 「RT FIFO作成」関数のエラー出力出力を、タイミングループ入力ノードのエラー入力に配線します。
  4. タイミングループの左データノードのエラー出力を、「RT FIFO書き込み」関数のエラー入力入力に配線します。
  5. 「RT FIFO書き込み」関数のエラー出力出力を、タイミングループの右データノードのエラー入力に配線します。
  6. 「エラー結合」関数をループの外側と右側に配置します。
  7. タイミングループの出力ノードのエラー出力を「エラー結合」関数の一番上の入力に配線します。
  8. 「RT FIFO作成」関数のエラー出力出力を、「RT FIFO読み取り」関数のエラー入力入力に配線します。
  9. 「RT FIFO読み取り」関数のエラー出力出力をケースストラクチャを介して、「エラー結合」関数の入力の一番下のエラー入力入力に配線します。
  10. 「エラー結合」関数のエラー出力出力を「RT FIFO削除」関数のエラー入力入力に配線します。
  11. 「RT FIFO削除」関数のエラー出力出力を右クリックして、作成→表示器を選択します。
  12. 2つのWhileループエラートンネルのいずれかを右クリックし、ショートカットメニューからシフトレジスタと置換を選択します。
  13. もう一方のWhileループエラートンネルをクリックして、シフトレジスタに置き換えます。
  14. ケースストラクチャセレクタラベルでTrueを選択します。
  15. ケースストラクチャを介してエラーワイヤを接続します。
  16. VIを保存します。
  17. プロジェクトエクスプローラウィンドウでVIを右クリックし、ショートカットメニューからデプロイを選択します。

結果

Real-Time Main.viを実行すると、生産者ループが最優先となり、RTターゲットによって生成された値をRT FIFOバッファに書き込みます。消費者ループは、各周期中にCPUが使用可能になるたびにRT FIFOバッファから値を読み取ります。

メモ フロントパネルの両方の停止ボタンをクリックして、VIを停止します。