AioSetAoTransferData


機能

出力データを格納するユーザーバッファの設定を行います。
この設定は、AioSetAoTransferMode関数で変換データ転送方式をユーザーバッファモードに設定した場合に必要になります。
変換データ転送方式がデバイスバッファの場合には実行する必要はありません。

書式

Ret = AioSetAoTransferData ( Id , DataNumber , Buffer )

引数

Id [ VB.NET: Short ] [ C, C++: short ] [ C#: short ] [ Python: ctypes.c_short ]
AioInit 関数で取得したデバイスIDを指定します。

DataNumber [ VB.NET: Integer ] [ C, C++: long ] [ C#: int ] [ Python: ctypes.c_long ]
設定するユーザーバッファの配列サイズを指定します。サイズは配列の個数で指定してください。

Buffer [ VB.NET: IntPtr ] [ C, C++: long * ] [ C#: IntPtr ] [ Python: ctypes.POINTER(ctypes.c_long) ]
ユーザーバッファのアドレスを指定します。

戻り値

Ret [ VB.NET: Integer ] [ C, C++: long ] [ C#: int ] [ Python: ctypes.c_long ]

戻り値

内容

0

正常終了

7

スタンバイモードから復帰したため、AioResetDevice関数を実行してください

10001

無効なIDが指定されました
関数に指定するIDは、AioInitで取得したIDを使用してください。

10002

ドライバを呼び出せません
始めにAioInit関数を実行しください。

13600

DataNumberの値が関数の指定範囲外です

13601

BufferのポインタがNULLです
パラメータには配列のアドレスを指定してください。

13602

バスマスタ転送用のバッファ確保に失敗しました

20001

使用しているデバイスではこの関数を使用することができません

20002

デバイスが動作中のため実行できません
この関数を使用するには、アナログ出力動作が停止している必要があります。

20003

他のプロセスがデバイスを使用しているため、実行できません
他のプロセスがデバイスを使用しているときは、マルチプロセス対応関数以外実行できません。

23600

DataNumberの値が使用しているデバイスの範囲外です

説明

ユーザーバッファへのデータ格納パターンについては「ユーザーバッファの設定」を参照ください。

ユーザーバッファの設定を行う際には、あらかじめ1ジェネレーティングで必要となるパケット数(=配列の要素数)を計算しておく必要があります。
AioGetAoSamplingDataSize関数を使用すれば、1ジェネレーティングあたりに必要なパケット数を取得する事ができます。

アナログ出力機能を持たないデバイスでは使用できません。
デバイスが動作中の場合、この関数は実行できません。
この関数を実行する前に、先にAioSetAoMemoryType関数を実行してください。

デバイス別仕様

  DataNumber(配列サイズ)は、デバイス毎にそれぞれに以下の範囲で指定できます。

AIO-163202G-PE
AIO-163202UG-PE
AIO-123202G-PE
AIO-123202UG-PE

設定可能なDataNumberは1~536870912(2GBytes分)です。

 

これらのデバイスは、64bitバス幅でバスマスタ転送を実現しています。

64bitバス幅でのバスマスタ転送は、利用OSによるバッファサイズ制限はありません。

AIO-163202F-PE
ADA16-32/2(PCI)F

これらのデバイスは、32bitバス幅でバスマスタ転送を実現しています。

32bitバス幅でのバスマスタ転送は、利用OSよるバッファサイズ制限を受けます。

 

最大64MByteのバスマスタ転送ができるようにハードウェア設計されています。
しかしながら、OS制限によりDataNumberは16777216(64MBytes分)まで設定できません。ご注意ください。

詳細は以下の通りです。

利用OS

設定可能範囲

Windows10 Version 1703 以降 (Windows 11も含む)

設定可能なDataNumberは1~524288(2MByte分)です。

Windows10 Version 1607 以前

設定可能なDataNumberは1~262144(1MByte分)です。

 

  ※物理アドレス空間へのマッピングのされ方によっては、バスマスタ用バッファサイズを最大領域まで設定できない場合があります。

使用例

10000個のユーザーバッファを設定します。

VB.NET

VisualBasic.NETでご使用の際の注意点 を参照してください。
 

C, C++

long Ret;
long Buffer[10000];
Ret = AioSetAoTransferData ( Id , 10000 , &Buffer[0] );
 

C#

VisualC#.NETでご使用の際の注意点 を参照してください。
 

Python

Ret = ctypes.c_long()
BufferType = ctypes.c_long * 10000
Buffer = BufferType()
Ret.value = caio.AioSetAoTransferData ( Id , 10000 , Buffer )