ここでは、入力転送(サンプリング)を行う上での代表的なパターンにおけるバッファと関数の使用方法について説明します。
パターン1:有限データ数、データをサンプリング後に取得
1回転送を行い、データをサンプリング終了後に取得する場合です。
処理
この場合、バッファサイズは欲しいデータ数のサイズ以上用意する必要があります。
バッファの繰り返し指定は、CNTS_WRITE_ONCE を指定します。データ入力個数が決まっている場合には、ストップ条件をCNTS_STOP_NUM
に指定して、CntSetSamplingStopNumber
関数を使用し指定個数で転送を完了するようにしてください。
転送を開始した後は、完了イベントを待つか、またはステータス取得関数でステータスビットCNTS_STATUS_BMSTOP が立つまで、sleepなどの関数でウェイトを入れながらループで待ちます。
パターン2:有限データ数、データをサンプリングしながら取得
1回転送を行い、データをサンプリング中に取得して、使用する場合です。
処理 処理
処理
この場合、バッファサイズは欲しいデータ数のサイズ以上用意する必要があります。
バッファの繰り返し指定は、CNTS_WRITE_ONCE を指定します。データ入力個数が決まっている場合には、ストップ条件をCNTS_STOP_NUM
に指定して、CntSetSamplingStopNumber
関数を使用し指定個数で転送を完了するようにしてください。
転送中は、転送個数取得関数(CntGetSamplingCount)でデータの入っている位置を確かめながら、処理を行います。
途中、ステータス関数でのチェックを行い、エラーなどで終了していないかを確認しながら処理を行ってください。
システムに負荷をかけないためには、ループ中でsleepなどの関数でウェイトを入れてください。
パターン3:無限データ数、全てのデータを取得
無限転送を行い、一定個数データを取得したら、ファイルにデータを格納するなどの処理を行う場合です。
処理 処理
処理
転送個数の確認は、指定個数転送完了イベントを使用するか、システムタイマ等で転送個数取得関数を使用して行います。
アプリケーションはリードポインタからライトポインタまで処理をシステムタイマまたはイベントにより周期的に行います。
この場合注意しなければならないのは、どこまでデータを処理したのかを示すリードポインタと、バッファのどこまでデータが書かれているかを示すライトポインタをユーザープログラムで管理しなければならない点です。
リードポインタ/ライトポインタは、バッファサイズまで転送すると、折り返して0に戻るカウンタです。
ライトポインタは、CntGetSamplingWritePointer
を使用して求めます。
リードポインタは、前回データ処理時のライトポインタです。
パターン4:無限データ数、ライトポインタを取得して、任意の箇所から任意のデータ数を取得
無限転送を行い、ある任意の条件が成立したら任意の箇所から任意のデータ数を取得するという場合です。
この場合も、リードポインタとライトポインタの管理が必要になります。
パターン3を参考にしてください。