LabVIEWNI-DAQmxによるアナログ入力Cシリーズモジュール信号ベース同期

概要

CompactDAQコントローラおよびシャーシは、加速度、温度、歪みなどといった様々なタイプの計測に適した種類豊富なCシリーズI/Oモジュールに対応しています。各計測の間で正確な同期が必要なアプリケーションの場合、CompactDAQハードウェアをNI-DAQmx APIとともに使用すれば、柔軟な構成が可能になり、複数のCシリーズI/Oモジュール間で望ましい同期レベルを実現できるようになります。このドキュメントでは、CシリーズI/Oモジュール間の同期を実現するための信号ベースのオプションについて説明します。

内容

Cシリーズアナログ入力モジュール

Cシリーズアナログ入力モジュールは、同期に基づいて、基準クロック、デルタシグマ、低速サンプリング、逐次比較レジスタ (SAR) の4つのグループに分類できます。基準クロックモジュールは内部オンボードクロックを使用して変換を行います。このオンボードクロックは、別の内部クロックへの位相ロックループを使用して調整するか、またはモジュール外部のクロックで調整される場合もあります。デルタシグマモジュールは、モジュールの内部クロックを使って、24ビットADCで変換を行います。低速サンプリングモジュールは、24ビットADCを使用し、CompactDAQコントローラまたはシャーシから発生する外部クロックを使用して変換します。最後に、SARモジュールは逐次比較型ADC (12ビットまたは16ビット) を使用し、外部クロックを使用して変換します。同期を行う方法は、そのモジュールがどのカテゴリに当てはまるかによって決まります。モジュールの分類一覧は、このチュートリアルの関連情報セクションに記載しています。このチュートリアルでの同期とは、同時に計測を開始し、その後の計測間のドリフトを除去するためにDAQmxドライバを介して直接または間接的に使用するステップまたはテクニックとして定義します。これらのステップの結果、サンプル間のアライメントを向上しますが、焦点はドリフトを防止することに置かれます。

時間ベース同期信号ベース同期

時間ベース同期と信号ベース同期は、Cシリーズモジュールで測定を同期するために使用できる2つの異なる同期手法です。このドキュメントでは、信号ベースの同期について説明します。タイムベースの同期の詳細については、「LabVIEWのNI-DAQmxによるアナログ入力Cシリーズモジュールのタイムベース同期」を参照してください。

  • 信号ベースの同期は、デバイス間で伝送された信号を介した同期です。トリガラインで発生するデジタルHIGHを待機するデバイスは、信号ベースの同期を使用しています。 
  • タイムベースの同期とは、デバイスの時刻を基準にスケジュールされたイベントを介した同期のことです。現地時間で午後5:00になるまで待機するデバイスは、タイムベースの同期を使用しています。
     

各同期方法にはそれぞれの利点があり、適切な同期方法はアプリケーションによって異なります。

開始トリガによる同期

このセクションでは、信号の収集を複数のモジュールで行う場合、開始のタイミングを制御する方法をいくつかご紹介します。ここでは複数のタスクが同時に開始されるよう調節する、最も基本的でシンプルな同期方法をご紹介します。

1つ目の方法は、ソフトウェア関数を使います。この関数を実行すると、1つのDAQmxタスクで定義されたとおりに収集が開始されます。この関数が各タスクでほぼ同時に実行されると、データ収集の開始においてソフトウェアレベルでの同期が見られます。

ハードウェアタイミングを使用し、トリガを構成しない場合、「DAQmxタスクを開始」VIを実行すると、収集が開始されます。このVIによって、CompactDAQコントローラおよびシャーシは収集を開始するためのデジタルパルスを送信します。2つの独立したタスクの「DAQmxタスクを開始」VIが、フラットシーケンスストラクチャの同じフレームに配置されると、2つのタスクは同じようなタイミングで開始されます。ただし、「DAQmxタスクを開始」VIが実行されるタイミングはソフトウェアによって定義されているため、各VIが実行される間に遅延があり、2つのタスクの正確な開始時間にはずれが生じます。つまり、開始時間がOSに依存していることになります。この方法を表したのが図1です。この図では、2つのアナログ入力タスクの開始を、フラットシーケンスストラクチャの同じフレーム内の「DAQmxタスクを開始」VIを使って、ランタイム中に制御しています。

