DioDmSetBuffer


機能

サンプリング/ジェネレーティングに使用するデータバッファの設定を行います。

書式

Ret = DioDmSetBuffer ( Id , Direction , Buffer , Length , IsRing )

引数

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

Direction [ VB.NET: Short ] [ C, C++: short ] [ C#: short ] [ Python: ctypes.c_short ]
転送方向を設定してください。

定義

[Dec]

意味

DIODM_DIR_IN

1

入力

DIODM_DIR_OUT

2

出力

Buffer [ VB.NET: IntPtr ] [ C, C++: unsigned long * ] [ C#: IntPtr ] [ Python: ctypes.POINTER(ctypes.c_ulong) ]
バッファの先頭アドレスを指定してください。

Length [ VB.NET: Integer ] [ C, C++: unsigned long ] [ C#: uint ] [ Python: ctypes.c_ulong ]
データ個数を指定してください。1データは4Byteです。
データ個数は、デバイス毎に入力側、出力側それぞれに以下の範囲で指定できます。

デバイス名称

設定可能範囲

DIO-32DM3-PE

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

 

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

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

 

PIO-32DM(PCI)
DIO-32DM-PE
DIO-32DM2-PE

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

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

 

最大64MByteのバスマスタ転送ができるようにハードウェア設計されています。

しかしながら、OS制限によりLengthは16777216(64MBytes分)まで設定できません。ご注意ください。

詳細は以下の通りです。

利用OS

設定可能範囲

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

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

Windows10 Version 1607 以前

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

 

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

IsRing [ VB.NET: Short ] [ C, C++: short ] [ C#: short ] [ Python: ctypes.c_short ]
バッファを繰り返して使用するかどうかを設定してください。

定義

[Dec]

意味

DIODM_WRITE_ONCE

0

1回転送

DIODM_WRITE_RING

1

無限回転送

戻り値

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

定義

[Dec]

意味

DIO_ERR_SUCCESS

0

正常終了

DIO_ERR_SYS_RECOVERED_FROM_STANDBY

7

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

DIO_ERR_DLL_INVALID_ID

10001

無効なIDが指定されました。

DIO_ERR_DLL_CALL_DRIVER

10002

ドライバーを呼び出せません(デバイスI/Oコントロールに失敗)。

DIO_ERR_DLL_BUFF_ADDRESS

10100

データバッファアドレスが不正です。

DIO_ERR_SYS_NOT_SUPPORTED

20001

このデバイスではこの関数は使用できません。

DIO_ERR_SYS_IODIRECTION

20500

入出力方向が設定範囲外です。

DIO_ERR_DM_BUFFER

21100

バッファが大きすぎて確保できませんでした。

DIO_ERR_DM_LOCK_MEMORY

21101

メモリがロックできませんでした。

DIO_ERR_DM_SEQUENCE

21103

実行手順エラー

その他のエラー(参照:エラーコード詳細

初期値

なし

説明

・バッファ設定は、転送開始前に毎回必ず実行してください。

・DIO-32DM3-PE の場合、バッファサイズを2KByte未満に設定し、無限回転送を行う場合、ハードウェアの制限により転送レートが低下します。

・サンプリング/ジェネレーティング中にこの関数を実行した場合、実行手順エラーが発生します。必ず、サンプリング/ジェネレーティングが完了したことを確認してから実行してください。

・入出力設定を、PIO_1616に設定している場合でも、出力データは、PO_32に設定しているときと同様にバッファの0ビット目から設定します。16ビット分左へシフトする必要はありません。

使用例

入力転送に対して、10000個のバッファを無限回転送で設定します。

VB.NET

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

C, C++

long Ret;
unsinged long Buffer[10000];
Ret = DioDmSetBuffer ( Id , DIODM_DIR_IN , &Buffer[0] , 10000 , DIODM_WRITE_RING );
 

C#

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

Python

Ret = ctypes.c_long()
BufferType = ctypes.c_ulong * 10000
Buffer = BufferType()
Ret.value = cdio.DioDmSetBuffer ( Id , cdio.DIODM_DIR_IN , Buffer , 10000 , cdio.DIODM_WRITE_RING )
 

関連項目

DioDmTransferStart