LabVIEW従来NI-DAQ (レシー) からNI-DAQmx移行する

概要

このリファレンスガイドでは、従来型NI-DAQ (レガシー) で作成したアプリケーションをNI-DAQ™mxへ移行する方法について、デモ形式で説明します。このドキュメントの目的は、2種類のデータ収集 (DAQ) ドライバの主な違いを示し、NI-DAQmxのプログラミングで役に立つ一般的なヒントを紹介することです。

内容

概要

NIは、従来型NI-DAQ (レガシー) で記述された古いVIを参考にしながら、新しいVIで作業を開始することを推奨しています。プログラミング手法の多くは類似していますが、わずかな違いもあるため、その場合はこのドキュメント中で指摘します。このドキュメントは、他のヘルプドキュメントを補足するものであり、ヘルプに代わるものではありませんのでご注意ください。このドキュメントの内容を理解することで、NI-DAQmxでプログラミングする際に留意すべき、従来型NI-DAQ (レガシー) との主な違いが明確になります。

NIでは、ゼロからコードを記述することを推奨しています。そのため、ここではできる限り移行を簡単にするためのガイドラインとヒントをいくつか取り上げます。LabVIEW 7.0以降のバージョンでは、DAQアシスタントという便利なツールが用意されています。このツールを使用すると、コードによって実行したいタスクをMeasurement & Automation Explorer (MAX) で指定し、そのタスクに基づいたコードを生成できます。  コードを生成した後で、実際の用途に応じてプロパティノードを追加したり、構成を変更したりしてコードを編集することができます。DAQアシスタントの使用法についての詳細は、LabVIEWヘルプの『LabVIEWでのNI-DAQmx計測』を参照してください。

この2種類のドライバの大きく異なる点の1つは、パレットです。従来型NI-DAQ (レガシー) には、操作のタイプごとに異なるパレットがあります。たとえば、デジタル操作に対応するデジタルパレット、アナログ入力操作全般に対応するアナログ入力パレットなどがあります。NI-DAQmxには、複数のVIから成るセットが1つだけあり、これによってすべての操作に対応します。各VIを構成することで、特定のタイプの収集に対応できます。たとえば、従来型NI-DAQ (レガシー) では、AI Config.viを使用してアナログ入力用に1つまたは複数のチャンネルを構成します。NI-DAQmxでは、DAQmx Create Channel.viを使用し、このVIをアナログ入力:電圧用に構成します。この違いを知っておくと、さまざまな操作を実行する上で実際に必要となるVIに早く慣れることができます。 

アナログ入力

従来型NI-DAQ (レガシー) でのLabVIEWによる連続収集とグラフ
(クリックして拡大)

図1. 従来型NI-DAQ (レガシー):Cont Acq&Graph (buffered).vi

DAQmxでのLabVIEWによる連続収集とグラフ
(クリックして拡大)

図2. NI-DAQmx:Cont.Acq&Graph Voltage-Int Clk.vi


この例では、内部クロックを使用して連続アナログ入力を実行する場合の、従来型NI-DAQ (レガシー) とNI-DAQmxの違いを示しています。従来型NI-DAQ (レガシー) で作成されたプログラムをNI-DAQmxに移行するには、以下の手順に従います。

 

  1. まず、AI Config.viDAQmx Create Channel.viに置き換えます。
  2. VIアナログ入力 >> 電圧の下にあるドロップダウンから選択して、電圧用にDAQmx Create Channel.viを構成します。DAQmx Create Channel.viはすべてのタイプの収集に使用できる多態性VIであるため、この情報を設定する必要があります。これは、さまざまなタイプの収集に異なるVIが使用される従来型NI-DAQ (レガシー) とは違います。
  3. フロントパネル上で制御器を作成し、データタイプが互いに関連付けられるようにします。デバイス番号とチャンネル名の制御器は存在しないことにご注意ください。これらは、物理チャンネルという1つの制御器にまとめられています。このVIには、ほかの構成可能な入力として「入力端子構成」があります。デフォルトで、このボードは自動的に差動 (DIFF) モードになります。基準モードはMAXで設定しません。基準化シングルエンド (RSE) または非基準化シングルエンド (NRSE) で測定するには、ここで指定する必要があります。
  4. 次に、「DAQmx仮想チャンネルを作成」VIの後にDAQmx Timing.vi (「DAQmxタイミング」VI) を挿入します。「DAQmxタイミング」VIでサンプリングレートを設定し、連続収集用のバッファを作成します。連続収集を指定すると、LabVIEWによってバッファが自動的に作成され、バッファを使用した収集が利用可能になります。
  5. AI Start.viDAQmx Start Task.vi (「DAQmxタスクを開始」VI) に置き換えます。これらのVIは機能的に類似しています。この2つの最も大きな相違点は、NI-​DAQmxでは収集開始時にサンプリングレートが設定されず、「DAQmxタイミング」VIで設定することです。
  6. AI Read.viDAQmx Read.vi (「DAQmx読み取り」VI) に置き換えます。
  7. 「DAQmx読み取り」VIアナログ→複数チャンネル→複数サンプル→1D波形に構成します。
  8. 定数、制御器、表示器を作成し、それぞれを適切な端子に接続します。
  9. AI Clear.viDAQmx Clear Task.vi (「DAQmxタスクをクリア」VI) に置き換えます。このVIに対する入力は同じで、同じ機能を実行します。