図1:各タスクの開始がフラットシーケンスストラクチャ内で実行される場合

このような遅延を回避するには、「DAQmxトリガ」VIを使用します。この方法では、ソフトウェアタイミングで定義するのではなく、ハードウェアのトリガによってタスクを開始するように構成することができます。この機能を使用してタスクを同期させる場合、1つのタスクがトリガを送信し、もう1つのタスクがトリガを受信します。トリガを受信したタスクは、マスタタスクから送信されたトリガが収集または生成を開始するまで待機します。マスタタスクが開始されると、デジタルトリガがマスタタスクから送信され、この信号に基づいて開始するように構成されたタスクが開始されます。この方法を表したのが図2です。この図では、タスクがai/Start Triggerを受け入れる前に、「DAQmxタスクを制御」VIが呼び出されるようになっています。このようにすれば、マスタタスクは「ai/Start Trigger」を確実に予約するようになります。 

図2:両方のタスクを開始するトリガ構成

トリガとタイミングの命名法を理解するには、どのタイミングエンジンがタスク用に予約されているかを知る必要があります。CompactDAQコントローラおよびシャーシには、ai、te0、te1という3つのアナログ入力タイミングエンジンがあります。それぞれの同時に実行されているタスクは、異なるタイミングエンジンに割り当てられて、サンプリングクロックおよびトリガを制御します。たとえば、ai/StartTriggerはaiタイミングエンジンに割り当てられます。NI-DAQmxドライバは自動的に各アナログ入力タスクをタイミングエンジンに割り当てますが、まずaiタイミングエンジン、次にte0、te1という順番で割り当てていきます。どのタスクがどのタイミングエンジンを使用しているのかを知ることが重要なのは、同じマスタタスクのタイミングエンジンからの信号を使用するように開始トリガを受け取るタスクを設定するためです。マスタタスクをまず予約することで、このタスクをaiタイミングエンジンに割り当てていることになります。これで、両方のタスクがマスタタスクの開始トリガ (ai/StartTrigger) を使用するように設定できました。

サンプリングクロック同期

上記のテクニックを使用すれば、タスクは開始トリガを共有することによって同時に開始されます。しかし、この方法を利用したからといって、2つのタスクの間で、その後に続く計測のタイミングがずれていかないという保証はありません。そこで、サンプリングクロックを両タスク間で共有し、共有クロックを使用するすべてのタスクが同時にサンプルを取得するようにできます。これにより、2つのタスクはお互いにドリフトしないようになります。前述のように、CompactDAQコントローラとシャーシには3つのアナログ入力タイミングエンジンがあるため、タスクを予約する順序によって各タスクで使用されるタイミングエンジンが決まります。図3は、タスク間でサンプリングクロックを共有する方法を示しています。 

図3:サンプリングクロックとトリガを共有する場合

各タスクは同じサンプリングクロックを共有するため、このテクニックを使うときは、2つのタスクが同じサンプルレートで動作する必要があります。この同期方法は、デルタシグマまたは基準クロックモジュールでは機能しません。これらのモジュールは、モジュールの内部クロックを使用して計測データを収集します。次に続くセクション、「マルチデバイスタスク」と「マルチレートタスク」で、デルタシグマモジュールの同期方法を説明します。

マルチデバイスタスク

同期構成を簡素化するため、NI-DAQmxは、さまざまなモジュールからの複数のアナログ入力チャンネルを同じタスクに配置できるように構成することが可能です。さまざまなモジュールを同じタスクに配置するには、物理チャンネル入力に配置された、異なるモジュールの複数チャンネルを「DAQmx仮想チャンネルを作成」VIに指定します。異なるモジュールのチャンネルに同じ計測構成 (電圧レンジ、単位)、同じタイミング/トリガ情報を指定するのであれば、これらのチャンネルを同じ「DAQmx仮想チャンネルを作成」VIに含める必要があります。

図4:同じタスクで異なるモジュールを使用する

