本ドライバでPIO-32DM(PCI)を使用する場合は、API-TOOLコンフィグレーションプログラム での登録が必要です。詳しくは、API-PAC(W32)の解説書を参照してください。(※1) Windows XP/2000、Windows Me/98/95で使用する場合は、ボードを挿入して再起動した時点で 出てくる新しいハードウェアの追加のウィザードにしたがって、ボードをOSに登録する必要 があります。詳しくは、ヘルプファイル(HWINST.HLP)を参照してください。
本ドライバは、DLLとデバイスドライバ(VXD/SYS)ファイルで提供されています。
作成されたアプリケーションを他の環境で使用する場合、以下のファイルをコピーしてください。
ここに記述されていない他の依存ファイルについての詳細は、ヘルプを参照してください。
※1) PIO-32DM(PCI)は、1グループごとに1枚しかボードを登録できません。
◆ Windows Me/98/95
API-TOOLコンフィグレーションファイル: C:¥CONTECW95¥CONFIG.EXE
C:¥CONTECW95¥APCFG.DLL C:¥WINDOWS¥SYSTEM¥APCFG.VXD
DLLファイル: C:¥WINDOWS¥SYSTEM¥APIDIO.DLL
VXDファイル: C:¥WINDOWS¥SYSTEM¥APIDIO05.VXD
◆ Windows XP/2000/NT
※2API-TOOLコンフィグレーションファイル:
C:¥CONTEC¥CONFIG.EXE C:¥CONTEC¥APCFG.DLL
C:¥WINNT¥SYSTEM32¥DRIVERS¥APCFG.SYS
DLLファイル: C:¥WINNT¥SYSTEM32¥APIDIO.DLL
SYSファイル: C:¥WINNT¥SYSTEM32¥DRIVERS¥APIDIO05.SYS
作成するアプリケーションからDLLの関数を呼び出すには、以下の手順が必要です。
■VisualC++の場合
① サンプルプログラムに含まれているヘッダファイル(APIDIODM.H)をインクルードしてく ださい。
② サンプルプログラムに含まれているLIBファイル(APIDIO.LIB)をプロジェクトに追加して ください。
■VisualBasicの場合
① サンプルプログラムに含まれている標準モジュール(APIDIODM.BAS)をプロジェクトに追 加してください。
※2) Windows XPおよび2000でVB4.0を使用することはできません。当社では、動作保証してお りません。Windows XPおよび2000では、MFCライブラリのスタティックリンクでのみ動作確 認をしております。
136 API-PAC(W32)RM/DIO
使用手順
PIO-32DM(PCI)を使用する場合には、以下の手順で操作してください。各関数の詳細について は、関数リファレンスを参照してください。
スタート バッファ設定
リセット
サンプリング/ジェネレーティング条件設定(※) モード設定
初期化
ストップ
終了処理
※注 ) ここでサンプリングとは、ボードからメモリへデータを 入力することを表し、ジェネレーティングとは、メモリ からボードへデータを出力することを表します。
図3.1 使用手順
API-PAC(W32)RM/DIO 137
■初期化
本ボードを使用する場合は、初期化処理、入出力のモード設定が必要です。
初期化処理(DioOpen、DioOpenEx)で使用するボードを初期化し、デバイスハンドルを取得し ます。以降のボードに対する操作は、ここで取得したデバイスハンドルを使用して行います。
■モード設定
デバイスハンドルを取得すると、次に入出力の方向を決めるためのモード設定
(DioDmSetDirection)を行います。入出力方向は、32点入力、32点出力、16点入力16点出力の中 から選びます。
次に、スタンドアロン/マスタ/スレーブ設定を行います。
1枚のみ使用する場合、または各ボードを独立して使用する場合には、スタンドアロンに設定 します(DioDmSetStandAlone)。
複数枚を同期させて使用する場合は、そのうちの1枚を同期信号を出力するボード(マスタ)と して設定し(DioDmSetSetMasterCfg)、それ以外を同期信号を受け取るボード(スレーブ)として 設定します(DioDmSetSlaveCfg)。
複数枚のボードを同期させて使用する場合、同期制御コネクタ(SCコネクタ)を使用するのが便 利です。
詳しくは、「複数枚のボードを同時に使用する場合」、「同期制御コネクタ」を参照してくだ さい。
■連続入出力の手順
バスマスタ転送機能を用いて、サンプリング(入力)/ジェネレーティング(出力)する場合の設定 手順を説明します。
・サンプリング/ジェネレーティング条件の設定
初期化とモード設定が完了したら、サンプリング/ジェネレーティング条件を設定します。
サンプリング/ジェネレーティング条件には、入出力を開始するための条件(ソフトウェアスタ ート、外部スタート等)を設定するスタート条件設定(DioDmSetStartTrg)、入出力を行うタイミ ング(内部クロック、外部クロック等)を設定するクロック条件設定(DioDmSetClockTrg)、入出 力を完了するための条件(ソフトウェアストップ、指定個数停止など)を設定する、ストップ条 件設定(DioDmSetStopTrg)の3種類があります。
また、各設定に対して、それを補足する条件設定関数(例:個数指定停止時の個数設定など)が あります。
これらのサンプリング/ジェネレーティング条件設定は、常に同じ条件でデータを入出力する 場合には、初期化後に一度行っておけば、それ以降は同じ条件で動作が行われます。データ転 送ごとに異なる動作条件で転送する場合には、変更すべき設定のみを、転送開始する前に設定 してください。
138 API-PAC(W32)RM/DIO
サンプリング/ジェネレーティングのパターンは、以下の表の中から選択できます。
表3.1 サンプリング/ジェネレーティングのパターン
条件
スタート条件 ソフトウェアスタート DIODM_START_SOFT 外部スタート立上り DIODM_START_EXT_RISE 外部スタート立下り DIODM_START_EXT_FALL パターン一致(入力のみ) DIODM_START_PATTERN SCコネクタEXTSIG1 DIODM_START_EXTSIG_1 SCコネクタEXTSIG2 DIODM_START_EXTSIG_2 SCコネクタEXTSIG3 DIODM_START_EXTSIG_3 クロック条件 内部クロック DIODM_CLK_CLOCK
外部クロック DIODM_CLK_EXT_TRG ハンドシェイク DIODM_CLK_HANDSHAKE SCコネクタEXTSIG1 DIODM_CLK_EXTSIG_1 SCコネクタEXTSIG2 DIODM_CLK_EXTSIG_2 SCコネクタEXTSIG3 DIODM_CLK_EXTSIG_3 ストップ条件 ソフトウェアストップ DIODM_STOP_SOFT
外部ストップ立上り DIODM_STOP_EXT_RISE 外部ストップ立下り DIODM_STOP_EXT_FALL 指定個数停止 DIODM_STOP_NUM_1 SCコネクタEXTSIG1 DIODM_STOP_EXTSIG_1 SCコネクタEXTSIG1 DIODM_STOP_EXTSIG_2 SCコネクタEXTSIG1 DIODM_STOP_EXTSIG_3
種類 シンボル
・リセット
リセット関数によって、前回転送時のカウンタ値やFIFO内容をリセットする必要があります (DioDmReset)。
・ バ ッ フ ァ の 設 定(サンプリング : 入 力)
バスマスタ転送は、ボードに転送先のメモリアドレスを設定しておき、転送をスタートすると ボードからそのメモリアドレスへデータの転送を行います。
したがって、転送開始前に入力値を受け取るバッファ領域を、ボードに設定しておかなければ なりません(DioDmSetBuff)。
設定したバッファ領域は、物理的に他のアドレスに移動しないようにロックされます。ロック された領域は、転送完了によってアンロックされます。アンロックされた領域に対する転送は 危険ですので、バッファの設定は転送を行うごとに必ず行なわなければなりません。
バッファ領域をヒープやスタックなどに取得した場合、この領域は転送が完了するまで、開放 されないようにしなければなりません。転送完了までにバッファ領域が開放された場合、その 領域は他の処理に使用されます。
他の処理に使用されている領域にデータ転送が行われると、プログラムが例外を発生してしま う可能性があります。
プログラムの安全性を重視する場合は、バスマスタ転送に使用する領域を、グローバルな領域 にすることをお勧めします。
API-PAC(W32)RM/DIO 139
PIO-32DM(PCI)では、最大64MByte分のバッファ領域を、ボードに設定することが可能です。
また、転送時の動作として、バッファ内にデータを全部転送した時点で転送を完了する1回転 送と、同じバッファ領域に対して無限回数繰り返してデータを転送する無限転送を用意してい ます。
・ バ ッ フ ァ の 設 定(ジェネレーティング: 出 力)
バスマスタ転送は、ハードウェアに転送元のメモリアドレスを設定しておき、ジェネレーティ ングを実行する前にそのメモリアドレスからボード内のFIFOにデータの転送を行っておきま す。
出力を行う場合は、出力データを格納したバッファ領域を、ハードウェアに設定しておかなけ ればなりません(DioDmSetBuff)。
設定したバッファ領域は、物理的に他のアドレスに移動しないようにロックされます。ロック された領域は、転送完了によってアンロックされます。バッファの設定は転送を行うごとに必 ず行わなければなりません。
バッファ領域をヒープやスタックなどに取得した場合、この領域は転送が完了するまで、開放 されないようにしなければなりません。転送完了までにバッファ領域が開放された場合、その 領域は他の処理に使用され、出力したいデータ以外のデータが書き込まれます。そのままの状 態で転送が行われると、予期せぬデータを出力してしまう可能性があります。
プログラムの安全性を重視する場合は、バスマスタ転送に使用する領域を、グローバルな領域 にすることをお勧めします。
PIO-32DM(PCI)では、最大64MByte分のバッファ領域を、ハードウェアに設定することが可能 です。
また、転送時の動作として、バッファ内のデータを全部転送した時点で転送を完了する1回転 送と、同じバッファ領域に対して無限回数繰り返してデータを転送する無限転送を用意してい ます。
同一データを指定回数だけ繰返して転送したい場合、その回数分のサイズのバッファを用意し て、1回転送を使用してください。
・スタート
サンプリング/ジェネレーティング条件を設定し、バッファを設定したら、動作をスタートし ます(DioDmStart)。
動作をスタートすると、スタート条件が満たされた時点でサンプリング/ジェネレーティング が開始され、ストップ条件が満たされた時点でサンプリング/ジェネレーティングが終了しま す。ソフトウェアスタートにした場合、DioDmStart関数を呼び出したタイミングで、サンプリ ング/ジェネレーティングが開始されます。
入力データは、一旦ボード内のFIFOに蓄えられ、バスが空いたタイミングを利用して、アプ リケーション中のメモリに転送されます。
出力データは、直ちにボード内のFIFOに送られ、クロック条件が成立した時点で外部に出力 されます。
・ストップ/転送完了
ストップ条件が満たされると、サンプリング/ジェネレーティングが終了します。アプリケー ションから動作の終了を捕らえるには、ステータスを監視する方法(DioDmGetStatus)と、メッ セージによって終了を確認する方法(DioDmSetStopEvent)の2つが用意されています。動作途 中で、転送数を確認して(DioDmGetCount)、処理を行うこともできます。サンプリング/ジェネ レーティングが終了すると、ロックされていたバッファ領域がアンロックされます。