12.2 サンプリングの方法

1. 連続してサンプリングを行うには

連続してサンプリングを行うには、AdSetSamplingConfig関数にてサンプリング条件を設定してから、AdStartSampling関数でサンプリングを開始します。サンプリングデータの取得はAdGetSamplingData関数にて行います。
バスマスタ方式のデバイスでスタートトリガ、ストップトリガなど詳細に設定して使用する場合には、AdBmSetSamplingConfig関数AdBmGetSamplingData関数を使用します。

設定例(C言語):

HANDLE      hDeviceHandle;
ADSMPLREQ   AdSmplConfig;
ULONG       ulSmplNum;
WORD        wSmplData[1024][2];
hDeviceHandle = AdOpen( "FBIAD1" );

// サンプリング条件の取得
AdGetSamplingConfig( hDeviceHandle, &AdSmplConfig );

AdSmplConfig.ulChCount = 2;
AdSmplConfig.SmplChReq[0].ulChNo = 1;
AdSmplConfig.SmplChReq[0].ulRange = AD_5V;
AdSmplConfig.SmplChReq[1].ulChNo = 2;
AdSmplConfig.SmplChReq[1].ulRange = AD_5V;
AdSmplConfig.ulSamplingMode = AD_IO_SAMPLING;
AdSmplConfig.ulSmplNum = 1024;
AdSmplConfig.ulSmplEventNum = 0;
AdSmplConfig.fSmplFreq = 1000.0;
AdSmplConfig.ulTrigPoint = AD_TRIG_START;
AdSmplConfig.ulTrigMode = AD_FREERUN;
AdSmplConfig.lTrigDelay = 0;
AdSmplConfig.ulTrigCh = 1;
AdSmplConfig.fTrigLevel1 = 0.0;
AdSmplConfig.fTrigLevel2 = 0.0;
AdSmplConfig.ulEClkEdge = AD_DOWN_EDGE;
AdSmplConfig.ulATrgPulse = AD_LOW_PULSE;
AdSmplConfig.ulTrigEdge = AD_DOWN_EDGE;
AdSmplConfig.ulTrigDI = 1;
AdSmplConfig.ulFastMode = AD_NORMAL_MODE;
// サンプリング条件の設定
AdSetSamplingConfig( hDeviceHandle, &AdSmplConfig );
// サンプリングの開始
AdStartSampling( hDeviceHandle, FLAG_SYNC );
// データの取得
ulSmplNum = 1024;
AdGetSamplingData( hDeviceHandle, &wSmplData[0][0], &ulSmplNum );	
	:
	:
 

2. 1件のサンプリングを行うには

1件のサンプリングを行うには、AdInputAD関数を使用します。AdInputAD関数を実行するたびに指定チャンネルの1件サンプリングが出来ます。

設定例(C言語):

HANDLE      hDeviceHandle;
ADSMPLCHREQ AdSmplChReq[2];
WORD        wData[2];
hDeviceHandle = AdOpen( "FBIAD1" );
AdSmplChReq[0].ulChNo = 1;
AdSmplChReq[0].ulRange = AD_5V;
AdSmplChReq[1].ulChNo = 2;
AdSmplChReq[1].ulRange = AD_5V;
// 1件のサンプリング実行
AdInputAD( hDeviceHandle, 2, AD_INPUT_SINGLE, &AdSmplChReq[0], &wData[0]);
	:
	:

 

3. 複数枚のデバイスを同期させてサンプリングするには

複数枚同期サンプリング機能を使用することによりサンプリングを同期させることができます。1枚のデバイスをマスタとして残りのデバイスをスレーブとして処理を行います。
同期サンプリングを行うデバイスに対してそれぞれ、AdSetSamplingConfig関数にてサンプリング条件を設定してから、スレーブデバイスに対してそれぞれAdSyncSampling関数を実行します。そして最後にマスタデバイスで、AdSyncSampling関数を実行することにより、サンプリングが同期して開始します。
サンプリングデータの取得はそれぞれのデバイスに対してAdGetSamplingData関数を実行します。
バスマスタ方式のデバイスを使用する場合には、AdBmSetSamplingConfig関数AdBmGetSamplingData関数を使用することも出来ます。

