いまどき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 |