LabVIEWリアルタイムで最初の測定を行う(データロギング)

更新しました Sep 8, 2022

環境

ハードウェア

  • CompactRIO Controller

ソフトウェア

  • LabVIEW

ドライバ

  • NI-DAQmx

このチュートリアルでは、CompactRIOを使用してデータをディスクに記録する手順を説明します。

LabVIEWを使用したCompactRIOシステムの検出が終了したら、最初の測定を行う必要があります。

このページは、 CompactRIOシステムのセットアップに関するウォークスルーの一部です。

LabVIEWで新しいCompactRIOプロジェクトを開始する

LabVIEWで新しいプロジェクトを作成することから始めます。ここで、コードとハードウェアリソースを管理します。

  1. ファイル→プロジェクトを作成を選択して、LabVIEWで新規プロジェクトを作成します。
  2. ツリーの上部にある[プロジェクト]アイテムを右クリックし、[新規]» [ターゲットとデバイス]を選択して、CompactRIOシステムをプロジェクトに追加します。このダイアログでは、ネットワーク上のシステムを検出したり、オフラインシステムを追加したりできます。

1. LabVIEWプロジェクトに新しいターゲットとデバイスを追加する
  1. Real-Time CompactRIOフォルダーを展開し、システムを選択します。 [OK]をクリックしてダイアログウィンドウを閉じます。

システムがリストにない場合、LabVIEWはネットワーク上でシステムを検出できませんでした。 Measurement&Automation Explorerで、システムが有効なIPアドレスで適切に構成されていることを確認してください。システムがリモートサブネット上にある場合は、IPアドレスを手動で入力することもできます。


図2. 新しいCompactRIOシステムの選択

適切なプログラミングモードを選択します

CompactRIOシステムには、少なくとも2つのユーザー選択可能なモードがあります。 CompactRIOの一部のモデルには、リアルタイムNI-DAQmxでプログラムするための追加のユーザー選択可能モードがあります。 CompactRIOがリアルタイムNI-DAQmxを使用できるかどうかを判断するには、この記事を参照してください。プロジェクトにターゲットを追加すると、使用するプログラミングモードを選択するように求められます。
:必要に応じて、 CompactRIOシャーシのプロパティダイアログボックスを使用して、プログラミングモードを後で変更できます。

リアルタイム(NI-DAQmx)モード– NI-DAQmxを搭載したCompactRIOは、CompactRIOコントローラーファミリーの最新製品です。 NI-DAQmxの使いやすさとLabVIEWFPGAの低レベル機能を組み合わせることで、2つのソフトウェアエクスペリエンスを1つにまとめました。また、CompactRIOプラットフォームに最新の同期および制御テクノロジーを導入することにより、システムアーキテクチャを簡素化します。このモードでCシリーズモジュールをプログラムするには、LabVIEWプロジェクトのReal-Time Resourcesフォルダの下に配置します。

リアルタイムスキャン(I/O変数)モード–このオプションを使用すると、CompactRIOシステムのリアルタイムプロセッサをプログラムできますが、FPGAはプログラムできません。このモードでは、NIはFPGAに事前定義されたパーソナリティを提供し、I/Oを定期的にスキャンしてメモリマップに配置し、LabVIEWReal-Timeで使用できるようにします。 CompactRIOリアルタイムスキャンモードは、数百ヘルツのレートでI/Oへのシングルポイントアクセスを必要とするアプリケーションに十分です。このモードでCシリーズモジュールをプログラムするには、LabVIEWプロジェクトのリアルタイムスキャンリソースフォルダの下に配置します。スキャンモードの詳細については、 NI CompactRIOスキャンモードについてのホワイトペーパーを読み、 ベンチマークを確認してください。
:NIは、リアルタイムスキャン(I/O変数)モードよりもリアルタイム(NI-DAQmx)モードを推奨しています。

LabVIEW FPGAインターフェイスモード–このオプションを使用すると、リアルタイムプロセッサのプログラミングに加えてFPGAのパーソナリティをカスタマイズすることで、CompactRIOの真のパワーを解き放ち、通常はカスタムハードウェアを必要とするパフォーマンスを実現できます。 LabVIEW FPGAを使用すると、カスタムタイミングとトリガ、オフロード信号処理と分析を実装し、カスタムプロトコルを作成し、最大速度でI/Oにアクセスできます。このモードでCシリーズモジュールをプログラムするには、LabVIEWプロジェクトのFPGAターゲットの下に配置します。
LabVIEWは、システムに存在するシャーシとCシリーズI/Oモジュールを検出し、それらをLabVIEWプロジェクトに自動的に追加しようとします。
:システムが検出されず、オフラインで追加することを選択した場合は、シャーシとCシリーズI/Oを手動で追加する必要があります。このドキュメントでは、スキャンモードとFPGAモードのこのプロセスについて説明します。

