LabVIEWでDAQmx読み取りVIの未処理データを調整またはスケーリングする

更新しました Apr 17, 2023

使用製品

ハードウェア

  • Multifunction I/O Device

ドライバ

  • NI-DAQmx

問題

LabVIEW対応のNI-DAQmxを使用している場合、DAQmx読み取りVIの未処理データは校正されていますか?収集したバイナリ値をスケール値に変換するにはどうすればよいですか?

解決策

DAQmx読み取りVIを未処理データ 1D配列モードに設定すると、整数の配列が得られます。バイナリ値をスケール値に変換する際は、解像度とデバイスの整数の関係に十分注意する必要があります。DAQデバイスの分解能が16ビットであるとします。この場合、DAQmx読み取りVIは未処理データ 1D U16または未処理データ 1D I16モードに設定する必要があります。そうしないと、有効ビットが失われます。読み取り値がU16モードで32767(2^15-1)より大きい場合は、電圧が負であり、この値が補数表現であることを意味します。65536を引くと、符号付き整数に変換できます。たとえば、U16の65534はI16の-2です。スケールなしの未処理データは、DAQデバイスのシリーズごとに異なる可能性があることに注意してください。


 

 

 

MシリーズおよびXシリーズ

MシリーズおよびXシリーズデータ収集(DAQ)デバイスの場合、収集された未処理データは未校正でスケールされていません。 ただし、校正情報とスケーリング情報はドライバによって結合され、DAQmxチャンネルプロパティノードのAI.DeviceScalingCoeffプロパティから取得できます。このプロパティは、プロパティ>>アナログ入力>>一般プロパティ>>上級>>デバイススケーリング係数>>デバイススケーリング係数をクリックして選択します。このプロパティによって返されるデータは、配列です。配列の各要素は、校正されスケーリングされた電圧を算出するために利用できる3次多項式 f(X) = a[0]*X^0+a[1]*X^1+a[2]*X^2+a[3]*X^3 の係数です(ここで、a[i]は配列要素です)。


 

 

 

Eシリーズ

Eシリーズボードの場合、収集された未処理データはスケーリングされていませんが、ハードウェア上で校正されています。スケーリング情報は、上記と同じプロパティノードを利用できます。プロパティノードは2要素の配列のみを返します。これは、Eシリーズデバイスのスケーリングが1次多項式 f(x) = a[0]X^0+a[1]X^1 であるためです。

Eシリーズデバイスでは、[0]が常に0になることに気付くはずです。これは、a[1]がEシリーズのレンジ/分解能であることを意味します。

 

 

 

 

バイナリデータをスケールなしのデータに手動で変換する

デバイスの分解能と測定レンジを考慮して、収集したバイナリデータをスケールなしのデータ(ボルト単位)に手動で変換する計算式は、以下のとおりです。

電圧読み取り値 = (バイナリ読み取り値/2^ビット数)*(Vmax-Vmin) 

計算例:

  • 電圧レンジがバイポーラ(+/- 5 V)の場合、返されるバイナリ読み取り値は-32768から32767の範囲内で符号付き(I16)表現です。
    (すなわち、Vmax = 5 V、Vmin = -5 V、ビット数 = 16、バイナリ読み取り値 = -8192の場合、電圧読み取り値 = -1.25 Vです。)
     
  • 電圧レンジがユニポーラ(0~10 V)の場合、返されるバイナリ読み取り値は0~65535の範囲内の符号なし(U16)表現です。
    (すなわち、Vmax = 10 V、Vmin = 0 V、ビット数 = 16、バイナリ読み取り値 = 8192の場合、電圧読み取り値 = 1.25 V)

 

 

 

バイナリデータをスケールしたデータに手動で変換する

デバイススケーリング係数プロパティノードを使用すると、以下のような設定を使用してバイナリデータをスケールデータに変換できます。



このトピックを説明する2つのサンプルプログラムが、以下にリンクされています。1つのサンプルプログラムは、デバイススケーリング係数を使用して符号付きおよび符号なしの未処理データである2進値を電圧に変換する方法を示しています。もう1つのサンプルプログラムを使用して、MシリーズデバイスとEシリーズデバイス間における校正の違いを確認できます。これは、DAQデバイスからのデータを手動でスケーリングすることとデバイススケーリング係数を使用することの違いを示しています。