AioSetAiTransferData


機能

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

書式

Ret = AioSetAiTransferData ( 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関数を実行しください。

11980

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

11981

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

11982

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

20001

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

20002

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

20003

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

21980

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

21984

バスマスタ転送中に関数が実行されました

21985

バスマスタパラメータエラー

説明

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

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

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

デバイス別仕様

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

AI-1204Z-PE

AI-1664UG-PE
AIO-163202G-PE
AIO-163202UG-PE
AIO-123202G-PE
AIO-123202UG-PE

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

 

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

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

AI-1204Z-PCI
AI-1204Z2-PCI
AIO-163202F-PE
ADA16-32/2(PCI)F

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

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

 

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

詳細は以下の通りです。

利用OS

設定可能範囲

Microsoft Windows 10 IoT Enterprise 2019 LTSC以降
(Windows 11も含む)

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

Microsoft Windows 10 IoT Enterprise LTSB 2016

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

 

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

使用例

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

VB.NET

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

C, C++

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

C#

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

Python

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