次の図は、各モードが一意のパスを介してI / Oデータを送信する方法を示しています。リアルタイム(NI-DAQmx)モードの場合、データはNI-DAQmxVIを介してプロセッサを介して読み取られます。リアルタイムスキャン(I/O変数)モードの場合、データはFPGAを介して送信されますが、最終的にはI/OノードをリアルタイムVIにドラッグアンドドロップすることでプロセッサ上でアクセスされます。 LabVIEW FPGAモードの場合、I/OノードをFPGA VIにドラッグアンドドロップすることにより、FPGA内から直接I/Oが読み取られます。


開発用コンピュータにLabVIEWReal-Time、LabVIEW FPGA、およびNI-DAQmxがある場合は、プロジェクトの適切な見出しの下にモジュールを配置することにより、モジュールごとに使用するプログラミングモデルを選択できます。プログラミングモードは、LabVIEWプロジェクトのモジュールの横にあるテキストで示されます。 Measurement and Automation Explorer(MAX)のドロップダウンメニューから選択して、使用するプログラミングモデルを選択することもできます。

CompactRIOで基本的なロギングアプリケーションを作成します

このセクションは、基本的な温度ロギングアプリケーションを作成する方法を示す3つのサブセクションに分かれています。ご希望のプログラミングモードとCompactRIOコントローラーに基づいてセクションを選択してください。希望するプログラミングモードがわからない場合は、「適切なプログラミングモードの選択」セクションを参照してください。セクションは次の順序でリストされています

  1. NI-DAQmx API
  2. FPGAプログラミングモード
  3. リアルタイムスキャンモード

I. NI-DAQmx APIの使用

NI-DAQmxドライバーには、ユーザーがNI-DAQmx APIに慣れるためのさまざまなサンプルVIが付属しています。このセクションでは、NI-DAQmxのサンプルをCompactRIOターゲットにインポートする方法について説明します。熱電対-連続入力VIをインポートします。

  1. ファイル→新規プロジェクトを選択して、LabVIEWで新規プロジェクトを作成します。
  2. CompactRIOシステムをプロジェクトに追加するには、ツリーの上部にあるプロジェクト項目を右クリックし、「新規」»「ターゲットとデバイス…」を選択します

図3. LabVIEWプロジェクトで新しいターゲットを作成する
  1. このダイアログでは、ネットワーク上のシステムを検出したり、オフラインシステムを追加したりできます。 Real-Time CompactRIOフォルダーを展開し、cRIO-904xシステムを選択して、[OK]をクリックします。注:システムがリストにない場合、LabVIEWはネットワーク上でシステムを検出できませんでした。 Measurement&Automation Explorerで、システムが有効なIPアドレスで適切に構成されていることを確認してください。システムがリモートサブネット上にある場合は、IPアドレスを手動で入力することもできます。

図4. LabVIEWでリアルタイムCompactRIOを検索する
  1. 熱電対-連続入力.viをLabVIEWプロジェクトに追加するには、cRIO-904xターゲットを右クリックし、[追加] >> [ファイル]を選択します。これにより、ファイルエクスプローラーが開きます。
 
NI-DAQmxの例は、デフォルトでにインストールされ、次の場所にあります。
C:\Program Files(x86)\National Instruments\LabVIEW <xxxx>\examples\DAQmx
(64ビットOSでは、デフォルトのファイルパスはC:\Program Files\National Instruments\LabVIEW <xxxx>\examples\DAQmx になります)

図5. 熱電対-連続入力.viのファイル位置
 
  1. リアルタイム(NI-DAQmx)モードで実行するため、熱電対-連続入力.viで制御するモジュールをReal-Time Resourcesプロジェクト項目の下に移動します。その後、プログラミングモードの変更が反映されるようターゲットをデプロイします。

