チュートリアル visual c++によるad入門書 -...

94
www.interface.co.jp チュートリアル Visual C++によるAD入門書

Upload: others

Post on 24-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

  • www.interface.co.jp

    チュートリアル

    Visual C++によるAD入門書

  • www.interface.co.jp

    商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。 保障の内容と制限 弊社はドキュメント内の情報の正確さに万全を期しています。万一、誤記または誤植等があった

    場合、弊社は予告なく改訂する場合があります。ドキュメントまたはドキュメント内の情報に起

    因するいかなる損害に対しても弊社は責任を負いません。 製品に含まれるバグ、あるいは製品の供給(納期遅延),性能、もしくは使用に起因する付帯的損害もしくは間接的損害に対して、弊社に全面的に責がある場合でも、弊社はその製品に対する改良

    (正常に動作する)、代品交換までとし、金銭面での賠償の責任は一切負わないものとしますので、予めご了承ください。 ドキュメント内の図や表は説明のためであり、ユーザ個別の応用事例により変化する場合があり

    ます。 著作権,知的所有権 弊社は本製品に含まれるおよび本製品に対する権利や知的所有権を保持しています。 本製品はコンピュータ ソフトウェア(プログラム),図,文章,写真等を含んでいます。 複製の禁止 弊社の許可なく、本製品(ドキュメント含む)の全て、または一部に関わらず、複製,改変等を行うことはできません。 責任の制限 弊社は、弊社または再販売者の予見の有無に関わらず、発生したいかなる特別損害,偶発的損害,間接的な損害,重大な損害について、責任を負いません。 補償の内容 本ドキュメントで使用している弊社製品の補償については、各製品のマニュアルを参照してくだ

    さい。

    本書の内容の一部または全部を、無断で転載することを禁止します。 本書の内容は、将来予告なく変更することがありますので、予めご了承ください。 © 2000, 2007 Interface Corporation. All rights reserved.

  • TUT-0020

    - 1 - Interface Corporation

    改訂履歴

    Ver. 年 月 改 訂 内 容 1.8 2007年12月 ●誤記修正。

    ●『第5章 DLLリファレンス』更新。 1.7 2007年4月 ●インストール説明 Windows Vista追加。

    ●『第5章 5.1 FbiAd.DLL関数リファレンス』 AdMemTriggerSamplingのパラメータ説明修正。

    1.6 2006年9月 ●対応型式追加。 ●関数,識別子,構造体の追加。

    1.5 2006年2月 ●対応型式追加。 ●関数追加。

    1.4 2004年11月 ●対応型式追加。 ●付属ソフトウェアの表記を削除。 ●インストール説明 Windows XP/Server 2003/2000へ変更。 ●技術資料一覧更新。

    1.3 2003年10月 ●対象型式の追加。 ●関数,識別子,構造体の追加。

    1.2 2003年7月 ●対象型式の追加。 ●関数,識別子,構造体の追加。

    1.1 2003年2月 ●対象型式の追加。 ●誤記修正。 ●関数,構造体の追加。

    1.0 2000年11月 新規作成

    本チュートリアルをご使用の際は、必ず各製品型式の最新のドキュメント(USER'S MANUAL, Help)を併せて参照してください。また、最新のドライバソフトウェアをご使用ください。 USER'S MANUAL, ドライバソフトウェアは弊社Web site(www.interface.co.jp)からダウンロードできます。(Helpはドライバソフトウェアに含まれています)

  • TUT-0020

    Interface Corporation - 2 -

    目 次

    第 1章 アナログ出力概要 6

    1.1 A/Dコンバータ .............................................................................................................................. 6 1.2 A/Dコンバータの用途 .................................................................................................................. 7 1.3 分解能と精度 ................................................................................................................................. 7 1.4 シングルエンド入力と差動入力................................................................................................. 9 1.5 バイポーラとユニポーラ........................................................................................................... 10 1.6 変換時間とサンプリング周波数............................................................................................... 10 1.7 標本化定理 ................................................................................................................................... 11 1.8 マルチADC方式とマルチプレクサ方式 .................................................................................. 11 1.9 データ転送方式 ........................................................................................................................... 13 1.10 アナログ入力製品を使用時の指針 ........................................................................................ 15

    第 2章 AD製品のインストール 16

    2.1 コンピュータへの設置方法....................................................................................................... 16

    第 3章 ソフトウェアのインストール 17

    3.1 Windows用.................................................................................................................................... 17 3.1.1 デバイスドライバのインストール................................................................................ 18 ■Windows Vistaをご使用の場合 ....................................................................................... 18 ■Windows XP Embedded, Windows XP, Windows Server 2003をご使用の場合.......... 21 ■Windows 2000をご使用の場合 ....................................................................................... 23

    3.2 ソフトウェアセットアップ....................................................................................................... 24

    第 4章 Visual C++によるAD制御 25

    4.1 ピンアサインメント................................................................................................................... 26 4.2 DLLプロシージャ呼び出しによるプログラミング(概要).................................................... 29 4.3 AD製品制御概略 ......................................................................................................................... 29

    第 5章 チュートリアル 30

    5.1 アナログ入力[1] ..................................................................................................................... 31 Step1.メインウィンドウ作成 ...................................................................................................... 31 Step2.DLLプロシージャ宣言と構造体定義 .............................................................................. 33 Step3.初期化処理と終了処理 ...................................................................................................... 37 Step4.サンプリング ...................................................................................................................... 39

    5.2 アナログ入力[2] ..................................................................................................................... 43 Step1.ダイアログ作成 .................................................................................................................. 43 Step2. DLLプロシージャ宣言と構造体定義 ............................................................................. 43 Step3.サンプリング ...................................................................................................................... 44

    5.3 ファイル出力 ............................................................................................................................... 53 5.4 コールバック関数 ....................................................................................................................... 55

    Step1.メインウィンドウの作成 .................................................................................................. 55 Step2.コールバック処理の作成 .................................................................................................. 56

  • TUT-0020

    - 3 - Interface Corporation

    第 6章 DLLリファレンス 59

    6.1 FbiAd.DLL関数リファレンス.................................................................................................... 59 6.1.1 DLL関数一覧 1 ................................................................................................................. 59 6.1.2 DLL関数一覧 2 ................................................................................................................. 61 6.1.3 DLL関数一覧 3 ................................................................................................................. 63 6.1.4 DLL関数一覧 4 ................................................................................................................. 65 6.1.5 DLL関数一覧 5 ................................................................................................................. 67 6.1.6 DLL関数一覧 6 ................................................................................................................. 69 6.1.7 DLL関数一覧 7 ................................................................................................................. 71 6.1.8 DLL関数一覧 8 ................................................................................................................. 73 6.1.9 DLL関数一覧 9 ................................................................................................................. 75 6.1.10 DLL関数一覧 10 ............................................................................................................. 77 6.1.11 DLL関数一覧 11 ............................................................................................................. 79 6.1.12 DLL関数一覧 12 ............................................................................................................. 80 6.1.13 DLL関数一覧 13 ............................................................................................................. 82 6.1.14 DLL関数一覧 14 ............................................................................................................. 84 6.1.15 DLL関数一覧 15 ............................................................................................................. 86

    技術資料紹介 88

  • TUT-0020

    Interface Corporation - 4 -

    はじめに

    平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、初めて弊社AD製品を利用し、Visual C++にて制御プログラムの作成を行われる方を対象に、製品の導入からプログラム作成までに関し説明したものです。プログラム初心者の方が弊社製品をご利用頂き、またVisual C++にてプログラムの開発を行われる際の手助けになればと考えております。 記述する内容に関しましては、基本的なことにとどまっております。 また、弊社Web site(www.interface.co.jp)ではFAQ, 製品マニュアル, および本チュートリアル記載のサンプルプログラムのソース(BPC-0810)の公開を行っておりますので、こちらも併せてご覧頂けますと、より一層ご理解を深めて頂けるものと思います。

    注意事項

    本冊子では、使用する環境をWindows Vista/XP/XP Embedded/Server 2003/2000+Visual C++を想定し、記載しております。 Windows NT/Me/98/95をご利用の場合、インタフェースモジュールのインストール方法が本冊子に記載した内容とは異なりますのでご注意ください。こちらに関しましては、弊社製品マニュアル

    をご確認ください。 対応OSはインタフェースモジュール型式によって異なりますので、対応ソフトウェア(GPC-3100)のReadmeもしくはHelpでご確認ください。

  • TUT-0020

    - 5 - Interface Corporation

    対象環境 本チュートリアルは以下の制約事項があります。 対象型式 (PCI)

    PCI-3120 PCI-3135 PCI-3161 PCI-3166 PCI-3171A PCI-3174 PCI-3177C PCI-3180 PCI-320416 PCI-3523A PCI-360116

    PCI-3126 PCI-3153 PCI-3163 PCI-3168C PCI-3172A PCI-3175 PCI-3178 PCI-320112 PCI-3521 PCI-3525 PCI-360216

    PCI-3133 PCI-3155 PCI-3165 PCI-3170A PCI-3173A PCI-3176 PCI-3179 PCI-320412 PCI-3522A PCI-360112

    対象型式 (CPZ)

    CPZ-3120A CPZ-3126 CPZ-3165 CPZ-3170 CPZ-3173 CPZ-3177 CPZ-3180A CPZ-3182 CPZ-320416 CPZ-3523

    CPZ-3120B CPZ-3133 CPZ-3167 CPZ-3171 CPZ-3174 CPZ-3178 CPZ-3180B CPZ-3183 CPZ-3521 CPZ-360112

    CPZ-3120C CPZ-3135 CPZ-3168 CPZ-3172 CPZ-3175 CPZ-3179 CPZ-3180C CPZ-320412 CPZ-3522 CPZ-360116

    対象型式 (CTP)

    CTP-3120A CTP-3126 CTP-3165 CTP-3170 CTP-3173 CTP-3177 CTP-3180A CTP-3182 CTP-320416 CTP-3523 CTP-360116

    CTP-3120B CTP-3133 CTP-3167 CTP-3171 CTP-3174 CTP-3178 CTP-3180B CTP-3183 CTP-3521 CTP-3525

    CTP-3120C CTP-3135 CTP-3168 CTP-3172 CTP-3175 CTP-3179 CTP-3180C CTP-320412 CTP-3522 CTP-360112

    対象型式 (CSI)

    CSI-320110 CSI-320412 CSI-360116

    CSI-320212 CSI-320416

    CSI-320312 CSI-360112

    対象型式 (PEX)

    PEX-320724 PEX-321116 PEX-321416

    PEX-320910 PEX-321216

    PEX-321012 PEX-321316

    対象型式 (LPC)

    LPC-320724 LPC-321116 LPC-321416

    LPC-320910 LPC-321216

    LPC-321012 LPC-321316

    対象ユーザ 制御用電子機器および、コンピュータ等に関して基本的な知識を有している方。

    ※ 本冊子は上記の弊社製品型式のみに対応しています。 製品の詳細は弊社Web siteを参照してください。

  • TUT-0020

    Interface Corporation - 6 -

    第1章 アナログ出力概要

    これまでに、アナログ(analog)という言葉を一度は耳にしたことがあると思います。 ではアナログとは何でしょう。しばしばデジタルという言葉と対比し使われますが、デジタルが

    「1つ2つと区切って数えられる」のに対し、アナログとは「連続した量で、1つ2つと区切って数えられない」ものを言います。 デジタル時計とアナログ時計を例に挙げてみます。

    デジタル時計では、「1:53」と単純に読み取ればよいわけですが、アナログ時計で仮に小数点以下を読み取っていくとしたらいかがでしょう。「1:53」, 「1:53.1」, 「1:53.124」, 「1:53.1245……..」と、きりがありません。

    1.1 A/Dコンバータ

    私たちが普段の生活で目や耳にする「光」, 「音」の情報は全てアナログ信号です。 今のコンピュータでは音楽や映像の録音や録画ができますが、本来デジタル信号しか処理できな

    いコンピュータが、一体どうやってこのようなアナログ信号を取り扱っているのでしょうか? 実は、ある段階でアナログ信号をデジタル信号に変換し、コンピュータに処理させているのです。

    これをAD変換といいます。 アナログ信号からデジタル信号に変換する装置を、A/Dコンバータと言います。A/Dコンバータとは、Analog to Digital Converterの略で、アナログ・デジタル変換器と訳され、これによりアナログ信号をデジタル信号に変換することができるのです。 本冊子で紹介するアナログ入力製品もA/Dコンバータが搭載された、インタフェースモジュールです。 「光」, 「音」, 「熱」等の変化は、専用の「センサ」を使用することで、電圧の変化として捉えることができます。この電圧はアナログ信号となり、A/Dコンバータによってデジタル信号に変換され、ハードディスク等の記録媒体に記録されます。

  • TUT-0020

    - 7 - Interface Corporation

    1.2 A/Dコンバータの用途

    私たちの身の回りにある、全ての事象はアナログ的な情報として成り立っています。しかし、コ

    ンピュータは直接アナログ情報を扱うことができないため、A/Dコンバータでデジタル値に変換して、処理を行います。 A/Dコンバータを使った主な用途としては、 ・ 音声入力/音声認識 ・ 画像入力/画像認識 ・ 温度/湿度測定 ・ レーダー ・ 電圧/電流の計測

    等があります。

    1.3 分解能と精度

    アナログをデジタルに変換することは、連続した量を不連続な値に変換することを意味します。 ここで、0~1.0Vの電圧値を2ビットのデジタル値に変換するとします。 2ビットで表現できる値は、「00」「01」「10」「11」の4つとなります。従って、電圧をアナログ量からデジタル量に変換するには、これら4つのデジタル値のうちいずれか1つに変換しなければなりません。つまり、0~1.0Vまでの範囲を4で割った値(=0.25V)がデジタル値1つ分の幅となります。 2つの電圧値V1とV2がこの幅(0.25V)を越えると、デジタル値が変化しV1とV2の差が区別できるようになります。

    V1 V2 V1V2

    アナログ値 アナログ値

    デジタル値 デジタル値

    0.25V 0.25V

    2 つのアナログ値が0.25V範囲外

    デジタル値に差が出る

    2つのアナログ値が 0.25V範囲内

    デジタル値が同じ

  • TUT-0020

    Interface Corporation - 8 -

    この区別できる電圧の範囲、言い換えれば最小単位の1ビットに対するアナログ量を分解能といい、LSB(Least Significant Bit)として表現されます。一般的には分解能nビットといった具合に表現されています。入力電圧が0~5Vで分解能12ビットの時は、

    5 ÷ 4096 ≒ 0.00122(V)

    が、1LSBとなります。 AD変換されたデジタル値は、1LSBを単位とした離散値になります。このように、それ以上分割できない最小の単位(この場合LSB)に分割することを量子化といいます。 また、量子化することによって、連続した量が不連続な値になる際、誤差が必ず含まれてしまい

    ます。この誤差のことを量子化誤差といいます。 上記の場合、精度が±1LSBならば、-1.22mV~+1.22mVの範囲で誤差があることを示しています。したがって、誤差がもっとも大きい場合、測定値+1.22mVまたは測定値-1.22mVとなります。

    -1.22mV +1.22mV

    最大誤差

    測定値

    分解能をnビットと表現する場合、本来の分解能はフルスケール(FSR:Full Scale Range)を2のビット数乗で割った値となります。入力電圧が0~+5Vの場合はFSR=5、入力電圧が-5V~+5Vの場合はFSR=10となります。

    nFSRLSB2

    1 =

    12ビットのAD変換では、最小値0, 最大値4095(FFFh)となり、精度±0.04%FSRの場合、入力電圧が0~+10Vならば、FSRの±0.04%、つまり-0.004V~+0.004Vの範囲内で誤差があることを意味します。

    ★レンジの上限値 変換データのデジタル値の最大値に相当する電圧は、レンジの上限になりません。 例えば、12ビット分解能,±5Vレンジの時は4095が最大値となり、それに相当する電圧は 10÷4096×4095-5≒4.9975V となります。

    ★量子化誤差 高分解能のA/Dコンバータを使えば、より高精度のAD変換が可能です。 入力電圧が0~+5Vの時、12ビット分解能と16ビット分解能では、以下の違いが生じます。 12ビット分解能:5÷4096 ≒0.00122V(1.22mV) 16ビット分解能:5÷65536≒0.00007629V(76μV) ただ、高分解能のA/Dコンバータは比例して高価なので、計測に要求される精度に合わせて選択する必要があります。

  • TUT-0020

    - 9 - Interface Corporation

    1.4 シングルエンド入力と差動入力

    シングルエンド入力は、もっとも一般的な入力方式です。 信号源を、グランド線と信号線の2本の線で入力し、グランド線と信号線間の電圧が入力電圧としてAD変換されます。 これに対し、差動入力は信号源を3本の信号線で接続し入力する方式です。3本の信号線はそれぞれグランド線, 信号線(+), 信号線(-)です。入力するデータは、グランド線と信号線(+)間の電圧(A)とグランド線と信号線(-)間の電圧(B)の差、つまりA-Bの値が入力電圧としてAD変換されます。 アナログ信号はノイズにより信号そのものが変化します。このような場合、差動入力を行うこと

    で、同相ノイズの影響を受けにくくすることができます。一般的にノイズは、グランドに対して

    影響することが多く、シングルエンド入力ではデータに影響がでますが、差動入力についてはA, Bの電圧は影響を受けますが、A-Bの値は、ノイズ分が相殺され影響を受けていないデータが得られます。差動入力を図にすると下図のようになります。

    ノイズが加わっても… ノイズの影響を差し引いた

    データが得られるノイズ

    入力A(+)

    入力B(-)

    グランド

    入力A-Bの差がデータ

    差動入力の問題点は、入力に使用する信号線が、シングルエンド入力方式が2本の信号線で構成できるのに対して、3本の信号線を必要とすることです。 このため、 ・入力に使用するチャンネル数を多く確保したい場合は、シングルエンド入力 ・ノイズの影響をなるべく排したい場合は、差動入力 といった具合に、目的に応じて使い分けます。

  • TUT-0020

    Interface Corporation - 10 -

    1.5 バイポーラとユニポーラ

    アナログ入力は、入力電圧域の違いにより「ユニポーラ(unipolar)」と「バイポーラ(bipolar)」に区別することができます。ポーラとは「極」を意味し、それぞれ「単極性」, 「双極性」と訳されます。 電位差(最大入力電圧-最小入力電圧)が5Vの場合、ユニポーラでは最小入力電圧0Vから最大入力電圧+5Vの入力を行います。一方、バイポーラでは0Vを中心に最小入力電圧-2.5Vから最大入力電圧+2.5Vの出力を行います。

    0

    0.5

    1

    1.5

    2

    2.5

    3

    3.5

    4

    4.5

    5

    -2.5

    -2

    -1.5

    -1

    -0.5

    0

    0.5

    1

    1.5

    2

    2.5

    ユニポーラ バイポーラ

    電圧[V]電圧[V]

    時間→

    時間→

    1.6 変換時間とサンプリング周波数

    A/Dコンバータを用いて、アナログ信号をデジタル信号に変換する時、様々な方式を用いた回路で変換が行われます。 (変換には、逐次変換型, 積分型, 並列型等と呼ばれる変換方式が用いられます) アナログ信号をデジタル信号に変換するには、ある一定の時間が必要です。 カタログやマニュアルの仕様等に記載されている5μsや0.2μs等の値は、A/Dコンバータがデジタル信号に変換するために必要な時間を指します。 変換時間が5μsとは、A/Dコンバータがアナログ信号からデジタル信号への変換を開始し、その結果が得られるまでに、5μsかかることを意味します。

    ★変換時間とデータの取得にかかる時間の違い A/Dコンバータが変換にかかる時間とコンピュータのプログラムが、そのデータを受け取る時間は、同じではありません。 変換時間とは、インタフェースモジュール上のA/Dコンバータが変換結果を算出する時間です。 実際には、そこからデータがPCI/CompactPCIバスのバス信号線を経由しCPUを通して、データを格納する領域に値が書き込まれるまで、様々な要因が複雑に絡みます。 (それは、OS, 割込みのオーバーヘッド, メモリ, CPUの速度等です)

    これとは別の速度指標として、「サンプリング周波数」という用語があります。 サンプリング周波数とは、1秒間に何回AD変換するかを示します。単位はHzで表されます。 例えば、サンプリング周波数500Hzとは、1秒間に500回周期的にAD変換させることを意味します。 お客様がデバイスドライバに対して指示する速度指標は、通常こちらが使われます。

  • TUT-0020

    - 11 - Interface Corporation

    1.7 標本化定理

    下図は、9kHzの入力に対し10kHzでサンプリングした例です。 サンプリングした点を繋いでいくと、予想外の信号が現れてきます。 この予想外の擬似信号を「折り返し信号」と言います。

    このように、音声等の入力信号に対し正確にサンプリング(標本化)を行うためには、入力信号の周波数に対して、2倍以上の周波数でサンプリングする必要があります。 これを、標本化定理と言います。

    1.8 マルチADC方式とマルチプレクサ方式

    複数チャンネルの入力信号を取り扱う方式として、マルチプレクサ方式とマルチADC(同時変換)方式があります。 マルチADC方式とは、1つのチャンネルに対して、1つのA/Dコンバータが対に対応している方式です。

    チャンネル 1

    AIN1

    COM1

    A/D

    コンバータ

    チャンネル 2

    AIN2

    COM2

    A/D

    コンバータ

    チャンネル 3

    AIN3

    COM3

    A/D

    コンバータ

  • TUT-0020

    Interface Corporation - 12 -

    対して、マルチプレクサ方式とは、複数のチャンネルが1つのA/Dコンバータをマルチプレクサという切り替えスイッチで共有する方式です。

    チャンネル 1

    AIN1

    COM1

    A/D

    コンバータチャンネル 2

    AIN2

    COM2

    チャンネル 3

    AIN3

    COM3

    マ ル チ プ レ ク サ

    このため、複数のチャンネルをサンプリングすると、マルチADC方式とマルチプレクサ方式で実際のAD変換の時間にズレが生じます。

    マルチ ADC方式

    マルチプレクサ方式

    チャンネル 1

    チャンネル 2

    チャンネル 3

    チャンネル 1

    チャンネル 2

    チャンネル 3

    サンプリング サンプリング

    チャンネル 1

    チャンネル 2

    チャンネル 3

    チャンネル 1

    チャンネル 2

    チャンネル 3

    上図は、マルチADC方式とマルチプレクサ方式で、AD変換のタイミングを表したものです。 マルチADC方式では、各チャンネルに対してA/Dコンバータがあるため、同時にAD変換します。対してマルチプレクサ方式では、複数のチャンネルをマルチプレクサによって切り替えながら使

    用するため、AD変換の開始時刻に差が生じます。 両方式のメリット/デメリットを示します。

    マルチADC方式 マルチプレクサ方式 メリット 各チャンネルのAD変換に時間的

    なズレは生じません。 A/Dコンバータが1つで済むため、比較的安価に購入できます。

    デメリット A/Dコンバータが複数搭載されるため、どうしても高価になります。

    各チャンネルのAD変換に時間的なズレが生じます。

    マルチプレクサ方式では時間的なズレは生じますが、位相は保たれています。 サンプリングの同時性を重視したい場合はマルチADC、複数信号の同時性は重要視されないならマルチプレクサ、という風に選択すると良いでしょう。

  • TUT-0020

    - 13 - Interface Corporation

    1.9 データ転送方式

    アナログ信号からデジタル信号にAD変換された情報は、何らかの形でコンピュータ内のCPUに取り込む必要があります。 このCPUが、AD変換された情報にアクセスする方式にも様々なやり方があります。

    方 式 内 容

    I/O方式 AD変換された情報は、CPUがI/Oポートを経由して1つずつアクセスします。

    A/D

    コンバータ

    データ CPU

    データ取得

    AD変換されたデータは、次のサンプリングが開始される前に、そのデータを取り込まないと、次のデータで上書きされてしまいます。 システム構成は比較的簡素なため、一般に安価です。

    FIFO方式 AD変換された情報は、一旦インタフェースモジュール内のFIFOと呼ばれる バッファ領域に格納されます。 CPUは、このFIFOバッファにアクセスして、情報を取り出します。

    A/D

    コンバータ

    データ

    CPU

    データ取得データ

    データ

    FIFOバッファ

    AD変換されたデータは、FIFOバッファに溜め込まれるため、バッファがオーバフローしない限り、次のAD変換データに上書きされてしまうことはありません。 このため、高速なサンプリングを行うのに向いています。 ただし、システム構成は複雑になるため、I/O方式に比べて高価になります。

  • TUT-0020

    Interface Corporation - 14 -

    方 式 内 容

    メモリ方式 AD変換された情報は、インタフェースモジュール内のメモリ領域に書き込まれます。 CPUは、このメモリ領域にアクセスして、データを取り出します。 (コンピュータのメモリ空間に空いた窓から、インタフェースモジュールのメモリにアクセスするイメージです)

    A/D

    コンバータ

    データ

    CPU

    データ取得

    データ

    データ

    メモリ

    コンピュータのメモリ空間 A/Dコンバータとメモリは直結されており、AD変換されたデータが高速に書き込まれていきます。 このため、非常に高速なサンプリングを行うのに向いています。 ただし、システム構成は複雑になるため、高価になります。

    バスマスタ方式 AD変換された情報は、コンピュータ内の指定されたメモリ領域に対して書き込まれます。 CPUは、このメモリ領域にアクセスして、データを取り出します。

    A/D

    コンバータ

    データ

    データ

    データ

    CPU

    データ取得

    特定のメモリ領域

    コンピュータのメモリ空間 AD変換されたデータを書き込むメモリは、コンピュータのメモリに対して行われるため、コンピュータのメモリを消費します。 しかし、メモリ方式と異なり、コンピュータのメモリが多ければ、それだけ多くのバッファを確保できます。 (メモリ方式では、インタフェースモジュール上のメモリに左右されます) メモリ方式同様、非常に高速なサンプリングを行うのに向いています。 ただし、システム構成は複雑になるため、高価になります。

  • TUT-0020

    - 15 - Interface Corporation

    1.10 アナログ入力製品を使用時の指針

    アナログ入力製品を使って計測を行う際一番重要なのは、ノイズ等の外的要因を受けずに安定し

    て計測できる環境を構築することです。 計測に望ましい環境の構築の指針を幾つか提示します。 ・コンピュータあるいはユニットの電源を安定させる。 アナログ入力製品は、コンピュータ/ユニットから電源を供給されています。 従って、コンピュータ/ユニットの電源が安定すれば、自ずと測定環境も改善されます。 例えば、電源を供給する個所を主電源の近くに配置し、タコ足状態のタップに接続しない、あ

    るいはノイズフィルタ付きのUPS等の装置を介して電源を供給する等、3端子コンセントを使用し、グランドをアースする等の対策があります。

    ・計測環境と入力源とのグランドを同電位にする。 アナログ入力製品のグランドと入力源のグランドをケーブル等で接続し、同電位状態とします。

    ・絶縁タイプのインタフェースモジュールを使用する。 バス絶縁タイプと呼ばれるインタフェースモジュールを使用します。 インタフェースモジュール上のアナログ回路とデジタル回路が絶縁されているため、デジタル

    ノイズがアナログ回路に混入するのを防ぐことができるので、計測に悪影響を及ぼす恐れを低

    減できます。 ・入力方式を差動入力にする。 差動方式を採用することで、ノイズによる計測の悪影響を抑えることが可能です。 高精度な計測を行う時、一番推奨できる入力方式です。

    ・アナログ入力製品と信号源との間を短くする。 短いケーブルを使用します。長いケーブルでアナログ入力製品と信号源を接続すると、それだ

    け外部からノイズが混入する恐れが高まります。

    アナログ信号の取り扱いには、オシロスコープ等の計測機器を扱うのと同程度の慎重さが求めら

    れます。 環境によっては、計測精度は大きく異なりますので、これらの事項を参考に環境を整えてくださ

    い。

  • TUT-0020

    Interface Corporation - 16 -

    第2章 AD製品のインストール

    作成するアプリケーションからアナログ入力制御を行う場合、当然のことながらアプリケーショ

    ンを実行するコンピュータにAD製品が組み込まれていなければなりません。 ここではWindowsVista/XP Embedded/XP/Server 2003/2000環境における、弊社AD製品のインストール方法を記載します。Windows NT/Me/98/95ではインストール方法がここに記載する内容とは異なります。こちらに関しては、製品マニュアルまたはオンラインドキュメントをご確認ください。

    2.1 コンピュータへの設置方法

    ※ 写真は実物と異なる場合があります。

    ①コンピュータ本体の電源が“OFF”であることを確認し、電源ケーブルをACコンセントから外します。その後、外装カバー, スロットカバーを外します。

    ②拡張用スロットへインタフェースモジュールを差し込みます。

    注意!

    製品は正しい向きに実装してください。間違った向きに実装した場合、コンピュータ, インタ フェースモジュールを破損する恐れがあります。

    ③パネルをコンピュータ本体とビス留めしてください。

    ④本体へ外装カバーを元通り取り付け、電源ケーブルをACコンセントに接続します。その後、コンピュータを起動します。

    以上でインタフェースモジュールの設置は完了です。次にドライバのインストールを行います。

    基板の左右の端に力を入れ、カツンとショックがあるまで押し込む。

    インタフェースモジュール

    コンピュータ

    PCIコネクタ

    金メッキ端子がコネクタに隠れていることを確認する。

    ビス留め

  • TUT-0020

    - 17 - Interface Corporation

    第3章 ソフトウェアのインストール

    本製品を使用するためには、デバイスドライバをインストールする必要があります。

    お知らせ

    デバイスドライバは、弊社Web siteよりダウンロード(無料)できます。 ダウンロードするためには、ユーザID登録が必要になります。

    DLL関数, サンプルプログラム, ユーティリティの使用方法等につきましては、ソフトウェア付属のHelpを参照してください。

    3.1 Windows用

    弊社ソフトウェアは、次のように構成されています。 • ドライバディスク デバイスドライバが入っています。 ダウンロード方法 >> 弊社Web siteよりご使用のOSに対応しているのDriver Diskをダウンロードします。 >> ダウンロードしたプログラムを実行すると、フォルダが作成されます。

    ※ 詳細は、『18ページ 3.1.1 デバイスドライバのインストール』を参照してください。

    • ユーティリティディスク Readme, Help, サンプルプログラム, ユーティリティ等が入っています。 ダウンロード方法 >> 弊社Web siteよりのUtility Diskをダウンロードします。 >> ダウンロードしたプログラムを実行すると、「SETUP」フォルダが作成されます。 >>「SETUP」フォルダ内のSETUP.EXEを実行してください。プログラムが起動しインストール

    が開始されます。

  • TUT-0020

    Interface Corporation - 18 -

    3.1.1 デバイスドライバのインストール

    ■Windows Vistaをご使用の場合

    Administratorsのグループに所属しているユーザが、インストールを行ってください。 ※ 「続行するにはあなたの許可が必要です」と警告が表示されることがあります。その場合、 「続行」をクリックしてください。

    ①Windows Vistaが起動すると、「新しいハードウェアが見つかりました」が表示されます。

    ②「ドライバソフトウェアを検索してインストールします(推奨)」をクリックします。

    ③「オンラインで検索しません」をクリックします。

  • TUT-0020

    - 19 - Interface Corporation

    ④「ディスクはありません。他の方法を試します」をクリックします。

    ⑤「コンピュータを参照してドライバソフトウェアを検索します(上級)」をクリックします。

    ⑥ドライバ保存先の「¥Win2000」フォルダを指定し、「次へ」をクリックします。

  • TUT-0020

    Interface Corporation - 20 -

    ⑦ファイルのコピーが始まります。

    ※ 「ドライバソフトウェアの発行元を検証できません」と表示された場合、「このドライバ ソフトウェアをインストールします」をクリックします。

    ⑧インストールが完了した旨のダイアログボックスが表示されるので、「閉じる」ボタンをクリックします。

    以上で、Windows Vista用のドライバインストールは完了です。

  • TUT-0020

    - 21 - Interface Corporation

    ■Windows XP Embedded, Windows XP, Windows Server 2003をご使用の場合

    Administratorsのグループに所属しているユーザが、インストールを行ってください。 ※ Windows XP Embeddedは、Windows XPと同様の手順で、ドライバのインストールができます。

    (ただし、OSイメージにデバイスの検出に必要なコンポーネントが含まれている必要があります。)

    ①Windows XP Embedded, Windows XP, Windows Server 2003が起動すると、「新しいハードウェアの検出ウィザード」が表示されます。

    ②「一覧または特定の場所からインストールする(詳細)」が選択されていることを確認し、「次へ」をクリックします。

    ③「次の場所で最適のドライバを検索する」を選択し、「次の場所を含める」にチェックをつけ、

    ドライバ保存先の「¥Win2000」フォルダを指定し、「次へ」をクリックします。

    ドライバ保存先の「¥Win2000」フォルダを指定します。

    ④ファイルのコピーが始まります。

    ⑤インストールが完了した旨のダイアログボックスが表示されるので、「完了」ボタンをクリッ

    クします。

  • TUT-0020

    Interface Corporation - 22 -

    以上で、Windows XP Embedded, Windows XP, Windows Server 2003用のデバイスドライバの インストールは完了です。デバイスドライバのインストール完了後以降は、システム起動時に前

    頁②のように「新しいハードウェアの検索ウィザード」が起動することはありません。デバイス

    ドライバのインストールが完了したら、ユーティリティディスクのインストールを行ってくださ

    い。

    • Windows XP Embedded 用ハードウェア情報ファイルのインポートをする場合 ・ドライバダウンロード方法 ①弊社Web siteよりのDriver Disk [Windows Vista, XPe, XP, 2003, 2000]をダウンロードします。

    ②ダウンロードしたプログラムを実行すると、「Win2000」フォルダが作成されます。

    ・ドライバインストール方法 ①Windows XP Embedded 開発環境の Component Database Manager を起動します。

    ②弊社製品のハードウェア情報ファイルをインポートします。作成した「Win2000」フォルダ内の拡張子がSLDのファイルを、画面の指示に従ってインポートしてください。

    ③以上で、ハードウェア情報のインポートは完了です。

  • TUT-0020

    - 23 - Interface Corporation

    ■Windows 2000をご使用の場合

    Administratorsのグループに所属しているユーザが、インストールを行ってください。 ①Windows 2000が起動すると、「新しいハードウェアの検出ウィザード」が表示されるので、「次へ」ボタンをクリックします。

    ②「デバイスドライバに最適なドライバを検索する(推奨)」を選択し、「次へ」ボタンをクリックします。

    ③「検索場所のオプション」で「場所を指定」を選択し、「次へ」ボタンをクリックします。

    ④「参照」ボタンをクリックし、「製造元のファイルのコピー元」にドライバ保存先の「¥Win2000」フォルダを指定します。その後、「OK」ボタンをクリックします。

    ⑤デバイスドライバが見つかった旨のダイアログボックスが表示されるので、「次へ」ボタンを

    クリックします。 ⑥ファイルのコピーが始まります。 ⑦インストールが完了した旨のダイアログボックスが表示されるので、「完了」ボタンをクリッ

    クします。

    以上で、Windows 2000用のデバイスドライバのインストールは完了です。 デバイスドライバのインストール完了後以降は、システム起動時に②のように「新しいハードウ

    ェアの検索ウィザード」が起動することはありません。デバイスドライバのインストールが完了

    したら、ユーティリティディスクのインストールを行ってください。

  • TUT-0020

    Interface Corporation - 24 -

    インストールを完了したら、リソース(I/Oアドレス, 割り込みレベル)の設定, 競合の有無の確認を行ってください。 ドライバのインストールが正常に行われると、システムプロパティのデバイスマネージャに表示

    されます。

    3.2 ソフトウェアセットアップ

    次の手順で、ソフトウェアGPC-3100のインストールを行ってください。 (1)弊社Web siteからダウンロードした圧縮ファイルを解凍して、解凍フォルダ内の「SETUP.EXE」を実行してください。Help, サンプルプログラム等が指定ドライブにインストールされます。

    (2)画面に表示される指示に従って操作してください。

    インストールに成功すると、「スタート」メニューの「プログラム」に「Interface GPC-3100」が登録されます。ソフトウェアの使用方法につきましては、README.HTM, Helpをご覧ください。

    ここにインタフェースモジュール

    が追加されます。

  • TUT-0020

    - 25 - Interface Corporation

    第4章 Visual C++によるAD制御

    Visual C++より、AD製品を制御するには、DLLを利用します。Windowsアプリケーションプログラムおいては直接I/Oやメモリにアクセスすることは禁止されています。従って、AD製品に対して直接制御を行うことができません。そこで、Visual C++ではインタフェースモジュールに対して制御を行うプログラム(DLL)から必要なプロシージャ(関数)を呼び出し、このDLLを介してインタフェースモジュールの制御を行います。

    AD製品

    仮想デバイスドライバ (CP31xx.sys)

    Win32 API

    ダイナミックリンクライブラリ

    Visual C++ アプリケーション

    信号源

    (DLL)

  • TUT-0020

    Interface Corporation - 26 -

    4.1 ピンアサインメント

    AD製品への信号入力は、インタフェースモジュールのコネクタ部分より行われますが、使用する製品型式によって、各ピンに割り当てられた役割が異なります。配線時には、これらピンアサイ

    ンメントをよく確認の上、配線してください。 以下、弊社PCI-3153のピンアサインメントを一例として記載します。

    ●使用コネクタ メーカ:本多通信工業 型 式:PCR-E50LMDA(相当品)

    25 42 23 3 2 1

    50 49 48 28 27 26 ※ メーカ指定のピンアサインメントとは異なります。

    ●適合コネクタ メーカ:本多通信工業 型 式:PCR-E50FS+PCS-E50LK(相当品)

    AIN 1AIN 9AIN 2AIN10AIN 3AIN11AIN 4AIN12AIN 5AIN13AIN 6AIN14AIN 7AIN15AIN 8AIN16

    NCNC

    ATRG OUTEXCLK INEXINT IN

    EXTRG INREF(-5V)REF(+5V)-15V※

    COM 1COM 9COM 2COM10COM 3COM11COM 4COM12COM 5COM13COM 6COM14COM 7COM15COM 8COM16NCIN1IN2OUT1OUT2DCOMACOM+5V※

    +15V※

    1 262 273 284 295 306 317 328 339 3410 3511 3612 3713 3814 3915 4016 4117 4218 4319 4420 4521 4622 4723 4824 4925 50

    NC:未接続

    注意!

    ※ジャンパスイッチの設定により、出力またはNC(未接続)にすることができます。

  • TUT-0020

    - 27 - Interface Corporation

    【シングルエンド入力時】 信号名 端子番号 チャンネル 機 能 用 途 仕 様 AIN 1 1 CH 1 AIN 2 3 CH 2 AIN 3 5 CH 3 AIN 4 7 CH 4 AIN 5 9 CH 5 AIN 6 11 CH 6 AIN 7 13 CH 7 AIN 8 15 CH 8 AIN 9 2 CH 9 AIN 10 4 CH 10 AIN 11 6 CH 11 AIN 12 8 CH 12 AIN 13 10 CH 13 AIN 14 12 CH 14 AIN 15 14 CH 15 AIN 16 16 CH 16

    アナログ入力信号

    COM 1 26 CH 1 COM 2 28 CH 2 COM 3 30 CH 3 COM 4 32 CH 4 COM 5 34 CH 5 COM 6 36 CH 6 COM 7 38 CH 7 COM 8 40 CH 8 COM 9 27 CH 9 COM 10 29 CH 10 COM 11 31 CH 11 COM 12 33 CH 12 COM 13 35 CH 13 COM 14 37 CH 14 COM 15 39 CH 15 COM 16 41 CH 16

    アナログ入力コモン

    外部アナログ信号の入力端子

    入力インピーダンス: 10MΩ(±5%) 過電圧入力保護 ・インタフェースモジュール 電源ON時 ±35V(MAX) ・インタフェースモジュール 電源OFF時 ±20V(MAX)

    【差動入力時】 信号名 端子番号 チャンネル 機 能 用 途 仕 様 AIN 9 2 CH 1 AIN 10 4 CH 2 AIN 11 6 CH 3 AIN 12 8 CH 4 AIN 13 10 CH 5 AIN 14 12 CH 6 AIN 15 14 CH 7 AIN 16 16 CH 8

    アナログ入力信号(+)

    AIN 1 1 CH 1 AIN 2 3 CH 2 AIN 3 5 CH 3 AIN 4 7 CH 4 AIN 5 9 CH 5 AIN 6 11 CH 6 AIN 7 13 CH 7 AIN 8 15 CH 8

    アナログ入力信号(-)

    COM 1 26 CH 1 COM 2 28 CH 2 COM 3 30 CH 3 COM 4 32 CH 4 COM 5 34 CH 5 COM 6 36 CH 6 COM 7 38 CH 7 COM 8 40 CH 8

    アナログ入力コモン

    外部アナログ信号の入力端子

    入力インピーダンス:10MΩ(±5%) 過電圧入力保護 ・インタフェースモジュール 電源ON時 ±35V(MAX) ・インタフェースモジュール 電源OFF時 ±20V(MAX)

  • TUT-0020

    Interface Corporation - 28 -

    信号名 端子番号 機 能 用 途 仕 様

    ATRG OUT 19 アナログトリガ 出力

    レベルトリガ, アウトレンジトリガ発生時にパルスを出力し、他のインタフェースモジュールと同期してサンプリングできます。

    TTLレベル出力 電源投入時:Highレベル ・最大負荷電流 24mA ・ 最小Highレベル出力電圧:2.4V・ 最大Lowレベル出力電圧:0.4V

    EXCLK IN 20 外部サンプリング クロック入力

    外部からのサンプリングクロックに同期してAD変換を行う時に使用

    EXINT IN 21 外部割り込み入力 (コンピュータ割り込み)

    ドライバソフトウェアのトリガ設定で外部トリガを選択したときに使用

    EXTRG IN 22 AD変換スタート外部入力 (1件サンプリング)

    ドライバソフトウェアにより、任意のタイミングで1件のサンプリングを行います。

    TTLレベル入力 ・外部駆動電流2mA以上 ・Lowレベル最大入力電圧:0.8V ・Highレベル最小入力電圧:2.0V ・ 立ち下がりエッジで有効 ソフトウェアにより、立ち上がりエッジ有効に変更できます。 ・最小パルス幅:33ns

    IN1 43

    IN2 44

    デジタル入力 (チャンネル1,2)

    ドライバソフトウェアにより入力が可能 ドライバソフトウェアのトリガ設定で外部トリガ条件に設定することができます。

    無電圧接点オープンコレクタ入力 ・最大定格電圧:DC+50V ・ 入力信号電圧:DC+5V~+48V (推奨:DC+5V~+24V) ・ 入力信号電流:0.2mA

    OUT1 45

    OUT2 46

    デジタル出力 (チャンネル1,2)

    ドライバソフトウェアにより任意の出力が可能

    TTLオープンコレクタ出力 (プルアップ抵抗付) ・最大定格電圧:DC+5V ・ 出力信号電圧:DC+5V ・ 最大出力電流:40mA ・出力抵抗:10kΩプルアップ抵抗付

    +5V 49 デジタル回路用 +5V出力

    外部デジタル回路用の+5V電源として利用可能 (通常は使用しません。)

    最大負荷電流 100mA ・ ジャンパスイッチ設定により、出力またはNC(未接続)にすることができます。

    DCOM 47 デジタル共通グランド ATRG OUT, EXCLK IN, EXINT IN, EXTRG IN, IN1, IN2, OUT1, OUT2, +5V用のデジタル共通グランド

    REF(+5V) 24 外部リファレンス出力 +5.000V

    REF(-5V) 23 外部リファレンス出力 -5.000V

    外部回路用基準電圧出力として利用可能 (通常は使用しません。)

    最大負荷電流 2mA

    +15V 50

    -15V 25

    アナログ回路用 ±15V出力

    外部アナログ回路用の ±15V電源として利用可能(通常は使用しません。)

    最大負荷電流 10mA ・ ジャンパスイッチ設定により、出力またはNC(未接続)にすることができます。

    ACOM 48 アナログ共通グランド REF(+5V), REF(-5V), ±15V用のアナログ共通グランド

    他製品型式に関しては、製品マニュアル、もしくは弊社製品カタログを参照してください。

  • TUT-0020

    - 29 - Interface Corporation

    4.2 DLLプロシージャ呼び出しによるプログラミング(概要)

    Visual C++よりDLLプロシージャ呼び出しプログラミングを行うには、弊社AD製品制御用ソフトウェア(FBIAD.DLL)をダイナミックリンクし使用します。DLLとはダイナミックリンクライブラリ(Dynamic Link Library)の略でアプリケーションの実行時に動的にリンクして利用できるプロシージャのライブラリです。プロシージャとは実行時に1つの単位として処理されるコードの集まりを意味します。 Visual C++にてDLLプロシージャを利用するには、FBIAD.LIB, FBIADDC.LIBファイルにリンクしてDLLプロシージャのアドレスを指定します。

    4.3 AD製品制御概略

    AD製品への制御を行う場合、基本的に下記の制御シーケンス(順番)で行います。 インタフェースモジュール

    の初期化

    条件設定

    入力処理

    終了処理

    プログラム起動

    サンプリング条件の設定

    データのサンプリング

    プログラム終了

    (1)

    (2)

    (3)

    (4)

    (1)インタフェースモジュールの初期化

    Visual C++で作成されたアプリケーションがAD製品への操作を行う場合、まずアプリケーションは、AD製品を利用可能な状態にする必要があります。 この処理がインタフェースモジュールの初期化です。インタフェースモジュールの初期化を

    行うと、プログラムはAD製品へのアクセスが可能となります。本処理が行われないとAD製品へのアクセスは行えません。

    (2)条件設定

    サンプリング周期, サンプリング数, 入力レンジ等、アナログ信号をサンプリングする条件を設定します。

    (3)入力処理

    インタフェースモジュールに入力されるアナログ信号を読み取ります。 (4)終了

    インタフェースモジュールの使用終了を行うための手続きです。プログラム終了時には必ず

    必要です。

  • TUT-0020

    Interface Corporation - 30 -

    第5章 チュートリアル

    ここでは、実際にアナログ入力製品を用い、アナログ信号の入力(シングルエンド入力)を行う、簡単な波形表示プログラムの作成を行います。 コンピュータにアナログ入力製品(PCI-3153)を1枚実装し、信号線接続用に「垂直50ピンネジ変換端子台(TNS-5001)」を接続します。インタフェースモジュールと端子台の接続には「50ピンハーフピッチケーブル(ECO-7620)」を使用しています。 また、アナログ信号生成にはファンクションジェネレータを使用しています。

    AD製品

    端子台

    波形データ

    ファンクションジェネレータ

    100.0 Hz

    PCI-3153以外では、対応する端子台および接続用ケーブルの製品型式が異なる場合がありますのでご注意ください。 チュートリアルではアナログ信号の入力はシングルエンド入力でCH1(AIN1)より行います。ファンクションジェネレータからの出力を、端子台の同チャンネルに対応する端子に接続してくださ

    い。

    注意!

    PCI-3153, TNS-5001の組み合わせの場合、端子台の1C番ピンがCOMに、AI1番ピンがCH1の入力になります。

  • TUT-0020

    - 31 - Interface Corporation

    5.1 アナログ入力[1]

    ここでは、ファンクションジェネレータから出力されるアナログ信号のデータを、コンピュータ

    に実装したアナログ入力製品(PCI-3153)を用いて1件のみ取得します。取得したデータを電圧値に変換し、画面に出力するプログラムの作成を行います。 ファンクションジェネレータからはバイポーラ±2.5Vで周波数100Hzの信号が出力されているものとします。

    [V]

    時間 →

    -2.5

    -2

    -1.5

    -1

    -0.5

    0

    0.5

    1

    1.5

    2

    2.5

    Step1.メインウィンドウ作成

    ここでは、これから作成するプログラムの画面作成を行います。 1. Visual C++を起動し、新しいプロジェクトを作成します。 ・「ファイル」メニューより「新規作成」を選択すると、新規作成ダイアログボックスが表示

    されます。「プロジェクト」タブを選択, 表示します。 ・MFC AppWizard(exe)を選択し、プロジェクト名を記入します。ここではプロジェクト名として”AdInput”と記入します。 ・作業するフォルダを位置で指定してください。その後「OK」をクリックします。

    プロジェクト名

    MFC AppWizard(exe)を選択

    フォルダを指定

  • TUT-0020

    Interface Corporation - 32 -

    2. ステップ1ではSDIを選択し「次へ」をクリックします。 ・リソースで使用する言語の指定は「日本語」を選択します。

    SDIを選択します

    3. ステップ2~ステップ5は全て「次へ」をクリックし、ステップ6に「終了」をクリックします。 4. 新規プロジェクト情報というダイアログ表示されますので「OK」をクリックします。

    OKをクリック

    ここまでで新規プロジェクトの作成は完了です。

  • TUT-0020

    - 33 - Interface Corporation

    Step2.DLLプロシージャ宣言と構造体定義

    DLLプロシージャを利用するには、FBIAD.LIBファイル, FBIADDC.LIBファイルを使ってプロシージャの位置を指定し、プロシージャの呼び出しに使う引数の識別を行わなければなりません。 DLLとはダイナミックリンクライブラリ(Dynamic Link Library)の略でアプリケーションの実行時に動的にリンクして利用できるプロシージャのライブラリです。そもそも、Windowsアプリケーションプログラミングにおいては直接I/Oやメモリにアクセスすることは禁止されています。言い換えれば、アナログ入力製品に対して直接制御を行うことができません。そこで、インタフェー

    スモジュールに対して制御を行うプログラム(DLL)から必要なプロシージャを呼び出し、このDLLを介してインタフェースモジュールの制御を行います。それぞれのプロシージャはFBIAD.Hファイルで宣言されています。 ここで一度リンクさせたDLL内のプロシージャは、Visual C++のプロシージャと同じようにコードで呼び出すことが可能となります。 また、一部のDLLプロシージャは構造体を使用します。その構造体はGPCAD.Hファイルに定義されています。(GPCAD.HファイルはFBIAD.Hファイルの中で宣言されています。) アナログ入力製品を制御するには、 ・FBIAD.LIBファイル, FBIADDC.LIBファイルをリンクさせる。 ・FBIAD.Hファイルをインクルードする。 という2つの作業が必要となるわけです。

    1. プロジェクトにFBIAD.LIB, FBIADDC.LIB, FBIAD.H, GPCAD.Hのパス設定を行います。 「ツール」→「オプション」を選択し、「ディレクトリ」タブを選択します。

  • TUT-0020

    Interface Corporation - 34 -

    ・表示するディレクトリを「インクルードファイル」にします。 ・空白の部分をダブルクリックします。(下図参照)

    クリックします

    インクルードファイルにします

    ダブルクリックします

    ディレクトリの追加を行います。ディレクトリ先を¥Interface¥GPC3100 ¥includeに設定して「OK」をクリックします。(下図参照)

    includeを選択

  • TUT-0020

    - 35 - Interface Corporation

    ・下図のようにディレクトリに追加されます。

    追加されたディレクトリ

    ・次に、表示するディレクトリを「ライブラリファイル」にします。 ・ディレクトリの追加を行います。ディレクトリ先を¥Interface¥GPC3100¥libと設定して「OK」をクリックします。(下図参照)

    libを選択します

  • TUT-0020

    Interface Corporation - 36 -

    ・下図のようにディレクトリに追加されます。

    追加されたディレクトリ

    ライブラリファイルにします

    2. プロジェクトにFBIAD.LIBファイル, FBIADDC.LIBファイルをリンクさせます。 ・「プロジェクト」→「設定」を選択し、「リンク」タグを選択します。 ・設定の対象を「すべての構成」に設定し、「オブジェクト/ライブラリモジュール」に“fbiad.lib

    fbiaddc.lib”と書き込み「OK」をクリックします。

    すべての構成にしますFBIAD.LIB,FBIADDC.LIBをリンクします

    “FBIAD.LIB”, “FBIADDC.LIB”, ”FBIAD.H”, ”GPCAD.H”は、Setupでインストールされる ¥lib, ¥includeにあります。 (インストール先:¥interface¥GPC3100)

  • TUT-0020

    - 37 - Interface Corporation

    Step3.初期化処理と終了処理

    ここでは、アナログ入力製品を制御するのに、かならず必要となる初期化処理と終了処理に関し

    て知っておかなければならないこと、および制約事項について記載します。 アナログ入力製品の制御を行うには、まずインタフェースモジュールの初期化を行わなければな

    りません。インタフェースモジュールの初期化は以下のコードにより行います。

    (インタフェースモジュールの初期化) //インタフェースモジュール初期化を行います HANDLE hDeviceHandle; //デバイスハンドル hDeviceHandle = AdOpen(“FBIAD1”);

    この時、FBIAD1は、使用するインタフェースモジュールのデバイス名を示しています。デバイス名は、「システムのプロパティ」の「デバイス マネージャ」より確認できます。

    ここに、デバイス名が表示されます

  • TUT-0020

    Interface Corporation - 38 -

    インタフェースモジュールの初期化はAdOpen関数により行います。

    使用するボードのデバイス名を指定します。

    「使用例」

    hDeviceHandle = AdOpen(“FBIAD1”);

    デバイスハンドルを格納するHANDLE型の変数を指定します。

    使用するインタフェースモジュール

    のデバイス名を指定します。

    また、アプリケーションの終了時、もしくは処理の終了時に、インタフェースモジュールに対し

    て必ず終了処理を行わなければなりません。 インタフェースモジュールの終了処理は以下のコードにより行います。

    (インタフェースモジュールの終了処理) //終了処理 INT nRet; //関数の戻り値 nRet = AdClose(hDeviceHandle);

    インタフェースモジュールの終了処理はAdClose関数より行います。ここで、注意しなければならないのは、設定する引数のhDeviceHandleです。hDeviceHandle にはインタフェースモジュール初期化の際の、AdOpen関数の戻り値を指定します。AdOpen実行時、その戻り値であるhDeviceHandleには有効なハンドル(番号)が格納されています(「インタフェースモジュールの初期化」参照)。ハンドルとは使用するデバイスの接続に関する情報が格納されたメモリ領域を、識別するための値

    を示します。 プログラム作成時、このhDeviceHandleの値が、終了処理を行うデバイスの、AdOpen実行時に取得された値となるよう、AdOpenとAdCloseは必ず組になるようにしてください。

    AdOpen

    AdClose

    ハンドル

    「使用例」

    nRet = AdClose(hDeviceHandle);

    関数が失敗するとエラーコードが格納されます。

    インタフェースモジュールのオープン時に取得したデバイスハンドルを指定します。

  • TUT-0020

    - 39 - Interface Corporation

    Step4.サンプリング

    1. ワークスペースのResourceViewを表示し、Menuフォルダを展開して「IDR_MAINFRAME」をダブルクリックします。

    2. 空白の部分(ヘルプの隣)をダブルクリックし、メニューアイテムプロパティを表示し以下のように設定します。

    キャプション アナログ入力

    ここをダブルクリック

    3. 「アナログ入力」をクリックし、プルダウンメニューの空白部分をダブルクリックします。メニューアイテムプロパティが表示されますので以下のように設定します。

    ID ID_INPUTSINGLE キャプション サンプリング

    ここをダブルクリック

    ID_INPUTSINGLEと設定

    サンプリングと設定

    4. 先程作成したプルダウンメニューの中の「サンプリング」の上にマウスカーソルをもってきて右クリックし「Class Wizard」を選択します。

    5. 「メッセージマップ」タグを選択し、以下のように設定します。(次ページ図参照)

    プロジェクト AdInput クラス名 CAdInputView オブジェクト ID_INPUTSINGLE メッセージ COMMAND

  • TUT-0020

    Interface Corporation - 40 -

    6. 「関数の追加」をクリックします。

    関数の追加をクリックします

    7. メンバ関数名を決定するダイアログが表示されますので“OnInputsingle”となっていることを確認し、「OK」をクリックします。

    8. FileViewを表示し、SourceFileフォルダを展開してAdInputView.cppの以下の位置(最初の部分)に

    #include“fbiad.h”と#includeを追加します。 (fbidio.h、math.hのインクルード)

    // AdInputView.cpp : CAdInputView クラスの動作の定義を行います。 // #include "stdafx.h" #include "AdInput.h" #include "AdInputDoc.h" #include "AdInputView.h" #include "fbiad.h" #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif

    ここに追加

  • TUT-0020

    - 41 - Interface Corporation

    9. ClassViewを表示し、CAdInputViewクラスを展開してOnInputsingle関数に以下のコードを記述します。

    (CAdInputViewクラスの OnInputsingle関数のコード サンプリング) void CAdInputView::OnInputsingle() { // TODO: この位置にコマンド ハンドラ用のコードを追加してください int nRet; // 関数の実行結果 char cDisp[200]; // メッセージ配列 HANDLE hDeviceHandle; // デバイスハンドル WORD wData[1]; // データ配列 double dVolt; // 電圧値 ADBOARDSPEC BoardSpec; // ADBOARDSPEC 構造体 ADSMPLCHREQ SmplChReq; // ADSMPLCHREQ 構造体 SmplChReq.ulChNo = 1; SmplChReq.ulRange = AD_5V; // インタフェースモジュールの初期化を行います hDeviceHandle = AdOpen ("FBIAD1"); if (hDeviceHandle == INVALID_HANDLE_VALUE) { AfxMessageBox("デバイスのオープンに失敗しました", MB_OK, 0); return; } else{ //デバイスの情報取得 nRet = AdGetDeviceInfo( hDeviceHandle, &BoardSpec ); if(nRet != AD_ERROR_SUCCESS){ AfxMessageBox("デバイスの情報取得に失敗しました", MB_OK, 0); } //サンプリング nRet = AdInputAD( hDeviceHandle, 1, AD_INPUT_SINGLE, &SmplChReq, wData); if(nRet != AD_ERROR_SUCCESS){ AfxMessageBox("アナログ入力に失敗しました", MB_OK, 0); } else{ //電圧算出 dVolt = 10/pow(2, BoardSpec.ulResolution)*wData[0] - 5; sprintf(cDisp, "入力電圧は%1.3fVです", dVolt); AfxMessageBox(cDisp, MB_OK, 0); } } // 終了処理. nRet = AdClose( hDeviceHandle ); if (nRet != AD_ERROR_SUCCESS) { AfxMessageBox("デバイスのクローズに失敗しました"); } }

    プログラムの入力が終わったら、保存した後、プログラムを実行してください。 次に、ファンクションジェネレータよりアナログ波形を出力後、メニューの「アナログ入力」を

    クリックしてください。ボタンをクリックした時点でのアナログ入力製品への入力電圧が表示さ

    れます。

  • TUT-0020

    Interface Corporation - 42 -

    では、『41ページ CAdInputViewクラスのOnInputsingle関数のコード サンプリング』の処理を読み取ってみましょう。まず、サンプリングを行う際の条件を設定しています。 SmplChReq.ulChNo = 1; SmplChReq.ulRange = AD_5V;

    上記は、アナログ入力を行う入力チャンネル番号とそのチャンネルのレンジを指定しています。

    サンプリング条件は、ADSMPLCHREQ構造体に定義します。その他の設定内容はインタフェースモジュールの初期値を使用しています。サンプリングを行う際は、その環境に適した条件を設定

    しなければなりません。 次に、プログラムはアナログデータ取得を行っています。1件のみのアナログデータの入力には、AdInputAD関数を使用します。

    入力されたアナログデータは配列変数pDataに格納されています。 ところでpDataにはアナログ入力製品の分解能に応じたバイナリデータが格納されています。従って、実際の数式処理等においては、この読み取った値を物理量に変換する必要があります。 『41ページ CAdInputViewクラスのOnInputsingle関数のコード サンプリング』では、電圧バイポーラ ±5 V でのサンプリングを行っているので、変換式は下式となります。

    52

    10 −×= サンプリングデータ物理量分解能

    「使用例」 nRet = AdInputAD(hDeviceHandle, 1, AD_INPUT_SINGLE, &SmplChReq, pData);

    関数が失敗するとエラーコードが格納されます。

    アナログ入力を行うチャンネル数を指定します。

    アナログデータを格納する バッファを指定します。

    入力方式を指定します。

    ADSMPLCHREQ構造体を指定します。

    インタフェースモジュールの オープン時に取得したデバイスハンドルを指定します。

  • TUT-0020

    - 43 - Interface Corporation

    5.2 アナログ入力[2]

    『31ページ 5.1 アナログ入力[1]』では、アナログデータを1件のみ取得する方法を記載しましたが、ここでは、2つのチャンネルを使用して任意の周期でサンプリングを行い、その結果をグラフに表示する、言い換えればオシロスコープの簡易版となるプログラムの作成を行います。

    Step1.ダイアログ作成

    ここでは、これから作成するプログラムの画面作成を行います。(詳しくは『31ページ 5.1 アナログ入力[1]』でのStep1~Step3を参考にしてください。) 1. Visual C++を起動し、新しいプロジェクト(プロジェクト名:AdDrawGraph)を作成します。 2. ステップ1では、ダイアログベースを選択します。ステップ2, ステップ3では「次へ」をクリックし、ステップ4で「終了」をクリックします。

    ダイアログベースを選択します

    Step2. DLLプロシージャ宣言と構造体定義

    プロジェクトにFBIAD.LIBファイル, FBIADDC.LIBファイル, FBIAD.Hファイル, GPCAD.Hファイルのパス設定を行い、ライブラリファイル”fbiad.lib”, ”fbiaddc.lib”をリンクさせます(『31ページ 5.1 アナログ入力[1]』のStep2を参照してください)。

  • TUT-0020

    Interface Corporation - 44 -

    Step3.サンプリング

    1. ResourceViewを表示し、Dialogフォルダを展開して「IDD_ADDRAWGRAPH_DIALOG」をダブルクリックします。

    ダブルクリック

    ResourceViewを選択

    2. ダイアログボックスの必要のないボタン, スタティックテキストを削除します。「OK」ボタン, 「キャンセル」ボタン, 「TODO:ダイアログのコントロールをここに配置」というスタティックテキストをそれぞれ選択し、Deleteキーを押してください。

    それぞれ選択して Deleteキーで削除します

    3. 波形のグラフ表示を行うピクチャボックスの設定を行ないます。 コントロールから「ピクチャー」を選択し、ダイアログにピクチャーボックスを貼りつけます。 (※ サンプリングを行うボタンを配置するスペースを空けておいてください。)

    ボタンの配置スペースを空けておいてください

    ピクチャーを選択

  • TUT-0020

    - 45 - Interface Corporation

    4. 配置したピクチャーボックスの枠にカーソルを合わせ、右クリック→「プロパティ」を選択し、「スタイル」タグを選択し、「くぼみ」にチェックをつけた後、「一般」タグを選択し、以下

    のように設定します。 ID IDC_WAVEWINDOW

    くぼみにチェックをつける

    スタイルを選択

    IDC_WAVEWINDOWを設定

    5. サンプリングを行うボタンの設定を行ないます。 ・コントロールから「ボタン」を選択し、ダイアログにボタンを貼りつけます。 配置したボタンにカーソルを合わせ、右クリック→「プロパティ」を選択し、以下のように設定します。

    ID IDC_SAMPLING キャプション サンプリング

    IDC_SAMPLINGを設定 サンプリングを設定

  • TUT-0020

    Interface Corporation - 46 -

    6. メンバ関数”OnSampling”を作成します。 ・先程作成した「サンプリング」ボタンにカーソルを合わせ、右クリック→「Class Wizard」を選択します。「メッセージマップ」を選択し、以下のように設定した後、「関数の追加」を

    クリックします。 プロジェクト AdDrawGraph クラス名 CAdDrawGraphDlg オブジェクト IDC_SAMPLING メッセージ BN_CLICKED

    ・メンバ関数名を決定するダイアログが表示されますので、”OnSampling”となっていることを確認し、「OK」をクリックします。

    ・FileViewを表示し、SourceFileフォルダを展開してAdDrawGraphDlg.cppの最初の部分(下記参照)に#include ”fbiad.h”を書き込みます。

    (Lfbiad.hのインクルード) // AdDrawGraphDlg.cpp : インプリメンテーション ファイル // #include "stdafx.h" #include "AdDrawGraph.h" #include "AdDrawGraphDlg.h" #include "fbiad.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif

    OnSampling関数に以下のコードを記述します(ClassViewを表示し、CAdDrawGraphDlgクラスを展開してOnSampling()をダブルクリックするとOnSampling関数が編集できる位置にカーソルがジャンプしてくれます)。プログラムリストの説明については後述します。

    ここに追加

    関数の追加をクリック

  • TUT-0020

    - 47 - Interface Corporation

    (CAdDrawGraphDlgクラスの OnSampling関数のコード)

    void CAdDrawGraphDlg::OnSampling() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください INT nRet; // 関数の戻り値 HANDLE hDeviceHandle; // デバイスハンドル ADSMPLREQ Config; // ADSMPLREQ構造体 ADBOARDSPEC Info; // ADBOARDSPEC構造体 WORD wSmpData[2000]; // データ取得用配列 unsigned long ulLength; // 取得する件数 double dDataV[2000]; // サンプルデータ変換後の電圧値 int nLoop; // 繰り返し実行用変数 // デバイスをオープンします hDeviceHandle = AdOpen("FBIAD1"); if(hDeviceHandle == INVALID_HANDLE_VALUE){ AfxMessageBox("デバイスのオープンに失敗しました"); return; } // デバイスの情報を取得します nRet = AdGetDeviceInfo(hDeviceHandle, &Info); if(nRet != AD_ERROR_SUCCESS){ AdClose(hDeviceHandle); AfxMessageBox("デバイスの情報取得に失敗しました"); return; } // サンプリングの設定情報を取得します nRet = AdGetSamplingConfig(hDeviceHandle, &Config); if(nRet != AD_ERROR_SUCCESS){ AdClose(hDeviceHandle); AfxMessageBox("サンプリングの設定情報取得に失敗しました"); return; } //サンプリング条件のパラメータを設定します Config.ulChCount = 2; //入力チャンネル=2 Config.SmplChReq[0].ulChNo = 1; //入力チャンネル=1 Config.SmplChReq[0].ulRange = AD_5V; //入力レンジ=±5V Config.SmplChReq[1].ulChNo = 2; //入力チャンネル=2 Config.SmplChReq[1].ulRange = AD_5V; //入力レンジ=±5V Config.fSmplFreq = 10000; //サンプリングレート=10kHz Config.ulSmplNum = 1000; //入力件数=1000 //サンプリング条件を設定します nRet = AdSetSamplingConfig(hDeviceHandle, &Config); if(nRet != AD_ERROR_SUCCESS){ AdClose(hDeviceHandle); AfxMessageBox("サンプリング条件の設定に失敗しました"); return; } //連続サンプリングを開始します nRet = AdStartSampling(hDeviceHandle, FLAG_SYNC); if(nRet != AD_ERROR_SUCCESS){ AdClose(hDeviceHandle); AfxMessageBox("サンプリングに失敗しました"); return; } ulLength = 1000; nRet = AdGetSamplingData(hDeviceHandle, wSmpData, &ulLength); if(nRet != AD_ERROR_SUCCESS){ AdClose(hDeviceHandle); AfxMessageBox("サンプリングデータの取得に失敗しました"); return; } //サンプリングデータを電圧に変換 for(nLoop = 0; nLoop < 2000; nLoop++){ dDataV[nLoop] = (10.0 / (1

  • TUT-0020

    Interface Corporation - 48 -

    //デバイスクローズします AdClose(hDeviceHandle); //////////////////////////////////////////////////////////////////////// //グラフ描画を行います // CWnd *WaveWindowPICT; //ピクチャボックス取得用 CRect WaveWindowRect; //ピクチャボックスのサイズ取得用 CDC *pDC; //現在のデバイスコンテキスト取得用 int nZero; //グラフの中心線座標格納用 WaveWindowPICT = GetDlgItem(IDC_WAVEWINDOW); //ピクチャボックスを取得します WaveWindowPICT->GetClientRect(WaveWindowRect); //ピクチャボックスのサイズを取得します pDC = WaveWindowPICT->GetDC(); //現在のデバイスコンテキストを取得します //ウィンドウを黒く塗りつぶします pDC->FillSolidRect(WaveWindowRect, RGB(0, 0, 0)); //中心軸を書き込みます nZero = (WaveWindowRect.bottom) / 2; //中心線の縦座標は底/2です CPen DotPEN(PS_DOT, 1, RGB(255, 255, 255)); //中心線用のペンの定義します pDC->SelectObject(&DotPEN); //中心線用のペンを選択します pDC->MoveTo(0, nZero); //線を引く始点を決定します pDC->LineTo(WaveWindowRect.right, nZero); //始点から指定した終点まで線を引きます //グラフ描画を行います CPen GraphPEN(PS_SOLID, 1, RGB(255, 255, 0)); //グラフ描画用ペンの定義します pDC->SelectObject(&GraphPEN); //グラフ描画用ペンを選択します pDC->MoveTo(0, (int)(nZero - ((dDataV[0] / 5) * ((double)WaveWindowRect.bottom / 2)))); //始点を決定します for(nLoop = 1; nLoop < 1000; nLoop++){ //順番に座標を決定し線を引いていきます pDC->LineTo((int)(((double)WaveWindowRect.right / 1000) * nLoop), (int)(nZero - (dDataV[(2*nLoop)] / 5) * ((double)WaveWindowRect.bottom / 2))); } CPen GraphPEN2(PS_SOLID, 1, RGB(255, 255, 0)); //グラフ描画用ペンの定義します pDC->SelectObject(&GraphPEN2); //グラフ描画用ペンを選択します pDC->MoveTo(0, (int)(nZero - ((dDataV[1] / 5) * ((double)WaveWindowRect.bottom / 2)))); //始点を決定します for(nLoop = 1; nLoop < 1000; nLoop++){ //順番に座標を決定し線を引いていきます pDC->LineTo((int)(((double)WaveWindowRect.right / 1000) * nLoop), (int)(nZero - (dDataV[2*nLoop+1] / 5) * ((double)WaveWindowRect.bottom / 2))); }

    }

  • TUT-0020

    - 49 - Interface Corporation

    プログラムの入力が終わったら、保存した後、プログラムを実行し、「サンプリング」ボタンを

    クリックしてください。ファンクションジェネレータから出力されている信号がフォームに描画

    されます。

    ※ 上図のプログラム実行結果では、縦軸と横軸がそれぞれ何を意味しているかをわかりやすくするため、ダイアログに+5[V], 0, -5[V], 100[ms]というスタティックテキストを追加しています。

    では、『47ページ CAdDrawGraphDlgクラスのOnSampling関数のコード』の処理を読み取ってみましょう。 最初にデバイスをオープンした後、以降のデータ処理に使用するインタフェースモジュールの分

    解能の情報を取得しています。インタフェースモジュールの情報はAdGetDeviceInfo関数 にて取得し、ADBOARDSPEC構造体(サンプルコードではInfoに定義しています)に格納されています。 従って、Info.ulResolutionを読み出すことでインタフェースモジュールの分解能をビット数で取得することができます。 この読み取った値をもとに、2のべき乗を求めることで、インタフェースモジュールより取得できる最大値を取得することができます。 次にプログラムはサンプリング設定情報を取得しています。サンプリングの情報は

    AdGetSamplingConfig関数にて取得し、サンプリング条件設定構造体であるADSMPLREQ構造体(サンプルコードではConfigに定義しています)に格納されています。

  • TUT-0020

    Interface Corporation - 50 -

    次に、プログラムはこれから行うサンプリングの条件を設定しています。サンプリングの条件設

    定にはAdSetSamplingConfig関数を使用します。 「使用例」

    nRet = AdSetSamplingConfig(hDeviceHandle, Config);

    関数が失敗するとエラーコードが格納されます。

    インタフェースモジュールのオープン時に取得したデバイスハンドルを指定します。

    サンプリング条件設定構造体を指定します。

    サンプリング条件のパラメータは、先程AdGetSamplingConfig関数で取得したサンプリング条件設定構造体(ADSMPLREQ構造体)に設定します。以下のように設定をおこなっています。

    Config.ulChCount = 2 // チャンネル数=2 Config.SmplChReq[0].ulChNo = 1; // 入力チャンネル=チャンネル1 Config.SmplChReq[0].ulRange = AD_5V; // 入力レンジ=±5 V Config.SmplChReq[1].ulChNo = 2; // 入力チャンネル=チャンネル2 Config.SmplChReq[1].ulRange = AD_5V; // 入力レンジ=±5 V Config.fSmplFreq = 10000; // サンプリングレート= 10 kHz Config.ulSmplNum = 1000; // 入力件数=1000件

    上記設定は、上から、「チャンネル数を2」「アナログ入力チャンネルをチャンネル1, 2」, 「入力レンジを±5 V」, 「サンプリングレートを10kHz」, 「入力件数を1000件」を意味しています。

    ADSMPLREQ構造体でのその他のパラメータに関しては本サンプルプログラムでは初期値を適用しています。設定項目の詳細に関しては、HelpのADSMPLREQ構造体およびADSMPLCHREQ構造体の項目を参照してください。 では『47ページ CAdDrawGraphDlgクラスのOnSampling関数のコード』において設定したサンプリング条件についてみてみましょう。 まず、入力チャンネル(ulChNo)と入力レンジ(ulRange)ですが、チャンネル1において±2.5 Vの信号の入力を行うので、それぞれ、「1」と、上下限に余裕を加味し「AD_5V」を設定しています。AD_5VはGPCAD.Hファイルで定義されています。

  • TUT-0020

    - 51 - Interface Corporation

    次にサンプリングレート(fSmplFreq)は、データをどういった間隔でインタフェースモジュールに取り込むかを「Hz」を単位として設定します。ここでは10000(=10 kHz)※を設定していますので、サンプリング時には「0.1ms[=1/(10 kHz)]」ごとにデータが取り込まれます。

    0 1 2 3 ・・・・・・・・・ 単位:ms

    1回目の入力

    2回目の入力

    ・・・・・・・・・

    1000回目の入力

    入力値

    0x0

    0xFFF

    注意!

    ※ fSmplFreqに設定できる最大値・最小値は、使用するインタフェースモジュールおよびコンピュータのスペックにより異なります。チュートリアルで使用したPCI-3153の場合、FIFOモードでは最大約1M(1000000), I/Oモードでは70Kまで設定可能です。 PCI-3161, 3163では62.5kHzが最小となるため