GPIBソフトウェア開発者が直面する最も一般的な問題の1つは、各テストシステムの要件に一致するようにソフトウェアを構成することです。1つのドライバはさまざまなシステムで動作するため、ドライバの構成は簡単です。NI NI-488ソフトウェアには、アプリケーションに最適な構成方法がいくつか用意されています。このドキュメントでは、NI-488 MS-DOSソフトウェアで使用可能な各構成方法について説明します。
NI-488ソフトウェアを使用してシステムのデフォルト構成オプションを変更する方法は3つあります。それらは次のとおりである:
以下のセクションでは、ドライバ構成特性を変更する方法と、各方法の利点について説明します。
IBCONF.EXEは、2つのグループの機能をドライバに渡す画面指向の対話式プログラムです。最初のグループは、GPIBインタフェースに接続されているデバイスの特性から構成されています。各デバイスには以下の特徴があります。
2番目のグループは、コンピュータの各GPIBインタフェースボードの特性です。NI-488ドライバは、最大2つのGPIBインタフェースボードを制御できます。各GPIBインタフェースボードには、以下の特徴があります。
IBCONFを手動で実行および変更することの利点は、各デバイスの構成に柔軟性があり、各アプリケーションプログラムに構成コードを追加する必要がないことです。
IBCONFバッチモードは、NI-488ドライバの構成パラメータを変更する別の方法です。バッチモードでは、構成情報は作成した構成ファイルに含まれています。作成したファイルから構成情報をロードするには、次のコマンドを入力します。
ここで、ファイル名は構成ファイルの名前です (例: sample.cfg)。-bとfilenameの間には少なくとも1つのスペースが必要です。
IBCONFデバイスマップは表示されませんが、メモリにロードされたGPIBドライバを更新するように要求するプロンプトが表示されます。はいを選択すると、変更後にコンピュータを再起動する必要がなくなります。ただし、-dオプションを指定してIBCONFを実行すると、ドライバが自動的に更新されるように、プロンプトを表示しないようにすることができます。これにより、ロードされたバージョンのドライバが自動的に構成されます。
バッチモードは、実行可能プログラムを配布するGPIB開発者とGPIBエンドユーザの両方にとって有益です。プログラムがインストールされている開発者にとって、IBCONFのこのバッチモードを使用すると、既存のプログラムに変更を加えることなく適切な構成を簡単に行うことができます。ユーザはバッチファイルを実行するだけで、GPIBデバイスは自動的に構成されます。プログラマは、各プログラムのバッチファイルを開発できます。
バッチファイルは、任意のテキストエディタを使用して編集できます。バッチファイルは、項目のペアで構成される自由形式のテキストファイルです。各項目は、少なくとも1つのスペースまたは改行文字で区切る必要があります。これが唯一の形式制限です。ペアの最初の項目は、構成するボードまたはデバイスの特性、またはボード/デバイスマップ構成関数 (例: 名前の変更、接続、切断) を表すニーモニックです。ペアの2番目の項目は、最初の項目 (ニーモニック) を設定する値です。たとえば、デバイスマップのdev8の名前をscannerに変更するには、バッチファイルに以下のコード行を入力します。
gpib0の自動シリアルポーリングを有効にするには、以下のコード行を入力します。
find board0 spoll yes
ベースI/Oアドレス、割り込み設定、DMAチャンネルなど、実際のIBCONFファイルにあるすべての特性はバッチモードを使用して変更できます。また、IBCONFデバイスマップを使用する場合と同様に、GPIBインタフェースボードからデバイスを接続および接続解除することもできます。表1は、構成項目の有効なすべてのペアのリストです。数値として入力可能な値は、10進数または16進数で入力できます。16進数は、0xの前に付ける必要があります(たとえば、10進数の64は0x40と表記されます)。
|
最初の項目
|
2番目の項目
| |
|
ニーモニック
|
説明
|
Value
|
| 検索 | ボードまたはデバイスを検索 | board#またはdevice# |
| パッド | プライマリGPIBアドレス | 数値 |
| sad | セカンダリGPIBアドレス | 数値 |
| tmo | タイムアウト設定 | 数値またはニーモニック |
| eos | EOSバイト | 数値 |
| レオ | EOSで読み取りを終了 | はいまたはいいえ |
| xeos | 書き込み時にEOSでEOIを設定 | はいまたはいいえ |
| ビン | EOSでの比較タイプ | 7ビットまたは8ビット |
| eot | 書き込みの最後のバイトでEOIを設定 | はいまたはいいえ |
| sc | システムコントローラ(ボードのみ) | はいまたはいいえ |
| sre | SC時にRENをアサート (ボードのみ) | はいまたはいいえ |
| spoll | 自動シリアルポーリングを有効にする (ボードのみ) | はいまたはいいえ |
| tmng | タイミング(ボードのみ) | 2usec、500nsec、 350nsec |
| e488_2 | 488.2プロトコルを有効にする (ボードのみ) | はいまたはいいえ |
| cic_prot | CICプロトコル(ボードのみ) | はいまたはいいえ |
| 整数 | 割り込み設定 (ボードのみ) | 数値 |
| ポート | ベースI/Oアドレス(ボードのみ) | 数値 |
| dma | DMAチャンネル(ボードのみ) | 数値 |
| raddr | 繰り返しアドレス指定 (デバイスのみ) | はいまたはいいえ |
| name | デバイス名を変更する (デバイスのみ) | デバイス名 |
| 接続 | デバイスをボードに接続する (デバイスのみ) | 基板# |
| 接続解除 | デバイスをボードから接続解除する (デバイスのみ) | 値なし |
| タイプ | 現在のボードをPC2またはPC2Aモードに切り替える | pc2またはpc2a |
次の例は、サンプル構成ファイルおよび各エントリの段階的な説明です。
例: scanner.cfgサンプル構成ファイル
要件 :
構成ファイル ―
デバイスを構成する3つ目の方法は、特殊な構成関数を使用してアプリケーションプログラム内で動的に構成することです。前述したように、GPIBシステムを構成するには、バスと接続先デバイスに関する知識が必要です。アプリケーションソフトウェアの開発者は、初心者ユーザがIBCONFを理解または編集しなくてもよいように、ドライバを動的に構成できます。この方法は、同じGPIBインタフェースボードで多くの異なるシステム構成を実行する場合にも最適です。プログラムで行った構成の変更は、プログラムの実行中のみ適用されます。終了時に、構成パラメータは元の設定に戻ります。この方法は、より効率的であるだけでなく、サブルーチン関数呼び出しの形式で提供されるため、非常に簡単です。
「IBCONFIG」関数
最も強力な構成関数であるibconfigを使用すると、ibconfig関数呼び出しをアプリケーションプログラムに追加するだけで、IBCONFのすべてのソフトウェアパラメータを動的に構成できます。IBCONFの設定に関係なく、ドライバが正しく構成されていることを確認することができます。ibconfigの構成パラメータは、ボードパラメータとデバイスパラメータの2つのグループに分けることができます。たとえば、ハードウェア割り込みの有効/無効や自動シリアルポーリングの有効/無効などのボードパラメータです。デバイスパラメータは、繰り返しアドレス指定を有効/無効にできます。
また、ibconfigを使用して、プライマリおよびセカンダリアドレス、タイムアウト、および文字列終端を選択することもできます。ただし、従来のNI-488構成関数であるibpad (プライマリアドレスの変更)、ibsad(セカンダリアドレスの変更)、ibtmo (タイムアウト設定の変更)、ibeos (文字列の終わり文字を設定)、ibeot(END終了メッセージを設定)は引き続きサポートされています。以下のコード部分は、ibconfig関数の使用方法を示しています。
REM QuickBASIC 4.5サンプル
REM 以下のコードは、GPIB操作用にデバイスを設定します。
REM
REM $INCLUDE: 'qbdecl.bas'
ibfind ("dev1", dev%) を呼び出す
REM プライマリアドレスを7に変更します。
オプション% = IbcPAD:値% = 7
CALL ibconfig(dev%, option%, value%)
REM タイムアウトを10秒に変更します。
オプション% = IbcTMO:値% = 13
CALL ibconfig (dev%, option%, value%)
IBLN関数
ibln関数は、指定されたアドレスのリスナを確認します。これはNI-488.2™ルーチンのFindLstnに似ていますが、パラメータがアドレスの配列ではなく単一のデバイスアドレスである点が異なります。iblnは、複数のアドレスをスキャンしてバス上のリスナを検出するのに役立ちます。アドレスが特定されたら、ibconfig を使用してドライバでそのデバイスのプライマリアドレスを変更できます。
QuickBASICコードの以下の部分は、バス上のすべてのGPIBプライマリアドレス (セカンダリアドレスなし) でリスナをスキャンし、検出されたデバイスを報告します。
REM $INCLUDE: 'qbdecl.bas'
DIMデバイス%(30)
cnt% = 0
REM
REM 以下の呼び出しはdev1を汎用デバイスとして開きます。
REM iblnを呼び出すにはユニットデスクリプタが必要です。
ibfind("dev1", dev%) を呼び出します。
REM
REM セカンダリアドレスを検索していないため、
REM sadパラメータを0にリセットします。 sad% = 0
REM ここで、30のプライマリアドレスをスキャンします。 以下に 注目してください
REM アドレス0はデフォルトなのでチェックしていません
REM GPIBコントローラのREMアドレスです。常に
REM 傾聴中。
ここで、i% = 1~30
REM リスナが
REM i% で指定されたアドレスです。 デバイスがリスンしている場合、保存
REM アドレスを配列 Device%() に置換します。これはリストです。
すべてのアクティブなリスナのREMです。
REM
REM 各リスナが検出されるたびにカウントを増分します。
次へ i%
REM アクティブなアドレスを印刷します。
「デバイスは以下のアドレスにあります」を印刷
J% = 0~cnt% - 1の場合
PRINT "A device is at GPIB Address "; Device%(j%)
次のj%
IBDEV関数
従来のNI-488アプリケーションでは、ibfind関数は通信用にデバイスを開くために使用されます。ibfindは、そのデバイスにGPIB呼び出しができるように番号(ユニットデスクリプタ)を返します。ただし、ibfindを使用するには、デバイス名がIBCONFで事前に構成されている必要があります。そうでない場合、ibfindは失敗します。ご覧のように、デバイス名が分からない場合、これは欠点です。
「ibfind」関数の代わりに「ibdev」関数を使用すると、デバイス名を知らないで開いたり初期化したりできます。ibdevは、関数の引数の1つとしてデバイス名を指定しない点を除いて、ibfindに似ています。ibdevは、ibconfig、ibln、および他のすべてのデバイスレベル呼び出しで使用されるユニットデスクリプタを検索して返します。ibdevを呼び出してユニットデスクリプタを取得した後、ibconfigを呼び出して、ibdevを使用して構成されていない通信特性を構成する必要がある場合もあります。
ibdevの使用方法の例を次に示します。
REM bd.index% は、 gpib0の場合は0、 gpib1の場合は1です 。
bd.index% = 0
REM pad% は使用するデバイスのプライマリアドレスです。
REM が開いています。上記のプログラムで、
REM アドレス7に1つのリスンデバイスがあることに注目してください。
pad% = Device%(0) : sad% = 0
REM 指定する必要があるその他のパラメータについては、
REM タイムアウトを10秒に設定し、
REM EOS終端を書き込み、無効にします。
tmo% = 13 : eot% = 1 : eos% = 0
REM ibdevを呼び出すと、 ud% に返される値は
REM ユニットデスクリプタ。
CALL ibdev(bd.index%, pad%, sad%, tmo%, eot%, eos%, ud%)
このドキュメントでは、従来のIBCONF方式以外のGPIBシステムを構成する2つの方法(バッチモード方式とprogramming方式)について説明しました。これらの新しい方法はいずれも、エンドユーザの手を煩わせることなく、ドライバを透過的に構成します。バッチモードを使用すると、エンドユーザがIBCONFファイルを実際に編集しなくても、IBCONFで設定を構成するバッチファイルを作成できます。NI-488の構成関数を使用して、プログラムに関数を追加することでドライバを動的に構成できます。3つの最も強力なNI-488構成関数(ibconfig、ibln、ibdev)は、特定のリスナを検出し、アプリケーションプログラム内のIBCONFにあるすべての構成設定を変更できます。