図6. LabVIEWプロジェクトの階層
  1. VIを開き、適切なモジュールとチャネルの物理チャネル制御/定数を構成します。注意:NI-9211使用する場合、このサンプルVIでデフォルトに設定されているサンプルレート(=1000 Hz)より低いレートを設定する必要があります。
  2. ブロックダイアグラムを開きます。ブロックダイアグラムの[タイミング設定]セクションに移動します。
  3. DAQmxタイミングプロパティノードケースストラクチャの間にDAQmxロギングを構成(TDMS)VIを実装します。タスクとエラーワイヤがDAQmxロギングを構成(TDMS)VIを通過していることを確認します。
  4. ロギングモード端子を右クリックし、「作成」>>「定数」を選択します。定数は、ログして読み取りに設定されていることを確認してください。
  5. ファイルパス端子を右クリックし、[作成] >> [定数]を選択します。ファイルパスを参照する方法については、「CompactRIOリアルタイムスキャンモードの使用」セクションのステップ23を参照してください。
  6. DAQmxロギングを構成(TDMS)VIが次のように表示されることを確認します。

図7. サンプルVIに必要な編集
  1. フロントパネルに移動して、アプリケーションを実行します。
  2. データの表示とログ記録が終了したら、[停止]ボタンをクリックします。このドキュメントの「ダウンロード/添付ファイル」セクションから解答例として作成されたプログラムをダウンロードできます。
II. LabVIEWFPGAインターフェースモードの使用
LabVIEW FPGAインターフェースモードは、CompactRIOのオンボードFPGAを利用して、パフォーマンスと時間的確定性を向上させることができます。このページのダウンロード/添付ファイルセクションからはcRIO-9074でNI-9205を使用し、温度を記録するサンプルプロジェクトを入手することができます。プロジェクトは、以下に示すように2つのVIで構成されています。

図8. LabVIEWプロジェクトの階層例
FPGA VIRT VI間の通信にはDMA FIFOを使用します。リアルタイムプロセッサで実行されているRT VIFPGA VIで生成されたデータを読み取るには、以下のブロックダイアグラムの通り、DMA FIFOを介して値を読み取ります。 RT VIがオンボードFPGAから受信した温度値を読み取って保存する方法を理解するには、サンプルプロジェクトを参照してください。

図9. FPGA VIのブロックダイアグラム

III。 CompactRIOリアルタイムスキャンモードの使用
このセクションでは、スキャンモードを使用してCompactRIOで基本的なログアプリケーションを作成する方法について説明します。予め、コントローラ、シャーシ、CシリーズI / OモジュールなどのCompactRIOシステムに必要な項目を含む新規LabVIEWプロジェクトを用意してください。このチュートリアルでは、NI9211熱電対入力モジュールを使用しますが、この手順はどのアナログ入力モジュールでも実行できます。このページのダウンロード/添付ファイルセクションから解答例として作成されたプログラムをダウンロードすることもできます。
:NIは、リアルタイムスキャン(I / O変数)モードよりもリアルタイム(NI-DAQmx)モードを推奨しています。
  1. 左上隅にある[ファイル] → [保存]を選択して、プロジェクトを保存します。
  2. 「Basic logging with scan mode」と名前を入力し、[ OK ]をクリックしてダイアログウィンドウを閉じます。

図10.Basic logging with scan modeを保存する
  1. プロジェクト内のCompactRIOコントローラーを右クリックし、[新規] → [VI]を選択して、VIを作成します。 VIをRT.viとして保存します。このプロジェクトは、CompactRIOコントローラで実行されるRT VIが1つだけ含まれる構成となります。

図11. 追加されたCompactRIOコントローラーの下に新しいVIを作成します
  1. 以下に示すように、RT.viブロックダイアグラムに3つのフレームを持つフラットシーケンスストラクチャを配置します。このアプリケーションの基本的な操作には、起動、実行、シャットダウンの3つのルーチンが含まれます。フラットシーケンスストラクチャは、このルーチンの順序を適用する簡単な方法です。

図12. LabVIEWのフラットシーケンスストラクチャ
  1. シーケンスストラクチャの実行フレームにタイミングループを追加します。タイミングループは、作成したコードをさまざまなタイムベースに同期する機能を提供します。

図13.タイミングループを備えたLabVIEWのフラットシーケンスストラクチャ
  1. 左側の入力ノードの時計アイコンをダブルクリックして、タイミングループを構成します。

図14. 左上隅をダブルクリックして「タイミングループを構成」ダイアログを開きます
 
  1. ループタイミングソースとして[スキャンエンジンに同期]を選択します。
  2. [OK]をクリックします。これにより、タイミングループ内のコードが各I / Oスキャンの直後に1回実行され、このタイミングループで使用されるすべてのI / O値が最新の値になるようになります。

