いまどきN88BASICでGP-IBボードを通じて計測器を制御する方法

下に述べるのは、いまどきPC9801-FA(平成3年購入)でN88BASIC(MS-DOS版)を使い、GP-IBボード経由でヒューレットパッカード製(現アジレントテクノロジー)デジタルマルチメーターHP34401Aを制御して、電圧値などの経時変化を自動測定する方法である。

■ 計測器HP34401A側の設定

INTERFACEとLANGUAGEの設定をする。

インターフェースとしてHP-IB/488を選ぶ
・SHIFT+<でMENUを表示
・>4回でE:I/O MENUを表示
・V1回、>2回で2:INTERFACEを表示
・<>でRS-232CかHP-IB/488を選ぶようになっているのでHP-IB/488を選んでRETURN
・ピー音で設定終了

同様に2:INTERFACEの表示から
・>3回で5:LANGUAGEを表示
・SCPLやHP3478Aが選べるようになっているので、HP3478Aを選んでRETURN
・ピー音で設定終了

ちなみに、ヒューレットパッカード社はGP-IBのことをHP-IBと表記している。


■ PC側の設定

・GP-IBボードを通じて、GP-IBケーブルが計測器側に接続していることを確認する。

・下記のプログラムをメモ帳か何かで入力し、HP34401A.BASの名前で、N88BASICが動作するディレクトリに保存しておく。

10 '
20 '
30 '
40 '
50 STOP ON '
60 ON STOP GOSUB 2150 '
70 ON ERROR GOTO *ERRORMES '
80 YHP=23 '計測器のGP-IBアドレス、装置のHP-IB ADDRが23でないときには変更
90 TR=1:S=0:SB=0:ST=0:L=1
100 ISET IFC '初期化
110 ISET REN '
120 CMD DELIM=0 '
130 CMD TIMEOUT=50 '50秒でタイムアウト
140 CLS:SCREEN 2:CONSOLE ,,0,1
150 HP$="DCV"'直流電圧を測定する。直流電流だとDCAに設定
500 GOSUB *MAKEFILE
510 OPEN FILEE$ FOR OUTPUT AS #1
520 PRINT #1,DATE$
530 PRINT:COLOR 5:PRINT "何分ごとに測定しますか?":COLOR 7
540 INPUT " (60秒未満ごとに測定したいときは0を入力) ",X:COLOR 7
550 IF X=0 GOTO 1000
555 PRINT@ YHP;HP$:GOSUB *WAITTIME
560 MIN=VAL(MID$(TIME$,4,2)):SEC=VAL(RIGHT$(TIME$,2))
570 CLS:COLOR 2:LOCATE 0,0:PRINT "**********測定中********** ";:COLOR 7
575 PRINT X;"分おきに測定"
580 GOSUB *MEASUREMENT
590 MIN=MIN+X:IF MIN>=60 THEN MIN=MIN-60
600 IF MIN=VAL(MID$(TIME$,4,2)) AND SEC=VAL(RIGHT$(TIME$,2)) THEN 610 ELSE 600
610 GOSUB *MEASUREMENT
620 GOTO 590
630 *MEASUREMENT
650 INPUT@ YHP;A:GOSUB *WAITTIME
660 PRINT HP$;" = ";A;" ";S;"MIN ";TIME$
670 PRINT #1,TIME$;",";S;",";A
680 IF A*1000*L>10 THEN L=L/10 ELSE GOTO 700
690 GOTO 680
700 IF A*1000*L<1 THEN L=L*10 ELSE GOTO 720
710 GOTO 700
720 PSET (20+ST,380-36*L*A*1000)
730 S=S+X:ST=ST+X:IF ST>600 THEN ST=ST-600
740 RETURN
800 *WAITTIME
810 FOR P=1 TO 10000:NEXT P
820 RETURN
1000 '
1005 COLOR 5:INPUT "何秒ごとに測定しますか? ",BYOU:COLOR 7
1010 PRINT@ YHP;HP$
1020 MIN=VAL(MID$(TIME$,4,2)):SEC=VAL(RIGHT$(TIME$,2))
1030 CLS:COLOR 2:LOCATE 0,0:PRINT "**********測定中********** ";:COLOR 7
1035 PRINT BYOU;"秒おきに測定"
1040 GOSUB *MEASUREBYOU
1050 SEC=SEC+BYOU:IF SEC>=60 THEN SEC=SEC-60
1060 IF SEC=VAL(RIGHT$(TIME$,2)) THEN 1070 ELSE 1060
1070 GOSUB *MEASUREBYOU
1080 GOTO 1050
1100 *MEASUREBYOU
1110 INPUT@ YHP;A:GOSUB *WAITTIME
1120 PRINT HP$;" = ";A;" ";SB;"SEC ";TIME$
1130 PRINT #1,TIME$;",";SB;",";A
1140 IF A*1000*L>10 THEN L=L/10 ELSE GOTO 1160
1150 GOTO 1140
1160 IF A*1000*L<1 THEN L=L*10 ELSE GOTO 1180
1170 GOTO 1160
1180 PSET (20+ST/BYOU,380-36*L*A*1000)
1190 SB=SB+BYOU:S=S+BYOU:ST=ST+BYOU:IF ST>600 THEN ST=ST-600
1200 RETURN
1210 'END
2000 *MAKEFILE
2010 PRINT
2020 COLOR 5:INPUT "ファイル名を入力してください ",FILEE$
2030 OPEN FILEE$ FOR INPUT AS #1
2040 CLOSE
2050 COLOR 6:PRINT "このファイルは既に存在しています。上書きしてもいいですか?";:COLOR 5:PRINT " (Y or N) ":COLOR 7
2060 A$=INKEY$ : IF A$="" THEN GOTO 2060
2070 IF A$<>"Y" AND A$<>"y" AND A$<>CHR$(13) THEN GOTO *MAKEFILE
2080 OPEN FILEE$ FOR OUTPUT AS #1 : CLOSE
2090 RETURN
2100 *ERRORMES
2110 IF ERR=53 THEN 2080
2130 COLOR 6:PRINT "エラーが発生しましたので、終了します。 "
2140 COLOR 6:PRINT "エラー番号は ";ERR;" です。 "
2150 END
2160 '*BYOU
2170 'RETURN
2180 CLOSE:END

