• 検索結果がありません。

AINPMD0 構造体

ドキュメント内 API-PAC(W32)RM/AIO (ページ 45-51)

ScanClk : スキャンクロック周期を指定してください。

実際に設定される値(nsec) = 25 * (ScanClk + 1) 設定範囲は使用するボードタイプにより異なります。

ボードタイプに"U"が付いていないボード(例:AD12_16EH) 指定可能な範囲 : 399 〜 65,535(FFFFH)

ボードタイプに"U"が付いているボード(例:AD12_16UEH) 指定可能な範囲 : 39 〜 65,535(FFFFH)

ADI12-16(PCI)

指定可能な範囲 : 799 〜 65,535(FFFFH)

SmpClk : サンプリングクロック周期を指定してください。

実際に設定される値(nsec) = 25 * (SmpClk + 1) 内部サンプリングクロックを使用する場合 指定可能な範囲 : (ScanClk + 1) * Channels - 1

〜 268,435,455(FFFFFFFH) 外部サンプリングクロックを使用する場合

設定値 : -1(FFFFFFFFH)

DataFmt : 変換データ形式を指定してください。

指定可能な範囲 : 0 〜 1

MemBufType: バッファメモリ形式を指定してください。

指定可能な範囲 : 0 〜 1

IntFactor : 割り込み要因を指定してください。

指定可能な範囲 : 0 〜 6

割り込みを使用しない場合はIntFactor=0に設定してくださ い。

RptNum : リピート回数を指定してください。

指定可能な範囲 : 0 〜 16,777,215(FFFFFFH) リピートなし : 0固定

リピートn回 : 1 〜 16,777,215(FFFFFFH)

■補足 ・ サンプリングクロックとして外部サンプリングクロックを使用する場 合、入力するクロック信号は次の条件にしたがってください。

SmpClk > Channels * ScanClk

・ 割り込み要因で設定された割り込みは、ドライバ内部で次の割り込み 信号をすぐに受け付けられるように処理されています。よって、同一 の割り込み要因で何回でも割り込みを発生させることができます。

・ リピート回数は'RptNum = 0'で1回だけサンプリングを行います。

■設定例

例)論理チャネルのチャネル0とチャネル1の合計2チャネルのアナログ入力処理を行う 場合

ポイント: この例では、サンプリング条件を以下の内容で設定します。

サンプリングモード = 外部信号スタートモード (立ち上がりエッジ)

入力チャネル数 = 全2チャネル(論理チャネル0,1) トリガディレイ回数 = 5回

サンプリング回数 = 10回 リピート回数 = 0回

変換速度 = スキャンクロック10μsec(10000nsec) 内部サンプリングクロック20μsec

(スキャンクロック * チャネル数)

変換形式 = オフセット(ストレート)バイナリ バッファメモリ形式 = FIFO

割り込み要因 = 使用しない

●C言語用

HANDLE hDrv;

WORD GrpNo,DrvNo;

DWORD dwRet;

int i;

/* 初期化 */

DrvNo = 0; /* ドライバ番号を指定 */

GrpNo = 1; /* グループ番号を指定 */

dwRet = AioOpen(&hDrv,DrvNo,GrpNo);

/* A/D変換 */

AINPMD0 lpAInp;

WORD InpChNo[2];

WORD InpMode,ScanClk;

DWORD SmpClk;

InpMode = 0; /* サンプリングモードを指定 */

for(i=0;i<2;i++){

InpChNo[i] = i; /* 論理チャネルを代入(0,1ch) */

}

ScanClk = 399; /* 10000(nsec)/25 -1 */

SmpClk = 799; /* 20000(nsec)/25 -1 */

lpAInp.InpChNo = &InpChNo[0]; /* InpChNoの先頭を指定 */

lpAInp.Channels = 2; /* 入力チャネル数を指定 */

lpAInp.Scan = 10; /* サンプリング回数を指定 */

lpAInp.TrgType = 0; /* 外部信号タイプを指定 */

lpAInp.DelayNum = 5; /* トリガディレイ回数を指定 */

lpAInp.ScanClk = ScanClk; /* スキャンクロックを指定 */