図15. スキャンエンジンをタイミングソースとして使用してタイミングループを構成する
 
  1. LabVIEWプロジェクトでCompactRIOコントローラを右クリックし、プロパティを選択します。
  2. 左側のカテゴリから[スキャンエンジン]を選択し、スキャン周期として100msを入力します。これにより、CompactRIOシステムのすべてのI / Oが100ms(10Hz)ごとに更新されます。ネットワーク共有値の更新周期も、このページから設定することもできます。このページでは、リモート監視とデバッグのためにI / O値をネットワークに公開する頻度を制御します。 [OK]をクリックします。

図16. スキャン周期を調整して更新レートを制御する
  1. モジュールの下にあるすべてのチャネルをクリックしてShiftキーを使用して選択し、次に示すように、RT.vi図のタイミングループにドラッグアンドドロップします。 CompactRIOスキャンモードを使用する場合、I / O変数をLabVIEWプロジェクトからブロックダイアグラムにドラッグアンドドロップするだけです。ログに記録するCompactRIOコントローラー、シャーシ、およびI / Oモジュールを展開します。

図17. CシリーズI / Oを時限ループにドラッグアンドドロップします
ヒント:LabVIEWツールバーのオブジェクト整列»左端オブジェクトの分散»垂直圧縮項目を使用して、ダイアグラム上のI / O変数を整理します。

図18. 左端と垂直圧縮を使用してオブジェクトを整列します
  1. 通常のwhileループを、ファイルI / Oタスクに使用される時限ループの下の実行フレームに配置します。ファイルI / Oには時間がかかり、時間がかかるため、I / O取得タスクとファイルI / Oタスクを分離する必要があります。この要件を無視すると、ファイルI / OがI / Oスキャンよりも長くかかり、サンプルが失われる可能性があるため、データが失われる可能性があります。
通常のwhileループでデータをディスクに書き込むには、リアルタイムFIFOを使用して時限ループからI / O値を転送する必要があります。これにより、2つのループ間にバッファーが提供されます。時限ループが実行され、I / Oスキャンが同期され、毎回新しいI / O値がバッファに書き込まれます。次に、通常のwhileループがデータをバッファーから読み取り、ディスクに書き込みます。このようにI / Oタスクとディスクアクセスを分離することで、時間指定ループを「リアルタイム」パフォーマンスで実行できます。つまり、常に時間どおりに終了します。

図19. toループを使用して、ログデータがI / Oサンプリングレートを低下させないようにする


図20. I / Oにアクセスするリアルタイムタスクと優先度の低いタスクログデータ
  1. LabVIEWプロジェクトで、CompactRIOコントローラを右クリックし、 「新規」→「変数」を選択します。

図21. LabVIEWプロジェクトに新しい変数を追加する
  1. 変数にデータバッファという名前を付け、変数タイプとして[単一プロセス]を選択します。
  2. データ型としてDoubleの配列を選択します。これにより、倍精度浮動小数点数の配列を含むローカルスコープの変数(ネットワーク公開なし)が作成されます。

図22. 変数プロパティを使用して変数とデータ型を定義する
  1. 次に、左側のメニューからRTFIFOを選択します。
  2. [RT FIFOカテゴリ]を選択した状態で、[ RT FIFOを有効にする]チェックボックスをオンにし、[FIFOタイプ]に[マルチエレメント]を選択します。
  3. 配列の数に50を入力し、要素の数に4を入力します(4以外のチャネルの数をログに記録する場合は、代わりにそれを入力します)。これにより、変数がリアルタイムセーフFIFOとして動作するように構成されます。リアルタイムタスクと優先度の低いタスクの間のデータバッファとして機能できます。 FIFOは、それぞれが4つの倍精度数を含む51の1次元配列を保持します。 [ OK]をクリックします。

図23. 変数プロパティを使用してRTFIFOを有効にする
  1. データバッファRTFIFOを時限ループにドラッグアンドドロップし、 Build Array関数を使用して、I / O変数から配列を構築し、RTFIFOに渡します。

図24. データバッファをドラッグアンドドロップして、時限ループに配置します
  1. データバッファRTFIFOの追加コピーを通常のwhileループにドラッグアンドドロップします。ここで、データを読み取り、ディスクに記録します。
  2. RT FIFOを右クリックし、[ Show Timeout]を選択して、 100のタイムアウトを配線します。これにより、RT FIFOは、タイムアウトする前に、新しいデータがバッファに到着するまで最大100ミリ秒待機します。データがバッファに存在する場合、RTFIFOはバッファ内の最も古いデータをすぐに返します。

