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")				' データを転送して、テキストイメージでファイルに格納する

						<<出力ファイルの内容>>

					<d1>,<d2>,・・・・・・・・・・・・・・,<d1024><デリミタ>

       					<<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")				' データを転送して、テキストイメージでファイルに格納する

						<<出力ファイルの内容>>

					<d1>,<d2>,・・・・・・・・・・・・・・,<d35><デリミタ>

       					<<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.<IEEE488.2><advanced>で<automatic serial polling>のレを外して下さい(disableにする)。
   	b.<IEEE488.2><Temination Methods>で
	    	<Teminate Read On EOS>のレを外して、<EOS Byte>を0にして下さい。

			これを行わないと、?応答の受信ASCII文字列にデリミタを含みません。
			NI社の場合、受信ASCII文字列個数はデリミタを含んだ桁数が返ってきます。

																					以上