lpAInp.SmpClk = SmpClk; /* サンプリングクロックを指定 */

lpAInp.DataFmt = 0; /* 変換データ形式を指定 */

lpAInp.MemBufType = 0; /* バッファメモリ形式を指定 */

lpAInp.IntFactor = 0; /* 割り込み要因を指定 */

lpAInp.RptNum = 0; /* リピート回数を指定 */

dwRet = AioInpBdMem(hDrv,InpMode,&lpAInp,0,0,0,0);

/* サンプリング終了の確認 */

WORD Dnum,Sts;

long Cnt;

do{

dwRet = AioSts(hDrv, &Sts, &Cnt, &Dnum);

/* ステータスの取得 */

}while(Sts != 0);

/* データの取得 */

AREAD lpARead;

WORD InpBuf[20];

lpARead.ScanNo = 0;

dwRet = AioSts(hDrv, &Sts, &Cnt, &Dnum);

lpARead.ScanNum = Cnt / lpAInp.Channels;

lpARead.Buf = &InpBuf[0]; /* InpBufの先頭を指定 */

dwRet = AioReadBuf(hDrv, &lpARead);

/* 電圧値への変換 */

float Volt;

for(i=0;i<20;i++){

Volt = BinaryToVI((float)(-10), (float)10, (short)1, (short)12, (unsigned short)InpBuf[i]);

/* 最小値-10V、最大値10V、ゲイン1倍、分解能12ビット */

/* ここへ変換した電圧値を表示するコードを追加してください */

}

/* 終了処理 */

dwRet = AioClose(hDrv);

●Visual Basic用

Dim hDrv As Long, dwRet As Long Dim DrvNo As Integer, GrpNo As Integer Dim i As Integer

'初期化

DrvNo = 0 'ドライバ番号を指定

GrpNo = 1 'グループ番号を指定

dwRet = AioOpen(hDrv, DrvNo, GrpNo) 'A/D変換

Dim lpAInp As AINPMD0

Dim InpChNo(1) As Integer

Dim InpMode As Integer

InpMode = 0 'サンプリングモードを指定

For i = 0 To 1

InpChNo(i) = i '論理チャネルを代入(0,1ch)

Next i

lpAInp.InpChNo = LpWord(InpChNo(0))

'InpChNoの先頭を指定

lpAInp.Channels = 2 '入力チャネル数を指定

lpAInp.Scan = 10 'サンプリング回数を指定

lpAInp.TrgType = 0 '外部信号タイプを指定

lpAInp.DelayNum = 5 'トリガディレイ回数を指定

lpAInp.ScanClk = 399 'スキャンクロックを指定

lpAInp.SmpClk = 799 'サンプリングクロックを指定

lpAInp.DataFmt = 0 '変換データ形式を指定

lpAInp.MemBufType = 0 'バッファメモリ形式を指定

lpAInp.IntFactor = 0 '割り込み要因を指定

lpAInp.RptNum = 0 'リピート回数を指定

dwRet = AioInpBdMem(hDrv, InpMode, lpAInp, 0, 0, 0, 0) 'サンプリング終了の確認

Dim Sts As Integer, Dnum As Integer Dim Cnt As Long

Do While (True)

dwRet = AioSts(hDrv, Sts, Cnt, Dnum)

'ステータスの取得 If Sts = 0 Then Exit Do

Loop

'データの取得

Dim lpARead As AREAD

Dim InpBuf(19) As Integer lpARead.ScanNo = 0

dwRet = AioSts(hDrv, Sts, Cnt, Dnum) lpARead.ScanNum = Cnt / lpAInp.Channels

lpARead.Buf = LpWord(InpBuf(0)) 'InpBufの先頭を指定 dwRet = AioReadBuf(hDrv, lpARead)

'電圧値への変換 Dim Volt As Single For i = 0 To 19

Volt = BinaryToVI(-10#, 10#, 1, 12, InpBuf(i))

'最小値-10V、最大値10V、ゲイン1倍、分解能12ビット 'ここへ変換した電圧値を表示するコードを追加してください Next i

'終了処理

dwRet = AioClose(hDrv)

ドキュメント内 API-PAC(W32)RM/AIO (ページ 45-51)