ユーザーバッファ概要
G-シリーズの場合
G-シリーズでは、変換データは以下の形式でユーザーバッファに転送されます。
上図は0、1、計2チャネルを使用した場合のユーザーバッファへの転送方法を表したものです。
データ転送は、サイズが4バイトの転送パケットを最小単位に行われます。
1パケット中には、2個のAD変換データがバイナリ値で格納されます。
上図の例では1パケット中の下位2バイトに0チャネルのデータ、上位2バイトに1チャネルのデータが格納されます。
2チャネルを使用する場合では、1パケット(1転送回数)=1サンプリングとなります。
上図は0、1、2、計3チャネルを使用した場合のユーザーバッファへの転送方法を表したものです。
基本的には2個の変換データで1パケットを使用しますが、上図のように奇数チャネルを使用する場合、パケットの上位2バイトが未使用になります。
3チャネルを使用する場合では、2パケット(2転送回数)=1サンプリングとなります。
ユーザーバッファの設定
ユーザーバッファを使用する場合、変換データを転送するアプリケーションメモリをあらかじめドライバに登録しておく必要があります。
ユーザーバッファの設定は、AioSetAiTransferData関数で行います。
Ret = AioSetAiTransferData ( Id , DataNumber , Buffer )
DataNumberにはアプリケーションメモリの容量を、転送パケット単位で指定します。
転送パケットとはデータ転送の際の最小単位のデータサイズを表し、そのサイズは4バイトとなっています。
Bufferにはアプリケーションで確保した配列のアドレスを指定します。
配列の数は最低でもDataNumberの数だけ必要です。
例)2チャネルを使用して1000回のサンプリングを行う場合
1サンプリングに1パケットを使用するので、1000個の配列を確保しておき、DataNumber = 1000となります。
例)3チャネルを使用して1000回のサンプリングを行う場合
1サンプリングに2パケットを使用するので、2000個の配列を確保しておき、DataNumber = 2000となります。
Z-シリーズの場合
AI-1204Z-PE のZ-シリーズデバイスでは、データの格納方法がG-シリーズとは異なります。
データ転送は、サイズが4バイトの転送パケットを最小単位に行われます。
1パケット中には、2個のAD変換データがバイナリ値で格納されるのはG-シリーズデバイスと同じですが、データ1個分は以下のように格納されます。
1データ(1パケットの半分のデータ)は16bitデータとなっています。
そのうち、下位12bitが実際のデータになっています。
上位4bitデータのうち、上の図の斜線部である下位3bit分のデータは、デバイス内の計算で使用する為のデータで、ユーザ様にとっては不要のデータとなってます。
よってここのデータは無視するようにアプリケーションを作成して頂く必要があります。
最上位1bitが12bitデータが有効であるか無効であるかを判別するためのビットです。
このビットが1の時はデータは無効データ、0の時は有効データとなります。
よって、ユーザーバッファを使用するときは、最下位ビットが0であるか1であるかの判別をして、有効データであるか無効データであるかを判別する必要があります。
データの転送方法はG-シリーズと同様パケット単位で行われます。
詳しくはAioSetAiTransferDataやAioSetAiStopTimesをご覧下さい。
使用チャネルの数、及び転送回数が偶数の場合と奇数の場合ではパケット単位でのデータの格納方法が、G-シリーズとは違いますので注意してください。
以下、1パケットをと表現します。
使用チャネル数1の場合(例:0chのみ使用)
使用チャネルが1chの場合で転送回数設定が偶数の場合はデータは1パケット毎に隙間無く格納されますので、問題はありません。
転送回数設定が奇数の場合は最後のパケットの上位2バイトに無効データが格納されます。
下位パケットの最上位1ビット目に1が立っており、このビットが立っている場合はアプリケーション上で無視するようにプログラミングする必要があります。
使用チャネル数2の場合(例:0ch, 1ch)
使用チャネルが2chの場合
データは1パケット毎に隙間無く格納されますので、転送回数設定による注意点はありません。
使用チャネル数3の場合(例:0ch, 1ch, 2ch)
使用チャネルが3chの場合は転送回数設定によらず、偶数パケットのデータパケットの上位2バイトに無効データが格納されます。
上位パケットの最上位ビットに1が立っており、このデータはアプリケーション上で無視するようにプログラミングする必要があります。
使用チャネル数4の場合(例:0ch,
1ch, 2ch, 3ch)
使用チャネルが4chの場合は2パケット毎にデータが隙間無く格納されますので、転送回数設定による注意点はありません。