アナログ出力

従来型NI-DAQ (レガシー) でのLabVIEWによる内部クロックの連続生成
(クリックして拡大)

図3. 従来型NI-DAQ (レガシー):Continuous Generation IntClk.vi


(クリックして拡大)

図4. NI-DAQmx:Cont Gen Voltage Wfm-Int Clk.vi

 

このサンプルでは、連続アナログ出力を実行する場合に、従来型NI-DAQ (レガシー) とNI-DAQmxの違いを示しています。従来型NI-DAQ (レガシー) で作成されたプログラムをNI-DAQmxに移行するには、以下の手順に従います。

  1. まず、AO Config.vi「DAQmx仮想チャンネルを作成」VIに置き換えます。
  2. 必要なすべての制御器を作成し、各データタイプが一致するようにします。従来型NI-DAQ (レガシー) では2つの異なる制御器が必要ですが、NI-DAQmxでは物理チャンネル入力によってデバイス番号とチャンネル番号を指定します。
  3. Compute Waveform.viを、これとよく似たWaveform Buffer Generation.viに置き換えます。相違点としては、従来型NI-DAQ (レガシー) のほうでは、「Compute Waveform」VIでエラー処理ができませんでしたが、この新しいVIではタスクとエラー処理を配線することができます。
  4. AO Write.viDAQmx Timing.vi (「DAQmxタイミング」VI) およびDAQmx Write.vi (「DAQmx書き込み」VI) に置き換えます。
  5. サンプリングクロックに「DAQmxタイミング」VIを構成します。「DAQmxタイミング」VIをサンプリングクロックのために構成する場合、使用するサンプリングモードのほかにクロックソースも指定します。
  6. 「DAQmx書き込み」VIアナログ→1チャンネル→複数サンプル→波形に構成します。
  7. 必要な入力を作成して、各データタイプが同じであることを確認します。
  8. AO Start.viDAQmx Start Task.vi (「DAQmxタスクを開始」VI) に置き換えます。この2種類のVIには類似する入力と出力があり、概して同等の機能を実行します。
  9. Whileループ内で、AO Write.viDAQmx Is Task Done.vi (「DAQmxタスク完了確認」VI) に置き換えます。このサンプルでは連続生成を利用しているため、フロントパネルで停止ボタンを押すまでタスクが完了しません。そのため、「DAQmxタスク完了確認」VIの使用は必須ではありません。ただし、有限生成を実行している場合、このVIで処理の終了を知らせることが不可欠です。
  10. AO Clear.viDAQmx Clear Task.vi (「DAQmxタスクをクリア」VI) に置き換えます。これらのVIは、両方とも同じ機能を実現します。

デジタル出力

従来型NI-DAQ (レガシー) でのLabVIEWによるデジタルポートへの書き込み
(クリックして拡大)

図5. 従来型NI-DAQ (レガシー):Write to 1 Dig Port.vi


DAQmxでのLabVIEWによるデジタルポートへの書き込み
(クリックして拡大)

図6. NI-DAQmx:Write Dig Port.vi


