このリファレンスガイドでは、従来型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 (レガシー) とNI-DAQmxの違いを示しています。従来型NI-DAQ (レガシー) で作成されたプログラムをNI-DAQmxに移行するには、以下の手順に従います。
AI Config.vi
をDAQmx Create Channel.vi
に置き換えます。DAQmx Create Channel.vi
を構成します。DAQmx Create Channel.vi
はすべてのタイプの収集に使用できる多態性VIであるため、この情報を設定する必要があります。これは、さまざまなタイプの収集に異なるVIが使用される従来型NI-DAQ (レガシー) とは違います。「DAQmx仮想チャンネルを作成」VI
の後にDAQmx Timing.vi (「DAQmxタイミング」VI)
を挿入します。「DAQmxタイミング」VI
でサンプリングレートを設定し、連続収集用のバッファを作成します。連続収集を指定すると、LabVIEWによってバッファが自動的に作成され、バッファを使用した収集が利用可能になります。AI Start.vi
をDAQmx Start Task.vi (「DAQmxタスクを開始」VI)
に置き換えます。これらのVIは機能的に類似しています。この2つの最も大きな相違点は、NI-DAQmxでは収集開始時にサンプリングレートが設定されず、「DAQmxタイミング」VI
で設定することです。AI Read.vi
をDAQmx Read.vi (「DAQmx読み取り」VI)
に置き換えます。「DAQmx読み取り」VI
をアナログ→複数チャンネル→複数サンプル→1D波形に構成します。AI Clear.vi
をDAQmx Clear Task.vi (「DAQmxタスクをクリア」VI)
に置き換えます。このVIに対する入力は同じで、同じ機能を実行します。
このサンプルでは、連続アナログ出力を実行する場合に、従来型NI-DAQ (レガシー) とNI-DAQmxの違いを示しています。従来型NI-DAQ (レガシー) で作成されたプログラムをNI-DAQmxに移行するには、以下の手順に従います。
AO Config.vi
を「DAQmx仮想チャンネルを作成」VI
に置き換えます。Compute Waveform.vi
を、これとよく似たWaveform Buffer Generation.vi
に置き換えます。相違点としては、従来型NI-DAQ (レガシー) のほうでは、「Compute Waveform」VIでエラー処理ができませんでしたが、この新しいVIではタスクとエラー処理を配線することができます。AO Write.vi
をDAQmx Timing.vi (「DAQmxタイミング」VI)
およびDAQmx Write.vi (「DAQmx書き込み」VI)
に置き換えます。「DAQmxタイミング」VI
を構成します。「DAQmxタイミング」VI
をサンプリングクロックのために構成する場合、使用するサンプリングモードのほかにクロックソースも指定します。「DAQmx書き込み」VI
をアナログ→1チャンネル→複数サンプル→波形に構成します。AO Start.vi
をDAQmx Start Task.vi (「DAQmxタスクを開始」VI)
に置き換えます。この2種類のVIには類似する入力と出力があり、概して同等の機能を実行します。AO Write.vi
をDAQmx Is Task Done.vi (「DAQmxタスク完了確認」VI)
に置き換えます。このサンプルでは連続生成を利用しているため、フロントパネルで停止ボタンを押すまでタスクが完了しません。そのため、「DAQmxタスク完了確認」VI
の使用は必須ではありません。ただし、有限生成を実行している場合、このVIで処理の終了を知らせることが不可欠です。AO Clear.vi
をDAQmx Clear Task.vi (「DAQmxタスクをクリア」VI)
に置き換えます。これらのVIは、両方とも同じ機能を実現します。
上記のサンプルは、デジタルポートへの書き込みにおける従来型NI-DAQ (レガシー) とNI-DAQmxとの場合の違いを示しています。従来型NI-DAQ (レガシー) で作成されたプログラムをNI-DAQmxに移行するには、以下の手順に従います。
DIO Port Config.vi
を「DAQmx仮想チャンネルを作成」VI
および「DAQmxタスクを開始」VI
に置き換えます。「DAQmx仮想チャンネルを作成」VI
をデジタル出力用に構成します。「DAQmx書き込み」VI
に置き換えます。デジタル→1チャンネル→1サンプル→U8 (ポート形式)
に構成します。このVIによって、すべてのデータの書き込みを処理します。「DAQmxタスクをクリア」VI
を配置し、プログラムに作成されたタスクをクリアします。
このサンプルは、連続パルス列生成における従来型NI-DAQ (レガシー) とNI-DAQmxとの場合の違いを示しています。従来型NI-DAQ (レガシー) で作成されたプログラムをNI-DAQmxに移行するには、以下の手順に従います。
Counter Group Config.vi
を「DAQmx仮想チャンネルを作成」VI
に置き換えます。「DAQmx仮想チャンネルを作成」VI
をカウンタ出力→パルス生成→周波数に構成します。「DAQmx仮想チャンネルを作成」VI
で設定されるため、Set Pulse Specs.vi
は必要ありません。Counter Gate (STC).vi
をDAQmxトリガプロパティノードに置き換えます。このプロパティノードでトリガタイプをデジタルレベルに設定し、フロントパネルでトリガソース (ゲート) を選択するための制御器を作成します。「DAQmxタイミング」VI
を挿入します。「DAQmxタイミング」VI
を「指定なし」 (カウンタ) に構成します。このVIによって、パルス生成時間の長さを明示します。「DAQmxタイミング」VI
の後に追加します。この場合、タイミングプロパティノードでオンボードクロックを指定し、必要があれば外部クロックを構成します。これに対して、従来型NI-DAQ (レガシー) のサンプルではケースストラクチャを利用しています。Counter Control.vi
を「DAQmxタスク完了確認」VI
に置き換えます。このVIの目的は、いつ有限生成が終了したかを確認することです。このサンプルは連続的処理を実行するため、「DAQmxタスク完了確認」VI
を省略できます。ただし、有限生成を実行する場合はこのVIを含める必要があります。Counter Control.vi
を「DAQmxタスクをクリア」VI
に置き換えます。指定しなくてもタスクが自動的にリセットする点を除いて、この新しいVIに対する入力は類似しています。
このサンプルは、653XボードとEシリーズボードとの同期方法を示しています。653XのREQクロックは、Eシリーズボードのアナログ入力収集でサンプリングクロックとして使用されます。ここでは、従来型NI-DAQ (レガシー) とNI-DAQmxを使用した場合を示します。このサンプルでは、2つのドライバの柔軟性と相互運用性を示すとともに、NI-DAQmxではRTSIの使用方法が非常に明快になっていることがわかります。どちらのサンプルでも、デジタルボードで従来型NI-DAQ (レガシー) ドライバを使用しています。そのため、ここではEシリーズボードで実行しているコードセグメントを変換する方法のみを説明します。
AI Config.vi
をDAQmx Create Channel.vi
に置き換えます。DAQmx Create Channel.vi
を構成します。AI Clock Config.vi
を「DAQmxタイミング」VI
に置き換えます。連続収集するため、「DAQmxタイミング」VI
によってサンプリングレートを設定し、バッファを作成します。連続収集が設定されているので、バッファは自動的に割り当てられます。このVIに対する重要な入力の1つはソースです。デフォルトのオンボードクロックを使用する場合、入力を空欄のままにします。ただし、このサンプルでは定数を作成して、デジタルボードから経路設定されているRTSIピンを使用するように設定します (この場合は/Dev1/RTSI0)。この名前では、異なるデバイス番号を指定できることにご注意ください。NI-DAQmxによって内部の経路がすべて設定されるため、このことは重要です。AI Control.vi
を、機能的に類似している「DAQmxタスクを開始」VI
に置き換えます。AI Read.vi
をDAQmx Read.vi (「DAQmx読み取り」VI)
に置き換えます。「DAQmx読み取り」VI
をアナログ→1チャンネル→複数サンプル→1D波形に構成します。「DAQmx読み取り」VI
はすべてのタイプのデータ収集に使用する多態性VIであるため、この情報を提供する必要があります。これに対し、従来型NI-DAQ (レガシー) では、さまざまなタイプの収集に対応する固有のVIが数多くあります。AI Clear.vi
をDAQmx Clear Task.vi (「DAQmxタスクをクリア」VI)
に置き換えます。このVIに対する入力は同じで、同じ機能を実行します。