設定例(C言語):

HANDLE     hDeviceMaster;
HANDLE     hDeviceSlave1;
HANDLE     hDeviceSlave2;
ADSMPLREQ  AdConfigMaster;
ADSMPLREQ  AdConfigSlave1;
ADSMPLREQ  AdConfigSlave2;
WORD       wDataMaster[1024][2];
WORD       wDataSlave1[1024][2];
WORD       wDataSlave2[1024][2];
ULONG      ulSmplNum;
hDeviceMaster = AdOpen( "FBIAD1" );
hDeviceSlave1 = AdOpen( "FBIAD2" );
hDeviceSlave2 = AdOpen( "FBIAD3" );
AdConfigMaster.ulChCount = 2;
AdConfigMaster.SmplChReq[0].ulChNo = 1;
AdConfigMaster.SmplChReq[0].ulRange = AD_5V;
AdConfigMaster.SmplChReq[1].ulChNo = 2;
AdConfigMaster.SmplChReq[1].ulRange = AD_5V;
AdConfigMaster.ulSamplingMode = AD_IO_SAMPLING;
AdConfigMaster.ulSingleDiff = AD_INPUT_SINGLE;
AdConfigMaster.ulSmplNum = 1024;
AdConfigMaster.ulSmplEventNum = 0;
AdConfigMaster.fSmplFreq = 1000.0;
AdConfigMaster.ulTrigPoint = AD_TRIG_START;
AdConfigMaster.ulTrigMode = AD_FREERUN;
AdConfigMaster.lTrigDelay = 0;
AdConfigMaster.ulTrigCh = 1;
AdConfigMaster.fTrigLevel1 = 0.0;
AdConfigMaster.fTrigLevel2 = 0.0;
AdConfigMaster.ulEClkEdge = AD_DOWN_EDGE;
AdConfigMaster.ulATrgPulse = AD_LOW_PULSE;
AdConfigMaster.ulTrigEdge = AD_DOWN_EDGE;
AdConfigMaster.ulTrigDI = 1;
AdConfigMaster.ulFastMode = AD_NORMAL_MODE;
// サンプリング条件の設定(マスタデバイス)
AdSetSamplingConfig( hDeviceMaster, &AdConfigMaster );
AdConfigSlave1.ulChCount = 2;
AdConfigSlave1.SmplChReq[0].ulChNo = 1;
AdConfigSlave1.SmplChReq[0].ulRange = AD_5V;
AdConfigSlave1.SmplChReq[1].ulChNo = 2;
AdConfigSlave1.SmplChReq[1].ulRange = AD_5V;
	:
	:
// サンプリング条件の設定(スレーブデバイス1)
AdSetSamplingConfig( hDeviceSlave1, &AdConfigSlave1 );
AdConfigSlave2.ulChCount = 2;
AdConfigSlave2.SmplChReq[0].ulChNo = 1;
AdConfigSlave2.SmplChReq[0].ulRange = AD_5V;
AdConfigSlave2.SmplChReq[1].ulChNo = 2;
AdConfigSlave2.SmplChReq[1].ulRange = AD_5V;
	:
	:
// サンプリング条件の設定(スレーブデバイス2)
AdSetSamplingConfig( hDeviceSlave2, &AdConfigSlave2 );
// スレーブデバイスから実行
AdSyncSampling( hDeviceSlave1, AD_SLAVE_MODE );
AdSyncSampling( hDeviceSlave2, AD_SLAVE_MODE );
// マスタデバイスで実行
AdSyncSampling( hDeviceMaster, AD_MASTER_MODE );
	:
	:
// データの取得(マスタデバイス)
ulSmplNum = 1024;
AdGetSamplingData( hDeviceMaster, &wDataMaster[0][0], &ulSmplNum );
// データの取得(スレーブデバイス1)
ulSmplNum = 1024;
AdGetSamplingData( hDeviceSlave1, &wDataSlave1[0][0], &ulSmplNum );	
// データの取得(スレーブデバイス2)
ulSmplNum = 1024;
AdGetSamplingData( hDeviceSlave2, &wDataSlave2[0][0], &ulSmplNum );	
	:
	:

