DS-8812/DS-8814(Bringo)のGP-IBの使用例 2002/3/8 岩崎通信機株式会社 計測技術部 1.はじめに DS8812/8814をGP-IBを使用して制御する場合の方法について、コーディング例をもとに説明します。 使用環境は、 ・PC :IBM PC/AT互換PC。 ・OS :Windows95/98。 ・仕様言語 :Microsoft社 VisualBasic(Ver4以上)。 ・GP-IBインタフェース ナショナルインスツルメント社製GPIBカード、またはボード。 コンテック社製GPIBカード(ドライバソフト:LabView対応 API-GPLV(W32)(Ver1.11〜))。 ・ディジタルオシロスコープ 岩崎通信機社製 DS-8812(GP-IBオプション付き),DS-8814。 なお、コーディング例はプログラムの一部分ですので、そのままでは動作しません。 ユーザのアプリケーションに組み込んでご使用下さい。 2.初期化 初期化は次のように行います。プログラムの最初に最低1回は行って下さい。 なお、PCのGP-IBインタフェースアドレスは0、DSO(ディジタル・オシロスコープ,以下同様)は10とします。 ' インタフェースの初期設定を行います。 ' 第2パラメータ:DS8812アドレス 10。 ' 第4パラメータ:タイムアウトなし。 ' 第5パラメータ:書き込み時のEOIは付けない。 ' 第6パラメータ:8ビットコード。読み取り時にデリミタ(LF)検出で終了する。 ' 第7パラメータ:デバイスディスクリプタ。以後、GP-IBへのアクセスはこの変数で行う。 Call ibdev(0,10,0,TNONE,0,&H140A,osc%) ' デバイスクリアを行います。 Call ibclr(osc%) ' 初期状態では、割込みマスクレジスタSTB,ESR,TESRはすべて不可です。 ' ・波形書込みを*WAIで待つ場合で、エラーSRQも処理しなければ、設定は不要です。 ' 波形書込みSRQのみ抑えるには、"*SRE 254"を設定して下さい。 ' ・波形書込みとエラーをSRQで待つ場合は、以下のコーディングが必要です。 Call ibwrt(osc%, "*SRE 255;*ESE 255;TESE 1" + Chr$(10)) 3.設定と確認 DSOのパネルの設定と確認を行うには次のように行います (1) 装置を識別します。 Call ibwrt(osc%, "*IDN?" + Chr$(10)) rbuf$ = space(31) status% = ilrd(osc%, rbuf$, 31) rbuf$=Left(rbuf$,ibcntl-1) ' 受信文字列(にデリミタを含む)のデリミタ以降をカットします 実行結果:rbuf$には DSOがDS-8812の場合、"IWATSU,DS-8812,+00013,<ソフトバージョン>"が、 DSOがDS-8814の場合、"IWATSU,DS-8814,+00013,<ソフトバージョン>"が、返却されます。 (2) time/divを10μsに設定します。 Call ibwrt(osc%, "TDIV 10us;TDIV?" + Chr$(10)) rbuf$ = " " status% = ilrd(osc%, rbuf$, 15) rbuf$=Left(rbuf$,ibcntl-1) ' 受信文字列(にデリミタを含む)のデリミタ以降をカットします 実行結果:rbuf$には"+10.0000E-06"が返却されます。 (3) V軸CH1の設定をまとめて行います。 Call ibwrt(osc%, "C1:TRA ON;CPL AC;BWL OFF;PROBE MANUAL,1;VDIV 2m" + Chr$(10)) 4.波形の書込み/転送  DSOの波形の取込み/転送は次のように行います (1)波形の書込み a.SRQを使用する方法 この方法は、ナショナルインスツルメント社のサンプルでも使用されています。 Call ibwrt(osc%, "*SRE 255") ' SRQ割込みをすべて可とします(重要)。 Call ibwrt(osc%, "WSGL" + Chr$(10)) ' 波形書込みを要求します Call ibwait(osc%, &H800) ' RQSを待ちます Call ibrsp(osc%, spr%) ' ステータスバイトを読み取って確認します If spr% And &H41 <> &H41 Then ' エラー? Response = MsgBox("SRQが異常です", vbExclamation, "波形取込終了") End If <データ転送などの処理> ・・・・・・・・・・・・・ b.*WAI コマンドを使用する方法 Call ibwrt(osc%, "*SRE 254") ' 波形書込完了SRQ割込みを不可とします(重要)。 Call ibwrt(osc%, "WSGL" + Chr$(10)) ' 波形書込みを要求します。 Call ibwrt(osc%, "*WAI" + Chr$(10)) ' 波形書込みが完了するまで、以下のコマンドを ' 受け付けません。なお、*WAIの後に継続してコマ ' ンドを書かないで下さい。 <データ転送などの処理> ・・・・・・・・・・・・・ (2)波形の書込み/転送  a.バイナリ転送 ・データは直接にファイルに格納します ・波形の書込みは、SRQを使用して行います。 (a) YT波形の場合 Call ibwrt(osc%, "*SRE 255") ' SRQ割込みをすべて可とします Call ibwrt(osc%, "DTFORM BYTE" + Chr$(10)) ' 転送データの形式はBYTEです Call ibwrt(osc%, "DTSTART 120" + Chr$(10)) ' データ転送開始アドレス(DS-8812の場合) Call ibwrt(osc%, "DTPOINTS 5000" + Chr$(10)) ' 転送データ数(メモリ長:SHORTの場合,DS-8812の場合) Call ibwrt(osc%, "WSGL" + Chr$(10)) ' 波形を書込みを要求します Call ibwait(osc%, &H800) ' RQSを待ちます Call ibrsp(osc%, spr%) ' ステータスバイトを読み取って確認します If spr% And &H41 <> &H41 Then ' エラー? Response = MsgBox("SRQが異常です", vbExclamation, "波形取込終了") End If ' CH1波形データの転送を行います Call ibeos(osc%, &H1000) ' 扱うデータがバイナリデータなので ' 入力をEOSで終了させないようにします(重要) Call ibwrt(osc%, "WAVESRC CH1" + Chr$(10)) ' ターゲットCHを指定します Call ibwrt(osc%, "DTWAVE?" + Chr$(10)) ' 波形の転送を要求します rbuf$ = " " status% = ilrd(osc%, rbuf$, 10) ' データのプリアンブル(転送データ数)を読取る ' この場合、rbuf$は"#800005000"が返却されます Call ibrdf(osc%, "ch1data.bin") ' データを転送して、PCのカレントディレクトリ ' のch1data.binに転送します。 <<ファイルからデータを読み込むには次のようにして下さい>> Dim datab(5000) As Byte Open "ch1data.bin" For Binary As #1 fs = LOF(1) Data = String$(LOF(1), 0) Get #1, , datab BYTE型の変数に読み込むことが重要です Close #1 Call ibeos(osc%, &H140A) ' 入力をEOSで終了させる(ASCII)モードに戻して ' おきます <<波形の描画は次のように行って下さい>> s = datab(0) ' 1点目の処理 If s > 127 Then s = s - 256 For count = 0 To maxcount - 2 Step 1 e = datab(count + 1) If e > 127 Then e = e - 256 ピクチャボックスformwave.線を1本引きます formwave.PictureWave.Line (count, s)-(count + 1, e) s = e Next (b) FFT波形の場合(FFTオプション有りの場合) Call ibwrt(osc%, "DTFORM WORD" + Chr$(10)) Call ibwrt(osc%, "DTBORD L/H" + Chr$(10)) Call ibwrt(osc%, "DTSTART 0" + Chr$(10)) Call ibwrt(osc%, "DTPOINTS 500" + Chr$(10)) Call ibwrt(osc%, "DTSTEP 1" + Chr$(10)) Call ibwrt(osc%, "DTWAVE?" + Chr$(10)) rbuf$ = " " Status% = ilrd(osc%, rbuf$, 10) ' rbuf$:データのプリアンブル Call ibrdf(osc%, "FFTL_H.bin") '<<ファイルからデータを読み込むには次のようにして下さい>> Open filename For Binary As #1 fs = LOF(1) Data = String$(LOF(1), 0) Get #1, , dataw Close #1 ' <<波形の描画は次のように行って下さい>> s = dataw(0) For count = 0 To maxcount - 2 Step 1 c1 = (count + 1) * 2 e = dataw(count + 1) formwave.Picturewave.Line (count, s)-(count + 1, e) s = e Next  b.ASCII転送 (a) DS-8814の場合 ' ch1波形の転送 Call ibwrt(osc%, "DTFORM ASCII" + Chr$(10)) Call ibwrt(osc%, "DTSTEP 1" + Chr$(10)) Call ibwrt(osc%, "DTSTART 24" + Chr$(10)) ' データ転送開始アドレス Call ibwrt(osc%, "DTPOINTS 1000" + Chr$(10)) ' 転送データ数(メモリ長:SHORTの場合) Call ibwrt(osc%, "WAVESRC CH1" + Chr$(10)) Call ibwrt(osc%, "DTWAVE?" + Chr$(10)) ' 全データの転送要求 Call ibrdf(osc%, "ch1data.txt") ' データを転送して、テキストイメージでファイルに格納する <<出力ファイルの内容>> ,,・・・・・・・・・・・・・・,<デリミタ> <<ch1波形の表示>> Open filename For Input As #1 rbuf$ = " " Input #1, rbuf$ s = Val(rbuf$) count = 0 For count = 0 To maxcount - 2 ' ファイルの終端までループを繰り返します。 rbuf$ = " " Input #1, rbuf$ e = Val(rbuf$) formwave.Picturewave.Line (count, s)-(count + 1, e) s = e Next count Close #1 (b) DS-8812の場合 ' ch1波形の転送 Call ibwrt(osc%, "DTFORM ASCII" + Chr$(10)) Call ibwrt(osc%, "DTSTEP 1" + Chr$(10)) ' 装備されてないバージョンがあります(取説参照) ' 以下、"DTSTART"の値を+35しながら、繰り返して下さい。 Call ibwrt(osc%, "DTSTART 120" + Chr$(10)) ' データ転送開始アドレス Call ibwrt(osc%, "DTPOINTS 35" + Chr$(10)) ' 転送データ数(1回の転送データの最大数:35なので) Call ibwrt(osc%, "WAVESRC CH1" + Chr$(10)) Call ibwrt(osc%, "DTWAVE?" + Chr$(10)) ' 全データの転送要求 Call ibrdf(osc%, "ch1data.txt") ' データを転送して、テキストイメージでファイルに格納する <<出力ファイルの内容>> ,,・・・・・・・・・・・・・・,<デリミタ> <<ch1波形の表示>> (a)に同じ。 5.画面の転送 画面をBMP形式で転送する方法を説明します。 Call ibeos(osc%, &H1000) ' 入力をEOSで終了させないようにします Call ibwrt(osc%, "TSCRN? BMP" + Chr$(10)) rbuf$ = " " status% = ilrd(osc%, rbuf$, 10) ' データ数を読み出します(#80009662) Call ibrdf(osc%, "screen.bmp") ' 画面データをEOIまで読み取ってファイルに格納する Call ibeos(osc%, &H140A) ' 入力をEOSで終了させる(ASCIIモード) 6.自動測定 自動測定をする方法について説明します。 Call ibwrt(osc%, "*SRE 255") ' SRQ割込みをすべて可とします Call ibwrt(osc%, "DIRM A;MSEL CH1,TR" + Chr$(10)) ' 自動測定項目AをCH1、TRに設定します Call ibwrt(osc%, "WSGL" + Chr$(10)) ' 波形を書込みを要求します Call ibwait(osc%, &H800) ' RQSを待ちます Call ibrsp(osc%, spr%) ' ステータスバイトを読み取って確認します If spr% And &H41 <> &H41 Then ' エラー? Response = MsgBox("SRQが異常です", vbExclamation, "波形取込終了") End If Call ibwrt(osc%, "MSRA?" + Chr$(10)) ' 自動測定項目Aの値を読み込みます rbuf$ = " " Call ibrd(osc%, rbuf$) ' rbuf$にCH1,TRの測定結果が返却されます rbuf$=Left(rbuf$,ibcntl-1) ' 受信文字列のデリミタ以降をカットします 7.セットアップの読取り/書込み セットアップの読取り/書込みの方法について説明します。 セットアップデータの形式は、BYTEのみです。 (1)セットアップの読取り Call ibeos(osc%, &H1000) ' 入力をEOSで終了させません Call ibwrt(osc%, "WAVESRC CH1" + Chr$(10)) Call ibwrt(osc%, "DTSTUP?" + Chr$(10)) ' データの読取り要求を出します。 Ch1SetupSize$ = " " status% = ilrd(osc%, Ch1SetupSize$, 10) ' rbuf$:データのプリアンブル Call ibrdf(osc%, "ch1setup.bin") ' ファイル<ch1setup.bin>にセットアップを ' 読み込みます Call ibeos(osc%, &H140A) ' 入力をEOSで終了させるモードに戻します (2)セットアップの書込み Call ibeos(osc%, &H1000) ' 入力をEOSで終了させません Call ibwrt(osc%, "WAVESRC CH1" + Chr$(10)) Call ibwrt(osc%, "DTSTUP" + Chr$(10)) ' データの書込み要求を出します status% = ilwrt(osc%, Ch1SetupSize$, 10)' データのプリアンブル Call ibwrtf(osc%, "ch1setup.bin") ' ファイル<ch1setup.bin>からセットアップを ' DS8812に書込みます Call ibeos(osc%, &H140A) ' 入力をEOSで終了させるモードに戻す 8.コンテック社LabView対応GPIBドライバ(API-GPLV(W32))をご使用の場合の注意 (1) ヘッダーファイルは対応のファイルにお取り替え下さい。 コマンドのニーモニックは全く同様です。 (2) あらかじめ、付属のコンフィギュレーション・ユーティリティ(Nconfig.exe)を使用して、 次の設定をして下さい。     a.のレを外して下さい(disableにする)。     b.で   のレを外して、を0にして下さい。 これを行わないと、?応答の受信ASCII文字列にデリミタを含みません。 NI社の場合、受信ASCII文字列個数はデリミタを含んだ桁数が返ってきます。 以上