これらのモジュールが、電圧や電流のように異なる計測データを収集し、異なる計測範囲を必要とし、異なる計測単位を使用する必要がある場合、以下に示すように「DAQmx仮想チャンネルを作成」VIの複数のインスタンスを使用します。

図5:1つのタスクに複数の「DAQmx仮想チャンネルを作成」VIを使用して異なる計測タイプを指定する場合

同じタスクで異なるタイプのアナログ入力モジュール (SAR、デルタシグマ、低速サンプリング、基準クロック) を混在させて、NI-DAQmxドライバを使ってそれらを同期させることができます。マルチデバイスタスクでは、DAQmxがモジュールの同期に最適な方法を選択します。異なるシナリオ、およびマルチデバイスタスクによる計測の同期方法を以下に説明します。

2つのSAR/低速サンプリングモジュール - 2つのSARモジュール、SARモジュールと低速サンプリングモジュール、または2つの低速サンプリングモジュールを同じハードウェアタイミングタスクに配置すると、DAQmxドライバは両方のモジュール間で、同じシャーシまたはコントローラのサンプリングクロックと開始トリガを共有します。SARモジュールと低速サンプリングモジュール構成の場合、データが返される最大レートは低速サンプリングモジュールによっては決まりません。ドライバは低速サンプリングモジュールには複製サンプルを返して、SARモジュールを可能な限り最大レートで実行できるようにします。

2つのデルタシグマモジュール - 2つのデルタシグマモジュールを同じハードウェアタイミングのAIタスクに配置すると、DAQmxドライバは、すべてのモジュール間で最速のマスタタイムベースを共有し、同じ同期パルスに基づいてADCをリセットし、開始トリガを共有し、リセット時間を調整します。マスタタイムベースは、デルタシグマモジュールが計測データの収集に使用する12.8 MHzまたは13.1 MHzの内部クロックです。cDAQ-9185またはcDAQ-9189 (時間対応型シャーシ) のデフォルト動作では、マスタタイムベースが最も速いモジュールではなく、シャーシから生成されます。

2つの基準クロックモジュール - 2つの基準クロックモジュールを同じハードウェアタイミングのAIタスクに配置すると、DAQmxドライバはマスタモジュールから他のモジュールへ基準クロックを共有し、同じ同期パルスに基づいてADCをリセットし、開始トリガを共有し、リセット時間を調整します。基準クロックは、後続のモジュールがロックする内部マスタタイムベースです。時間対応型シャーシのデフォルト動作では、基準クロックがマスタモジュールではなくシャーシから生成されます。

基準クロックモジュールとデルタシグマモジュール - 基準クロックモジュールとデルタシグマモジュールを同じハードウェアタイミングのAIタスクに配置すると、DAQmxドライバは基準クロックモジュールの基準クロックをデルタシグマモジュールのマスタタイムベースにルーティングします。両モジュールは、シャーシ/コントローラからの同期パルスを受信します。するとシャーシ/コントローラは、それぞれのADCをリセットして、開始トリガを共有し、各モジュールのリセット時間を調整します。時間対応型シャーシでは、基準クロックモジュールの基準クロックは、デルタシグマモジュールのマスタタイムベースと共有されません。その代わりに、シャーシは基準クロックモジュールに基準クロックをルーティングし、デルタシグマモジュールにはマスタタイムベースをルーティングします。基準クロックモジュール (NI 9775) は、デルタシグマモジュールと同じタスクに配置されている場合、記録モードにはなりません。

デルタシグマ/基準クロックとSAR/低速サンプリング - SARまたは低速サンプリングモジュールと、デルタシグマもしくは基準クロックモジュールを同じハードウェアタイミングAIタスクに配置すると、DAQmxドライバは、デルタシグマモジュールまたは基準クロックモジュールの内部サンプリングクロックをエクスポートしてSARまたは低速サンプリングモジュールが使えるように構成します。内部サンプリングクロックはデルタシグマモジュールに構成したデータレートと同じく、以下のとおりです。

ここで、
     fsはデータレートを表し、
     fmは各モジュールの仕様書に指定された内部マスタタイムベースを表し、
     n/a/bは分周率を表します。