その他の方法としては、外部クロックを使用し、全てのデバイスに同一クロックを入力する方法や、外部トリガを、全てのデバイスに入力し、全てのデバイスでサンプリングを同時に開始する方法などがあります。

使用するデバイスにより入力端子が異なります。(各製品で使用する端子の一覧

 

4. 非同期のサンプリングでイベントを使用するには

イベントを使用するためにはイベントオブジェクトのハンドルをAdSetBoardConfig関数にて登録します。イベントオブジェクトはWin32APIのCreateEvent関数で作成します。サンプリング条件をAdSetSamplingConfig関数にて設定し、AdStartSampling関数を非同期で実行します。サンプリング終了時にイベントがシグナル状態になるので、これをWin32APIのWaitForSingleObject関数をにて検出します。WaitForSingleObject関数にてイベントがシグナル状態になるのを待っている間は、WaitForSingleObject関数以降の処理は実行されません。
サンプリングデータの取得はAdGetSamplingData関数にて行います。
バスマスタ方式のデバイスを使用する場合には、AdBmSetSamplingConfig関数AdBmGetSamplingData関数を使用することも出来ます。

設定例(C言語):

HANDLE     hDeviceHandle;
HANDLE     hEvent;
ADSMPLREQ  AdSmplConfig;
ULONG      ulSmplNum;
WORD       wSmplData[1024][2];
hDeviceHandle = AdOpen( "FBIAD1" );
// イベントハンドルの登録
hEvent = CreateEvent(0, TRUE, FALSE, NULL);
AdSetBoardConfig( hDeviceHandle, hEvent, NULL, 0 );
AdSmplConfig.ulChCount = 2;
AdSmplConfig.SmplChReq[0].ulChNo = 1;
AdSmplConfig.SmplChReq[0].ulRange = AD_5V;
AdSmplConfig.SmplChReq[1].ulChNo = 2;
AdSmplConfig.SmplChReq[1].ulRange = AD_5V;
AdSmplConfig.ulSamplingMode = AD_IO_SAMPLING;
AdSmplConfig.ulSingleDiff = AD_INPUT_SINGLE;
AdSmplConfig.ulSmplNum = 1024;
AdSmplConfig.ulSmplEventNum = 0;
AdSmplConfig.fSmplFreq = 1000.0;
AdSmplConfig.ulTrigPoint = AD_TRIG_START;
AdSmplConfig.ulTrigMode = AD_FREERUN;
AdSmplConfig.lTrigDelay = 0;
AdSmplConfig.ulTrigCh = 1;
AdSmplConfig.fTrigLevel1 = 0.0;
AdSmplConfig.fTrigLevel2 = 0.0;
AdSmplConfig.ulEClkEdge = AD_DOWN_EDGE;
AdSmplConfig.ulATrgPulse = AD_LOW_PULSE;
AdSmplConfig.ulTrigEdge = AD_DOWN_EDGE;
AdSmplConfig.ulTrigDI = 1;
AdSmplConfig.ulFastMode = AD_NORMAL_MODE;
// サンプリング条件の設定
AdSetSamplingConfig( hDeviceHandle, &AdSmplConfig );
// 連続サンプリングの開始(非同期)
AdStartSampling( hDeviceHandle, FLAG_ASYNC );
// サンプリング終了のイベントがシグナル状態になるのを待つ
WaitForSingleObject(hEvent, INFINITE);
// データの取得
ulSmplNum = 1024;
AdGetSamplingData( hDeviceHandle, &wSmplData[0][0], &ulSmplNum );	
	:
	:
 

5. トリガによるサンプリング開始するには

トリガによるサンプリングを開始するには、AdSetSamplingConfig関数でサンプリング条件のトリガ位置とトリガの種類を設定します。AdStartSampling関数にてサンプリングを開始します。
サンプリングデータの取得はAdGetSamplingData関数にて行います。
バスマスタ方式のデバイスを使用する場合には、AdBmSetSamplingConfig関数AdBmGetSamplingData関数を使用することも出来ます。

設定例(C言語):

HANDLE     hDeviceHandle;
ADSMPLREQ  AdSmplConfig;
ULONG      ulSmplNum;
WORD       wSmplData[1024][2];
hDeviceHandle = AdOpen( "FBIAD1" );
AdSmplConfig.ulChCount = 2;
AdSmplConfig.SmplChReq[0].ulChNo = 1;
AdSmplConfig.SmplChReq[0].ulRange = AD_5V;
AdSmplConfig.SmplChReq[1].ulChNo = 2;
AdSmplConfig.SmplChReq[1].ulRange = AD_5V;
AdSmplConfig.ulSamplingMode = AD_IO_SAMPLING;	
AdSmplConfig.ulSingleDiff = AD_INPUT_SINGLE;
AdSmplConfig.ulSmplNum = 1024;
AdSmplConfig.ulSmplEventNum = 0;
AdSmplConfig.fSmplFreq = 1000.0;
AdSmplConfig.ulTrigPoint = AD_TRIG_START;       // トリガ位置の設定:トリガによるサンプリング開始
AdSmplConfig.ulTrigMode = AD_EXTTRG;            // トリガの種類の設定:外部トリガ
AdSmplConfig.lTrigDelay = 0;
AdSmplConfig.ulTrigCh = 1;
AdSmplConfig.fTrigLevel1 = 0.0;
AdSmplConfig.fTrigLevel2 = 0.0;
AdSmplConfig.ulEClkEdge = AD_DOWN_EDGE;
AdSmplConfig.ulATrgPulse = AD_LOW_PULSE;
AdSmplConfig.ulTrigEdge = AD_DOWN_EDGE;
AdSmplConfig.ulTrigDI = 1;
AdSmplConfig.ulFastMode = AD_NORMAL_MODE;
// サンプリング条件の設定
AdSetSamplingConfig( hDeviceHandle, &AdSmplConfig );
// トリガ待ち状態にし、トリガ条件成立後に連続サンプリングが開始されます
AdStartSampling( hDeviceHandle, FLAG_SYNC );
// データの取得
ulSmplNum = 1024;
AdGetSamplingData( hDeviceHandle, &wSmplData[0][0], &ulSmplNum );	
	:
	:

使用するデバイスにより入力端子が異なります。(各製品で使用する端子の一覧

 

6. 外部クロックによるサンプリング開始するには

外部クロックによるサンプリングを開始するには、AdSetSamplingConfig関数でサンプリング条件で外部クロックを使用する設定をします。外部クロックにするためにはサンプリング周波数の設定を 0Hz にします。AdStartSampling関数を実行して外部からクロックが入力されるとサンプリングを開始します。
サンプリングデータの取得はAdGetSamplingData関数にて行います。
バスマスタ方式のデバイスを使用する場合には、AdBmSetSamplingConfig関数AdBmGetSamplingData関数を使用することも出来ます。

設定例(C言語):

HANDLE     hDeviceHandle;
ADSMPLREQ  AdSmplConfig;
ULONG      ulSmplNum;
WORD       wSmplData[1024][2];
hDeviceHandle = AdOpen( "FBIAD1" );
AdSmplConfig.ulChCount = 2;
AdSmplConfig.SmplChReq[0].ulChNo = 1;
AdSmplConfig.SmplChReq[0].ulRange = AD_5V;
AdSmplConfig.SmplChReq[1].ulChNo = 2;
AdSmplConfig.SmplChReq[1].ulRange = AD_5V;
AdSmplConfig.ulSamplingMode = AD_IO_SAMPLING;	
AdSmplConfig.ulSingleDiff = AD_INPUT_SINGLE;
AdSmplConfig.ulSmplNum = 1024;
AdSmplConfig.ulSmplEventNum = 0;
AdSmplConfig.fSmplFreq = 0.0;                   // 外部クロックを使用する
AdSmplConfig.ulTrigPoint = AD_TRIG_START;
AdSmplConfig.ulTrigMode = AD_FREERUN;
AdSmplConfig.lTrigDelay = 0;
AdSmplConfig.ulTrigCh = 1;
AdSmplConfig.fTrigLevel1 = 0.0;
AdSmplConfig.fTrigLevel2 = 0.0;
AdSmplConfig.ulEClkEdge = AD_DOWN_EDGE;
AdSmplConfig.ulATrgPulse = AD_LOW_PULSE;
AdSmplConfig.ulTrigEdge = AD_DOWN_EDGE;
AdSmplConfig.ulTrigDI = 1;
AdSmplConfig.ulFastMode = AD_NORMAL_MODE;
// サンプリング条件の設定
AdSetSamplingConfig( hDeviceHandle, &AdSmplConfig );
// 外部クロックが入力されると連続サンプリングが開始されます
AdStartSampling( hDeviceHandle, FLAG_SYNC );
// データの取得
ulSmplNum = 1024;
AdGetSamplingData( hDeviceHandle, &wSmplData[0][0], &ulSmplNum );	
	:
	:

使用するデバイスにより入力端子が異なります。(各製品で使用する端子の一覧

 

7. トリガ入力される度に1件のサンプリングをするには

AdTriggerSampling関数を使用することでトリガが入力される度に1件のサンプリングが出来ます。
サンプリングデータの取得はAdGetSamplingData関数にて行います。

設定例(C言語):

HANDLE     hDeviceHandle;
ULONG      ulSmplNum;
WORD       wSmplData[1024];
hDeviceHandle = AdOpen( "FBIAD1" );
// トリガが入力される度に1件のサンプリングが行われます
AdTriggerSampling( hDeviceHandle, 1, AD_5V, AD_INPUT_SINGLE, AD_EXTTRG, AD_DOWN_EDGE, 1024 );
// データの取得
ulSmplNum = 1024;
AdGetSamplingData( hDeviceHandle, &wSmplData[0], &ulSmplNum );	
	:
	:

その他にも、外部トリガをクロックとみなすことにより外部クロックを使用した連続サンプリングでも同様の処理ができます。

使用するデバイスにより入力端子が異なります。(各製品で使用する端子の一覧

 

8. CSI/CBI-320110, CTP/CPZ-360810, LPC-320910, PEX-320910でサンプリングをするには

CSI/CBI-320110, CTP/CPZ-360810, LPC-320910, PEX-320910でサンプリングを行うには、AdMemSetSamplingConfig関数にてサンプリング条件を設定してから、AdStartSampling関数でサンプリングを開始します。
サンプリングデータの取得はAdGetSamplingData関数にて行います。

設定例(C言語):

HANDLE         hDeviceHandle;
ADMEMSMPLREQ   AdSmplConfig;
ULONG          ulSmplNum;
WORD           wSmplData[1024][2];
hDeviceHandle = AdOpen( "FBIAD1" );

// サンプリング条件の設定
AdMemGetSamplingConfig( hDeviceHandle, &AdSmplConfig );

AdSmplConfig.ulChCount = 2;
AdSmplConfig.SmplChReq[0].ulChNo = 1;
AdSmplConfig.SmplChReq[0].ulRange = AD_1V;
AdSmplConfig.SmplChReq[1].ulChNo = 2;
AdSmplConfig.SmplChReq[1].ulRange = AD_1V;
AdSmplConfig.fSmplFreq = 1000.0;
AdSmplConfig.ulStopMode = AD_STOP_SOFT;
AdSmplConfig.ulPreTrigDelay = 1024;
AdSmplConfig.ulPostTrigDelay = 0;

// サンプリング条件の設定
AdMemSetSamplingConfig( hDeviceHandle, &AdSmplConfig );
// サンプリングの開始(非同期サンプリング)
AdStartSampling( hDeviceHandle, FLAG_ASYNC );
  :
トリガ待ち状態
  :
// ソフトトリガの入力
AdStopSampling( hDeviceHandle );
  :
  :
// データの取得
ulSmplNum = 1024;
AdGetSamplingData( hDeviceHandle, &wSmplData[0][0], &ulSmplNum );	

 


[ 戻 る ]

© 2000, 2016 Interface Corporation. All rights reserved.