図25 。データバッファの追加コピーをドラッグアンドドロップします
  1. シーケンス構造のスタートアップフレームにTDMSOpenVIを配置します。
  2. ファイルパス操作入力の定数を作成します。ファイルパスにc:\ tempdata.tdmsと入力し、操作の作成または置換を選択します。 CompactRIOコントローラーが別のリアルタイムOSを実行している場合は、以下に示す適切なファイルパスを選択してください。詳細については、 リアルタイムコントローラーとリアルタイムオペレーティングシステムの互換性を参照してください。

図26. 使用するCompactRIOコントローラーに応じて正しいファイルパスを使用する
  1. ここからダウンロードするか、以下のVIスニペットをWebブラウザーからダイアグラムにドラッグアンドドロップして、ファイルI / Oを実行します。
  2. このコードを通常のwhileループに配置し、以下に示すように配線します。ケース構造は、RT FIFOがタイムアウトしない場合にのみコードのこのセクションを実行するために使用され、新しいデータがバッファーから返されたことを示します。次に、データはTDMSファイルに書き込まれるようにフォーマットされ、波形チャートに表示されます。停止条件としてエラーをチェックすることに加えて、whileループの停止ボタンも提供されます。

このVIスニペットをVIのブロック図にドラッグします


図27.シャットダウンなしのログコード
  1. LabVIEWプロジェクトで、自動的に作成され、データバッファ変数を含む既存のライブラリを右クリックし、 「新規」→「変数」を選択して別の共有変数を作成します。
  2. 変数にstopという名前を付け、[ Single Process]を選択して、[ Boolean]を選択します。左側のRTFIFOカテゴリを選択します。

図28. 単一プロセスを選択し、データ型としてブール値を使用する
  1. [ RT FIFOを有効にする]を選択し、[単一要素]を選択したままにして、[ OK ]をクリックします。これにより、リアルタイムのパフォーマンスを必要とするタスクで安全に読み取ることができる変数が作成されます。
  2. 停止変数のコピーを時限ループに配置し、停止条件に配線します
  3. 停止変数の別のコピーを通常のwhileループに配置し、図のようにOR関数の結果を書き込みます。これにより、通常のwhileループが停止すると、時限ループが停止します。
  4. シャットダウンフレームにTDMSクローズ機能を配置し、ファイル参照とエラークラスターをそこに配線します。また、TDMSクローズエラー出力ターミナルから作成して表示します。完成したアプリケーションは、次の画像のようになります。

図29. 完成したLabVIEWブロック図
  1. [RT.viで実行]をクリックし、保存されていないアイテムについては[保存]をクリックし、CompactRIOシステムへの変更の適用に関するダイアログまたは警告で[ OK ]をクリックします。 LabVIEWは、VI over Ethernetを導入して、CompactRIOシステムに組み込まれて実行します。
  2. VIが展開されて実行が開始されたら、VIのフロントパネルを表示して、波形チャートにプロットされている現在のI / O値を確認します。

図30. ログデータを表示する完成したLabVIEWフロントパネル
  1. データの表示とログ記録が終了したら、[停止]をクリックします。
おめでとう!これで、LabVIEWとCompactRIOを使用して組み込みロギングアプリケーションが正常に作成されました。学習を続けるには、LabVIEWとCompactRIOを使用した組み込みプログラミングのページで追加のリソースを確認してください。
 

ログに記録されたデータへのアクセス

CompactRIOシステムに記録されたデータを取得して表示するには、これらの手順を実行します。システムにFTPサーバーがインストールされていない場合、CompactRIOはWebDAV(Web分散オーサリングおよびバージョン管理)もサポートします。これは、標準のWebブラウザを使用してファイルを交換するための安全な代替手段です。詳細については、 WebDAVを使用したリアルタイムターゲットとの間のファイル転送を参照してください。
  1. WindowsエクスプローラーまたはWebブラウザーを使用して、ftp:// <ipアドレス>に移動します。ここで、<ipアドレス>はCompactRIOシステムのIPアドレスです。
  2. tempdata.tdms(またはTDMSファイルに名前を付けたもの)をダウンロードします
  3. Microsoft Excelを使用している場合は、[アドイン]タブを選択し、[ TDMインポーター]をクリックして、TDMSファイルを表示できます。ワークブックの最初のページにはファイル情報が含まれ、残りのシートにはチャネルデータが含まれています。 TDMインポーターはデフォルトでLabVIEWとともにインストールされます。ただし、TDMインポーターが存在しない場合は、ここからインストールできます

図31. tdmsファイルをExcelで直接開くには、TDMインポーターをインストールします
  1. Excelがない場合は、LabVIEWのTDMSファイルビューアVIを使用してTDMSファイルを表示できます。