基準クロックモジュールの内部サンプリングクロックは、デバイスのデータシートに記載されています。ドライバは低速サンプリングモジュールには複製サンプルを返して、デルタシグマまたは基準クロックモジュールがより高速レートで実行できるようにします。基準クロックモジュール (NI 9775) は、SARまたは低速サンプリングと同じタスクに配置されている場合、記録モードにはなりません。  

マルチレート同期

1つのタスクで複数のモジュールを参照している場合、同じサンプルレートがすべてのチャンネルに適用されます。ただし、異なるレートで同期を必要とするアプリケーションもあります。

2つのSARモジュール - CompactDAQシャーシまたはコントローラ内で異なるレートで収集を行う2つのSARモジュールまたは低速サンプリングモジュールを同期させるには、開始トリガを共有する以外に特に何か作業をする必要はありません。各モジュールが使うサンプリングクロックは同じ信号から抽出されます。つまり、モジュールが同じシャーシ内にある場合、計測は同期します。

2つのDSAモジュール - 異なるレートで収集を行う2つのデルタシグマモジュールを同期させるには、共通マスタタイムベース、同期パルス、開始トリガを共有するようにタスクを設定します。図6では、マスタタイムベースクロックがあるモジュールから別のモジュールに経路設定されています。NI-DAQmxタイミングプロパティノードの「SampleClck.Timebase.Src」は、操作手順と仕様/データシートに記載されているマスタタイムベースと同じ12.8 MHzまたは13.1 MHzの信号を参照します。このクロックはオーバーサンプルクロックとしても知られています。それは、1つのサンプルを生成するためにこのクロックの多数のティックが必要であるためです。

図6:オーバーサンプリングクロックの共有

デルタシグマモジュールを使用するデバイスには自励式ADCがあります。マスタタイムベースを共有すれば、計測に必ず同じクロックが使われることになりますが、ADCの起動のタイミングによって、未知の位相シフトが生じます。次のステップは同期パルスの共有です。同期パルスは、サンプルの収集または生成の前にADC/DACをリセットする目的で使用されます。ADC/DACのリセットを行うこの信号がなければ、収集される計測データは同期しません。以下に、オーバーサンプルクロックおよび同期パルスの共有が可能なプロパティノードを示します。

図7:オーバーサンプリングクロック、開始トリガ、同期パルスの共有

上記の構成は、どのタスクがより高速で実行されているかに応じて、同期パルスを別のタスクにルーティングします。マルチレート構成では、実行速度の遅いタスクのサンプリングクロックを使用して、高速な実行タスクをトリガします。この理由は例で説明します。

ここでもう1つ考慮すべき点は、各モジュールに必要なリセット時間です。リセット時間とは、デルタシグマモジュールのADCが同期パルスを受信してからデータ収集を開始するまでの間に必要とする遅延です。デルタシグマモジュールモデルが異なれば、リセット時間も異なります。このリセット時間を考慮する必要があるのは、すべてのデバイスが正しくリセットシーケンスを経て、サンプルの収集または出力を同時に開始するようにするためです。異なるリセット時間を適切に考慮するには、各モジュールに必要なリセット時間を確認して、必要であれば、リセット時間が短いモジュールに遅延を追加する必要があります。したがって、リセット時間と遅延の合計はどのモジュールも同じでなくてはいけません。

ADCのリセットに必要な時間はDAQmxタイミングプロパティノード「SyncPulse.ResetTime」を使用して確認できます。すべてのADCがリセットサイクルを同時に終了するように、両方のタスクのリセット時間の比較を行います。リセット時間が長いほうのタスクから、リセット時間が短いほうのタスクのリセット時間を減算します。減算した結果の数値が、1つのタスクがデータ収集を開始している状態で、もう1つのタスクがまだリセットサイクルの最中にある時間ということになります。この遅延を考慮に入れるには、NI-DAQmxプロパティ「SyncPulse.ResetDelay」を使用します。このプロパティによって、各モジュールに送信される同期パルスを遅延させることができます。先に述べたとおり、リセット時間とは、ADCが同期パルスを受信してからデータ収集を開始するまでの間の遅延のことです。このプロパティを最も有効に活用するには、このプロパティを、モジュールの中の最も長いリセット時間と該当モジュールのリセット時間との差に等しくなるように設定します。こうすることによって、リセット時間がより短いモジュールの同期パルスをシフトできるので、リセット時間が遅いモジュールと速いモジュールのリセットシーケンスを同時に終了させることができます。以下のコードは、リセット時間を取得し、適切なリセット遅延を決定する方法を示しています。  