上記​の​サンプル​は、​​デジタル​ポート​への​書き込みにおける従来​型​NI-​DAQ (レ​ガ​シー) と​NI-​DAQmxとの​場合​の​違い​を​示し​ています。従来型NI-DAQ (レガシー) で作成されたプログラムをNI-DAQmxに移行するには、以下の手順に従います。

  1. まず、DIO Port Config.vi「DAQmx仮想チャンネルを作成」VIおよび「DAQmxタスクを開始」VIに置き換えます。
  2. 「DAQmx仮想チャンネルを作成」VIをデジタル出力用に構成します。
  3. 制御器を作成し、各制御器のデータタイプが一致することを確認します。
  4. ポート制御器を作成する場合、特定のライン番号だけでなくポート全体を指定します。
  5. 次にWhileループ内で、待機関数と停止ボタンを除くすべてを「DAQmx書き込み」VIに置き換えます。
  6. 「DAQmx書き込み」VIデジタル→1チャンネル→1サンプル→U8 (ポート形式) に構成します。このVIによって、すべてのデータの書き込みを処理します。
  7. Whileループの外側に「DAQmxタスクをクリア」VIを配置し、プログラムに作成されたタスクをクリアします。

カウンタパルス列生成

従来型NI-DAQ (レガシー) でのLabVIEWによるパルス列の生成
(クリックして拡大)

図7. 従来型NI-DAQ (レガシー):Generate Pulse Train (DAQ-STC).vi


DAQmxでのLabVIEWによるデジタルパルス列の生成
(クリックして拡大)

図8. NI-DAQmx:Gen Dig Pulse Train-Continuous-Pause Trigger.vi


このサンプルは、連続パルス列生成における従来​型​NI-​DAQ (レ​ガ​シー) と​NI-​DAQmxとの​場合​の​違い​を​示し​ています。従来型NI-DAQ (レガシー) で作成されたプログラムをNI-DAQmxに移行するには、以下の手順に従います。

  1. まず、Counter Group Config.vi「DAQmx仮想チャンネルを作成」VIに置き換えます。
  2. 「DAQmx仮想チャンネルを作成」VIカウンタ出力→パルス生成→周波数に構成します。
  3. デューティーサイクル、周波数、カウンタ、アイドル状態の各制御器を作成します。カウンタ制御器によって、使用するデバイスとカウンタを指定します。アイドル状態の入力によって、カウンタを開始するときの状態と、パルス列の完了後にカウンタが戻るときの状態を知らせます。これらの値は「DAQmx仮想チャンネルを作成」VIで設定されるため、Set Pulse Specs.viは必要ありません。
  4. Counter Gate (STC).viDAQmxトリガプロパティノードに置き換えます。このプロパティノードでトリガタイプをデジタルレベルに設定し、フロントパネルでトリガソース (ゲート) を選択するための制御器を作成します。
  5. DAQmxトリガプロパティノードの後に「DAQmxタイミング」VIを挿入します。「DAQmxタイミング」VIを「指定なし」 (カウンタ) に構成します。このVIによって、パルス生成時間の長さを明示します。
  6. DAQmxタイミングプロパティノードを「DAQmxタイミング」VIの後に追加します。この場合、タイミングプロパティノードでオンボードクロックを指定し、必要があれば外部クロックを構成します。これに対して、従来型NI-DAQ (レ​ガ​シー) のサンプルではケースストラクチャを利用しています。
  7. Whileループ内で、Counter Control.vi「DAQmxタスク完了確認」VIに置き換えます。このVIの目的は、いつ有限生成が終了したかを確認することです。このサンプルは連続的処理を実行するため、「DAQmxタスク完了確認」VIを省略できます。ただし、有限生成を実行する場合はこのVIを含める必要があります。
  8. Counter Control.vi「DAQmxタスクをクリア」VIに置き換えます。指定しなくてもタスクが自動的にリセットする点を除いて、この新しいVIに対する入力は類似しています。

RTSIした共有クロック (従来NI-DAQ (レシー) およびNI-DAQmx相互運用性)

従来型NI-DAQ (レガシー) でのLabVIEWによるクロックの共有
(クリックして拡大)

図9.従来型NI-DAQ (レガシー):Share 653x REQ Clock with E Series AI Sample Clock.vi

 

DAQmx LabVIEW共有クロック
(クリックして拡大)

図10. NI-DAQmx:Share 653x REQ Clock with E Series AI Sample Clock.vi