・MS-DOSのコマンドラインから次のように入力して、GPIBを取り込んでN88BASICを起動する。_はスペース。大文字小文字の区別はどうでもよい。
 N88BASIC.EXE_/E:GPIB_/T

・起動したN88BASICの画面上に下のように入力するとプログラムが実行される。
 RUN_"HP34401A"

■ その他

・N88BASICの画面から、MS-DOSの画面に戻るには SYSTEM と入力

・LISTでプログラム表示 行番号+RETURNでプログラム変更

・load "プログラム名"でプログラムを読み込み、save "プログラム名", a でプログラムを保存

・コンパイルしてEXEファイルにするには、MS-DOSのコマンドラインから BASICC と入力(当然、コンパイラは必要)

・PC9801-FAで使用する3インチフロッピーディスクはPC98用のフォーマットのもの(1.2Mbyte、DOS8の表示がある)を用いる。DOS/V用の1.4Mbyteのものでは 動作しない。

・PC9801-FAの電源を切るときは、WINDOWSを終了し、 A> のプロンプトが出てからストップキーを2回押し、スイッチオフ。

  ■ 追記 参考プログラム アドバンテスト社製TR6143で一定電流を流しながら、マルチメータHP3457Aで電圧を測定するプログラム

10 '3457A
20 STOP ON
30 ON STOP GOSUB 490
40 ON ERROR GOTO *ERRORMES
50 YHP=23:TR=1:S=0:ST=0:L=1
60 ISET IFC
70 ISET REN
80 CMD DELIM=0
90 CMD TIMEOUT=50
95 CLS:SCREEN 2:CONSOLE ,,0,1
100 COLOR 5:PRINT "Input Command Mode (A-C), please."
110 PRINT " A: 4-Wire Ohms Measurement with HP3457A only "
120 PRINT " B: 4-Wire Ohms Measurement with HP3457A and TR6143"
130 PRINT " C: 4-Wire Ohms Measurement with HP3457A and TR6143":COLOR 7
140 MODE$=INKEY$:IF MODE$="" THEN 140
150 IF MODE$="A" OR MODE$="a" THEN 190
160 IF MODE$="B" OR MODE$="b" THEN 230
170 IF MODE$="C" OR MODE$="c" THEN 270
180 GOTO 110
190 HP$="OHM":PRINT "A: This mode is for making 4-wire ohms measurement with HP3457A only. ";:COLOR 4:PRINT "OK? (Y or N) ":COLOR 7
200 A$=INKEY$:IF A$="" THEN GOTO 200
210 IF A$<>"Y" AND A$<>"y" AND A$<>CHR$(13) THEN GOTO 100
220 GOTO 320
230 HP$="DCV":PRINT "B: This mode is for making 4-wire ohms measurement with HP3457A and TR6143. TR6143 works as a current source and HP3457A performs voltage measurement. In this mode, you must operate TR6143 from the front panel. ";
235 COLOR 4:PRINT "OK? (Y or N) ":COLOR 7
240 A$=INKEY$:IF A$="" THEN GOTO 240
250 IF A$<>"Y" AND A$<>"y" AND A$<>CHR$(13) THEN GOTO 100
260 GOTO 320
270 HP$="DCV":PRINT "C: This mode is for making 4-wire ohms measurement with HP3457A and TR6143. TR6143 works as a current source and HP3457A performs voltage measurement. ";
280 PRINT "In this mode, you can operate both TR6143 and HP3457A from the keyboard of PC. ";:COLOR 4:PRINT "OK? (Y or N) ":COLOR 7
290 A$=INKEY$:IF A$="" THEN GOTO 290
300 IF A$<>"Y" AND A$<>"y" AND A$<>CHR$(13) THEN GOTO 100
310 GOTO 320
320 GOSUB *MAKEFILE
330 OPEN FILEE$ FOR OUTPUT AS #1
340 PRINT #1,DATE$
345 COLOR 5:INPUT "Every what minutes shall I perform the measurement? ",X:COLOR 7
350 IF MODE$="C" OR MODE$="c" THEN GOTO 1000
360 MIN=VAL(MID$(TIME$,4,2)):SEC=VAL(RIGHT$(TIME$,2))
370 COLOR 2:PRINT "Measurement is started. ":COLOR 7
380 GOSUB *MEASUREMENT
390 MIN=MIN+X:IF MIN>=60 THEN MIN=MIN-60
400 IF MIN=VAL(MID$(TIME$,4,2)) AND SEC=VAL(RIGHT$(TIME$,2)) THEN 410 ELSE 400
410 GOSUB *MEASUREMENT
420 GOTO 390
430 *MEASUREMENT
440 PRINT@ YHP;HP$
450 INPUT@ YHP;A
460 PRINT HP$;" = ";A;" ";S;"min ";TIME$
465 PRINT #1,TIME$;",";S;",";A
470 IF A*1000*L>10 THEN L=L/10 ELSE GOTO 472
471 GOTO 470
472 IF A*1000*L<1 THEN L=L*10 ELSE GOTO 474
473 GOTO 472
474 PSET (20+ST,380-36*L*A*1000)
475 S=S+X:ST=ST+X:IF ST>600 THEN ST=ST-600
480 RETURN
490 PRINT @TR;"H":CLOSE:END
500 *MAKEFILE
510 PRINT
520 COLOR 5:INPUT "Input file name (within 8 characters), please. ",FILEE$:COLOR 7
530 PRINT "File name is ";FILEE$;".PRN ";:COLOR 4:PRINT "OK? (Y or N)":COLOR 7
535 A$=INKEY$:IF A$="" THEN GOTO 535
537 IF A$<>"Y" AND A$<>"y" AND A$<>CHR$(13) THEN GOTO 520
540 FILEE$=FILEE$+".PRN"
550 OPEN FILEE$ FOR INPUT AS #1
560 CLOSE
570 COLOR 6:PRINT "This file already exists! May I overwrite? ";:COLOR 4:PRINT " (Y or N) ":COLOR 7
580 A$=INKEY$ : IF A$="" THEN GOTO 580
590 IF A$<>"Y" AND A$<>"y" AND A$<>CHR$(13) THEN GOTO *MAKEFILE
600 OPEN FILEE$ FOR OUTPUT AS #1 : CLOSE
610 RETURN
620 *ERRORMES
630 IF ERR=53 THEN 600
635 PRINT @TR;"H":CLOSE
640 COLOR 6:PRINT " There are some troubles. Now I quit this program. "
645 COLOR 6:PRINT "Error Number is ";ERR
650 END
1000 '
1010 PRINT@ TR;"I4"
1020 COLOR 5:INPUT "Input current intensity /mA ",ISDATA
1030 INPUT "Input voltage limit /mV ",LMDATA:COLOR 7
1040 PRINT "Current intensity ";ISDATA;"mA Voltage limit ";LMDATA;"mV ";:COLOR 4:PRINT "OK? (Y or N)":COLOR 7
1050 A$=INKEY$:IF A$="" THEN GOTO 1050
1060 IF A$<>"Y" AND A$<>"y" AND A$<>CHR$(13) THEN GOTO 1020
1080 COLOR 2:PRINT "NOW ON MEASUREMENT ":COLOR 7
1090 MIN=VAL(MID$(TIME$,4,2)):SEC=VAL(RIGHT$(TIME$,2))
1095 PRINT #1,"Current Intensity =";ISDATA;"mA";" Mode C"
1098 PRINT@ TR;"D"+STR$(ISDATA)+"MA,D"+STR$(LMDATA)+"MV,E"
1099 'FOR T=1 TO 10000:NEXT T
1100 GOSUB *MEASUREMENTC1
1105 'PRINT@ TR;"D"+STR$(-ISDATA)+"MA,D"+STR$(LMDATA)+"MV,E"
1107 GOSUB *MEASUREMENTC2
1108 LINE (20,20)-(620,20):LINE (20,380)-(620,380)
1109 LINE (20,20)-(20,380):LINE (620,20)-(620,380)
1110 MIN=MIN+X:IF MIN>=60 THEN MIN=MIN-60
1115 'PRINT@ TR;"D"+STR$(ISDATA)+"MA,D"+STR$(LMDATA)+"MV,E"
1120 IF MIN=VAL(MID$(TIME$,4,2)) AND SEC=VAL(RIGHT$(TIME$,2)) THEN 1130 ELSE 1120
1130 GOSUB *MEASUREMENTC1
1133 'PRINT@ TR;"D"+STR$(-ISDATA)+"MA,D"+STR$(LMDATA)+"MV,E"
1135 GOSUB *MEASUREMENTC2
1140 GOTO 1110
1150 *MEASUREMENTC1
1155 PRINT@ TR;"D"+STR$(ISDATA)+"MA,D"+STR$(LMDATA)+"MV,E"
1157 FOR T=1 TO 10000:NEXT T
1160 PRINT@ YHP;HP$
1170 INPUT@ YHP;A
1180 PRINT "OHM(+) = ";
1185 COLOR 5:PRINT A/ISDATA*1000;" ";:COLOR 7
1187 PRINT HP$;" = ";A;" ";TIME$;" ";
1188 COLOR 5:PRINT S;:COLOR 7:PRINT "min"
1190 PRINT #1,TIME$;" ,";S;",";A;",";A/ISDATA*1000;" , ";
1200 RETURN
1210 *MEASUREMENTC2
1215 PRINT@ TR;"D"+STR$(-ISDATA)+"MA,D"+STR$(LMDATA)+"MV,E"
1217 'FOR T= 1 TO 20000:NEXT T
1220 PRINT@ YHP;HP$
1230 INPUT@ YHP;B
1233 'PRINT@ TR;"D"+STR$(ISDATA)+"MA,D"+STR$(LMDATA)+"MV,E"
1235 PRINT@ TR;"H"
1240 PRINT "OHM(-) = ";
1241 COLOR 5:PRINT -B/ISDATA*1000;:COLOR 7
1242 PRINT " ";HP$;" = ";B;" ";TIME$;" ";
1243 COLOR 5:PRINT S;:COLOR 7:PRINT "min"
1245 PRINT "OHM(+/-) = ";
1247 COLOR 6:PRINT (A-B)/ISDATA*500:COLOR 7
1250 PRINT #1,TIME$;" ,";S;",";B;",";B/ISDATA*1000;" , ";(A-B)/ISDATA*500
1252 IF (A-B)/ISDATA*500*L>10 THEN L=L/10 ELSE GOTO 1254
1253 GOTO 1252
1254 IF (A-B)/ISDATA*500*L<1 THEN L=L*10 ELSE GOTO 1256
1255 GOTO 1254
1256 PSET (20+ST,380-36*L*(A-B)/ISDATA*500)
1260 S=S+X:ST=ST+X:IF ST>600 THEN ST=ST-600
1270 RETURN
1280 END



マニュアルリストへ戻る