図8:同期パルスのリセット時間クエリとリセット遅延の計算

NI-DAQmxプロパティノード「SyncPulse.ResetDelay」の最大入力は0.013秒のため、異なるモジュールのリセット遅延値の差が大きい場合、適さないことがあります。マスタタイムベースを受信するタスクで「SyncPulse.ResetTime」をポーリングするときのプロパティノードの順番を書き留めておきます。この値は、13.1 MHzタイムベースまたは12.8 MHzタイムベースに応じて異なります。つまり、モジュールにマスタタイムベースのレートが通知されてから、このタスクで「SyncPulse.ResetTime」を呼び出すことが重要です。

プロパティ「SyncPulse.ResetDelay」および「SyncPulse.ResetTime」を検索する際、「SyncPulse.SyncTime」および「SyncPulse.MinDelaytoStart」というプロパティも見つかります。ほとんどの開発者はこのプロパティを使うことがありませんが、名前が似ていることと近い場所に配置されていることから目にする可能性があります。SyncPulse.SyncTimeは、SynchPulseResetTime yにSyncPulse.ResetDelayに入力した値を加算した値です。SyncPulse.SyncTimeの値は、最も近いミリ秒に丸められます。「SyncPulse.MinDelaytoStart」は、同期パルスの発行からマスタタスクによる開始トリガの発行までの時間です。このプロパティは、明示的に設定されない限り、「SyncPulse.SyncTime」と同じです。

2つの基準クロックモジュール - 2つの基準クロックモジュールを異なるレート (2つのDSAモジュールなど) で同期させるには、マスタタスクの基準クロック、同期パルス、サンプリングクロックを他のタスクに分散させます。NI-DAQmxタイミングプロパティノードの「RefClck.Src」は、データシートに記載されているものと同じ内部マスタタイムベースを参照します。

図9:2つの基準クロックモジュールの同期

デルタシグマモジュールとSAR/低速サンプリングモジュール - デルタシグマモジュールとSAR/低速サプリングモジュールを同期するには、デルタシグマモジュールのマスタタイムベースとサンプリングクロックをSAR/低速サプリングモジュールと共有します。SAR/低速サンプリングモジュールは12.8 MHzまたは13.1 MHzでデータを収集できないため、図10に示すように、デルタシグマのマスタタイムベースはSAR/低速サンプリングモジュールのマスタタイムベースと共有されます。SAR/低速サンプリングモジュールのサンプリングクロックは、通常、CompactDAQシャーシまたはコントローラのオンボードクロックから取得されます。この方法では、シャーシまたはコントローラのクロックをデルタシグマモジュールの12.8 MHzまたは13.1 MHzのクロックに置き換えます。  

図10:デルタシグマモジュールとSAR/低速サンプリングモジュールの同期

基準クロックモジュールとSAR/低速サンプリングモジュール - 基準クロックモジュールとSAR/低速サプリングモジュールを同期するには、基準クロックモジュールの基準クロックベースとサンプリングクロックをSAR/低速サプリングモジュールと共有します。SAR/低速サンプリングモジュールは12.8 MHzで収集を行えないため、基準クロックモジュールの基準クロックをSAR/低速サンプリングモジュールのマスタタイムベースと共有します。SAR/低速サンプリングモジュールのサンプリングクロックは、通常、CompactDAQシャーシまたはコントローラのオンボードクロックから取得されます。この方法では、SAR/低速サンプリングモジュールにルーティングされたシャーシまたはコントローラのクロックを基準クロックモジュールの内部マスタタイムベースに置き換えます。  

図11:基準クロックモジュールとSAR/低速サンプリングモジュールの同期

マルチシャータスク

一部の計測アプリケーションでは、複数のCompactDAQシャーシまたはコントローラを必要とする複合的な計測と分散システムが必要です。マルチシャーシ同期には主に3つの方法があります。