このサンプルは、653XボードとEシリーズボードとの同期方法を示しています。653XのREQクロックは、Eシリーズボードのアナログ入力収集でサンプリングクロックとして使用されます。ここでは、従来型NI-DAQ (レガシー) とNI-DAQmxを使用した場合を示します。このサンプルでは、2つのドライバの柔軟性と相互運用性を示すとともに、NI-DAQmxではRTSIの使用方法が非常に明快になっていることがわかります。どちらのサンプルでも、デジタルボードで従来型NI-DAQ (レガシー) ドライバを使用しています。そのため、ここではEシリーズボードで実行しているコードセグメントを変換する方法のみを説明します。

  1. まず、AI Config.viDAQmx Create Channel.viに置き換えます。
  2. VIアナログ入力 » 電圧のドロップダウンから選択して、電圧用にDAQmx Create Channel.viを構成します。
  3. フロントパネルで制御器および必要な定数を作成します。
  4. AI Clock Config.vi「DAQmxタイミング」VIに置き換えます。連続収集するため、「DAQmxタイミング」VIによってサンプリングレートを設定し、バッファを作成します。連続収集が設定されているので、バッファは自動的に割り当てられます。このVIに対する重要な入力の1つはソースです。デフォルトのオンボードクロックを使用する場合、入力を空欄のままにします。ただし、このサンプルでは定数を作成して、デジタルボードから経路設定されているRTSIピンを使用するように設定します (この場合は/Dev1/RTSI0)。この名前では、異なるデバイス番号を指定できることにご注意ください。NI-DAQmxによって内部の経路がすべて設定されるため、このことは重要です。
  5. AI Control.viを、機能的に類似している「DAQmxタスクを開始」VIに置き換えます。
  6. AI Read.viDAQmx Read.vi (「DAQmx読み取り」VI) に置き換えます。
  7. 「DAQmx読み取り」VIアナログ→1チャンネル→複数サンプル→1D波形に構成します。「DAQmx読み取り」VIはすべてのタイプのデータ収集に使用する多態性VIであるため、この情報を提供する必要があります。これに対し、従来型NI-DAQ (レガシー) では、さまざまなタイプの収集に対応する固有のVIが数多くあります。
  8. AI Clear.viDAQmx Clear Task.vi (「DAQmxタスクをクリア」VI) に置き換えます。このVIに対する入力は同じで、同じ機能を実行します。

LabVIEWNI-DAQmx使用するときのヒントテクニック

  • 基本的なDAQプログラミング (アナログ入出力、デジタル入出力) が、NI-DAQmxでは簡素化および合理化されています。すべてのDAQプログラムに対して基本ストラクチャは1つだけ存在し、同じセットのVI群が使用されます。従来型NI-DAQ (レガシー) では、各タイプの入出力に対して別々のセットのVI群が使用されていました。
  • カウンタ、トリガ、タイミング、同期などの高度の概念によるプログラミングでは、従来型NI-DAQ (レガシー) でのプログラミング思考から切り替える必要があります。NI-DAQmxである種の高度な機能を実現しようとする場合、プロパティノードを使用する必要があります。プロパティ名は「クロックソースプロパティ」など記述的にして、サンプルクロックとして使用する信号端子を指定します。詳細については「DAQmx入門:DAQmxプロパティノードの基本」を参照してください。
  • NI-DAQmxで概に作成されたサンプルを確認する作業から始めます。
  • 従来型NI-DAQ (レガシー) で作成したコードを変換することはお勧めしません。その代わりゼロからスタートし、DAQアシスタントを使用して測定タスクを構成し、そのタスクのコードを自動生成します。コードを生成することで、基本機能のセットアップ方法が確認できるため便利です。注意が必要なのは、サブVIに構成コードがあって、メインVIのフロントパネルでこの制御器を必要とする場合、メインVIへその構成コードをコピー&ペーストする必要があることです。このようにして、さらに多くの機能とVIを、自動生成したコードに追加することができます。
  • NI-DAQmxでは、端子名と信号名の多くが変更されています。これによって、どのNIハードウェア/ソフトウェア製品でもすぐに名前がわかるようになっており、一貫性が保たれています。これらの名前や用語の変更については、「Sampling Terminology for NI-DAQmx and Tranditional NI-DAQ (Legacy)」に説明があります。
  • NI-DAQmxのプログラミングにおいて最も基本的なことは、タスクを作成し、読み取りまたは書き込みを実行することです。タスクとは、機能が追加された仮想チャンネルのことです。たとえば、タイミング、トリガ、スケールなどのカスタム構成がこうした機能に含まれます。仮想チャンネルは、従来型NI-DAQ (レガシー) では単に追加の機能でしたが、NI-DAQmxでは不可欠な要素です。タスク​と​仮想​チャンネル​の​詳細​について​は、NI-DAQmxに付属の『NI-DAQmxヘルプ』を参照してください。

Was this information helpful?

Yes

No