BNC/SMBコネクタまたはデジタルモジュールを使ったマルチシャーシ同期 - シャーシ間で同期を取るには、cDAQ-9178、cDAQ-9188、cDAQ-9188XT、およびcDAQ-9179シャーシにある2つのBNCコネクタ、またはcDAQ-9132、cDAQ-9133、cDAQ- 9134、cDAQ-9135、cDAQ-9136、cDAQ-9137、cDAQ-9185、およびcDAQ-9189にある1つのSMBコネクタを使って、タイミング信号をインポートおよびエクスポートする方法があります。CompactDAQコントローラのサポートは現在終了しており、入手することはできません。

図12:2つのBNCポートを装備したNI cDAQ-9178は、タイミング/トリガ信号のインポートおよびエクスポートに使用できる。

異なるシャーシのBNCまたはSMB端子を接続すると、トリガ/タイミング信号をルーティングできます。DAQmxドライバを使用する場合、マスタタスクから信号をエクスポートするには、「NI-DAQmx信号をエクスポート」プロパティノードを使います。そして、別のシャーシのタスクで、BNCまたはSMB端子で信号を受け入れるようサンプリングクロックと開始トリガを構成します。

図13:CompactDAQシャーシのBNCポートの構成

パラレル/相関型デジタルI/Oモジュールも、シャーシ全体でトリガ/タイミング信号を送受信するために使用できます。これらのデジタルI/Oモジュールは、NI CompactDAQコントローラおよびシャーシに十分なBNC/SMBポートがない場合、または信号帯域幅がBNC/SMBコネクタの帯域幅 (1MHz) を超える場合に適しています。

NI 9469を使ったマルチシャーシ同期 - シャーシのBNCコネクタまたはパラレル/相関型デジタルI/Oモジュールでタイミング/トリガ信号を構成する上記の方法は多数のアプリケーションに適用できます。ただし、次のような状況では、NI 9469を使った別の方法が適しています。

  • シャーシ間が長距離
  • エクスポートした信号が高帯域幅
  • 同期の複雑なトポロジ
     

NI 9469によって、信号のルーティングおよびコーディングが簡素化され、SAR、低速サンプリング、デルタシグマ、デジタル入出力、アナログ出力モジュールを異なるシャーシのトポロジで同期させることができます。NI 9469のカード間の接続は、次の図のとおり、Measurement & Automation Explorer (MAX) で構成することができます。NI 9469の構成方法の詳細については、このドキュメントの最後にある関連情報のセクションをご覧ください。 

図14:Measurement & Automation ExplorerによるNI 9469の構成

NI-DAQmxバージョン9.9以降を使用して、NI 9469をMAXで構成すると、別シャーシの任意のモジュールを同じタスクに追加して、同期に必要なコードを大幅に簡素化することができます。次の図は、この方法によるマルチシャーシ同期を示しています。

図15:MAXで構成したNI 9469のマルチシャーシ同期コード

異なるシャーシのモジュールを同期する方法のバックグラウンドプロセスは、マルチレートタスクおよびマルチデバイスタスクの各セクションで説明した方法と類似しています。このアプローチを使用して複数シャーシのモジュールを自動的に同期する方法には制限があります。詳細はこちらのドキュメントを参照してください。

まとめ

このチュートリアルでは、いくつかの同期オプションについて説明しました。最初にご紹介したオプションでは、タスクをソフトウェアタイミングのコマンドで開始しました。タスク間でハードウェアトリガを共有することで同期を改善し、タスク間でサンプリングクロックを共有することでタスク間のドリフトを防ぐことができます。モジュールを同じレートで同期する場合、同じタスク内の複数のモジュールを参照することでプログラミングを簡素化できます。使用するモジュールに異なるサンプリングレートが必要な場合は、使用するモジュールのタイプに応じて特別な配慮が必要です。使用するモジュールに異なるレートが必要な場合は、使用するモジュールのタイプに応じて特別な配慮が必要です。上記のオプションは、多くのアプリケーションのタイミング要件内の信号に基づいて、Cシリーズモジュールを同期するいくつかの異なる方法を表しています。

関連情報

Was this information helpful?

Yes

No