第 3 章 サンプルプログラム
3.1 N88 Basicサンプルプログラム
3.1.1 RS-232Cサンプルプログラム
以下のサンプルプログラムは、N88BASIC MS-DOS版を用いて作成しました。
[例1]セットコマンドの使用法
100 '***************************************************************************
110 ' RS232C SAMPLE PROGRAM NO.1
120 ' セットコマンドの使用法
130 '
140 ' コマンドリストの<使用可能条件>を満足している状態において<コマンド>の書式
150 ' 通りに送信します。
160 '***************************************************************************
170 '
180 OPEN "COM1:N81NN" AS #1 'パリティ無し、データ8bit、ストップ1bit、フロー制御無し
190 '
200 PRINT #1,":FUNCTION MEM" 'メモリレコーダ・ファンクションに設定
210 PRINT #1,":CONFIGURE:TDIV 1.E-3" 'TIME/DIV 1ms に設定
220 PRINT #1,":CONFIGURE:SHOT 20" '記録長を20DIV に設定
230 '
240 PRINT #1,":TRIGGER:SOURCE OR" 'トリガソース OR
250 PRINT #1,":TRIGGER:KIND CH1,LEVEL" 'レベルトリガ CH1
260 PRINT #1,":TRIGGER:PRETRIG 5" 'プリトリガ 5%
270 PRINT #1,":TRIGGER:LEVEL CH1,2" 'トリガレベル 2V
280 PRINT #1,":TRIGGER:SLOPE CH1,UP" 'トリガスロープ UP
290 PRINT #1,":TRIGGER:KIND CH2,OFF" 'CH2 OFF
300 PRINT #1,":TRIGGER:KIND CH3,OFF" 'CH3 OFF
310 PRINT #1,":TRIGGER:KIND CH4,OFF" 'CH4 OFF
320 '
330 PRINT #1,":START" '実行処理
340 '
350 CLOSE #1 'クローズ
360 END
[例2]クエリの使用法
100 '***************************************************************************
110 ' RS232C SAMPLE PROGRAM NO.2
120 ' クエリの使用法
130 '
140 ' ・コマンドリストの<使用可能条件>を満足している状態において<クエリ>の書式通り
150 ' に送信して、出力準備させます。
160 ' 次に本体をトーカに指定して、出力データを受信します。
170 ' ・<クエリ>によって出力準備されるデータは、コマンドリストの<コマンド>に記載されて
180 ' いる形式となります。
190 '***************************************************************************
200 '
210 OPEN "COM1:N81NN" AS #1 'パリティ無し、データ8bit、ストップ1bit、フロー制御無し
220 '
230 PRINT #1,":HEADER OFF" 'ヘッダをOFFにする
240 PRINT #1,":FUNCTION?" 'ファンクションを問い合わせる
250 INPUT #1,ANS$ '問い合せ結果を変数ANS$にセット
260 PRINT #1,":SYSTEM:TIME?" '現在時刻を問い合わせる
270 INPUT #1,TH$,TM$,TS$ '問い合せ結果を変数にセット
280 PRINT ANS$,TH$":"TM$":"TS$ '問い合せ結果を表示する
290 '
300 CLOSE #1 'クローズ
310 END
[例3]ストレージデータの出力法
100 '***************************************************************************
110 ' RS232C SAMPLE PROGRAM NO.3
120 ' ストレージデータの出力法
130 '
140 ' ・:MEMORY:MAXPOINT?クエリによって、ストレージデータが入出力可能であるか調べます。
150 ' ストレージされていない状態では、MAXPOINT?による出力値が0となり、データの
160 ' 出力はできません。
170 ' ・出力したいデータのチャネルとポイントを:MEMORY:POINTコマンドによって指定します。
180 ' データを入出力すると自動的にポイントが移動していきます。連続したデータを
190 ' 取込む場合には、一度指定するだけで済みます。
200 ' ・ASCII形式で取込む場合は、:MEMORY:ADATA?クエリ、電圧値形式の場合は、
210 ' :MEMORY:VDATA?クエリを使用します。
220 ' まとめて出力できるデータ数は、:ADATA?で1〜80個、:VDATA?で1〜40個ですが
230 ' バッファの容量により、個数制限されます。
240 ' ・より多くのデータをまとめて出力させるほど、処理全体の時間は短くなります
250 '
260 ' ・記録長20DIVでストレージされているデータのCH1のデータ1600個を取り込みます
270 '***************************************************************************
280 '
290 DIM D(1600)
300 OPEN "COM1:N81NN" AS #1 'パリティ無し、データ8bit、ストップ1bit、フロー制御無し
310 '
320 PRINT #1,":FUNCTION MEM" 'メモリレコーダファンクションに設定
330 PRINT #1,":CONFIGURE:SHOT 20" '記録長を20DIVに設定
340 PRINT #1,":TRIGGER:MODE SINGLE" 'トリガをSINGLEに設定
350 PRINT #1,":START;:STOP;*OPC?" 'スタート処理
360 INPUT #1,O$ '終了待ち
370 '
380 PRINT #1,":HEADER OFF" 'ヘッダをOFFにする
390 PRINT #1,":MEMORY:MAXPOINT?" 'ストレージデータ数を読み出す
400 INPUT #1,MX '
410 IF MX <> 1600 THEN 550 'データ数が1600以外なら終了
420 '
430 PRINT #1,":MEMORY:POINT CH1,0" '出力データをCH1、ポイント0に設定
440 FOR I = 0 TO 1590 STEP 10 '10個ずつデータを取込む
450 PRINT #1,":MEMORY:VDATA? 10" '(電圧値形式)
460 INPUT #1,D(I),D(I+1),D(I+2),D(I+3),D(I+4),D(I+5),D(I+6),D(I+7),D(I+8),D(I+9)
470 NEXT I
480 PRINT #1,":MEMORY:VDATA? 1" '最後のデータを取込む
490 INPUT #1,D(1600) '
500 '
510 FOR I = 0 TO 1600 'データ表示
520 PRINT D(I)
530 NEXT I
540 '
550 CLOSE #1 'クローズ
560 END
[例4]ストレージデータの入力法
100 '***************************************************************************
110 ' RS232C SAMPLE PROGRAM NO.4
120 ' ストレージデータの入力法
130 '
140 ' ・:MEMORY:PREPAREによって、ストレージメモリの準備をします。
150 ' ・入力するデータのチャネルとポイントを:MEMORY:POINTコマンドによって指定します。
160 ' 指定後、:MEMORY:ADATAコマンドによって入力します。
170 '
180 '***************************************************************************
190 '
200 OPEN "COM1:N81NN" AS #1 'パリティ無し、データ8bit、ストップ1bit、フロー制御無し
210 '
220 PRINT #1,":FUNCTION MEM" 'メモリレコーダファンクションに設定
230 PRINT #1,":CONFIGURE:SHOT 20" '記録長を20DIVに設定
231 PRINT #1,":DISPLAY:DRAWING CH1,C1"
232 PRINT #1,":DISPLAY:DRAWING CH2,OFF"
233 PRINT #1,":DISPLAY:DRAWING CH3,OFF"
234 PRINT #1,":DISPLAY:DRAWING CH4,OFF"
240 PRINT #1,":MEMORY:PREPARE" 'ストレージメモリの準備
250 PRINT #1,":MEMORY:POINT CH1,0" '入力データをCH1、ポイント0に設定
260 FOR I = 0 TO 1600 'SIN波のセット
270 PRINT #1,":MEMORY:ADATA "+STR$(INT(500*SIN(3.14*I/500)))
280 NEXT I
290 '
300 CLOSE #1 'クローズ
310 END
[例5]入力チャネルの有無を調べ、その入力レベルをディスプレイ上にモニタ表示させる。
1100 '***************************************************************************
1110 ' RS232C SAMPLE PROGRAM NO.5
1120 ' 入力チャネルの有無を調べ、その入力レベルをディスプレイ上にモニタ表示させる。
1130 '***************************************************************************
1140 '
1150 OPEN "COM1:N81NN" AS #1 'パリティ無し、データ8bit、ストップ1bit、フロー制御無し
1160 '
1170 ON STOP GOSUB *ENDP
1180 STOP ON
1190 '
1200 '*** 画面設定 ***
1210 SCREEN 3,0
1220 CONSOLE 0,25,0,1
1230 CLS 3
1240 LOCATE 5,0 :PRINT "< LEVEL MONITOR >"
1250 LOCATE 50,0:PRINT "CH1 : CH2 : ";
1260 LOCATE 50,1:PRINT "CH3 : CH4 : ";
1270 LOCATE 0,3 :PRINT "100"
1280 LOCATE 1,11:PRINT "50"
1290 LOCATE 2,19:PRINT "0"
1300 '
1310 '*** ユニット確認 ***
1320 PRINT #1,":HEADER OFF"
1330 PRINT #1,"*OPT?"
1340 INPUT #1,CH1,CH2,CH3,CH4
1350 IF CH1 = 0 THEN LOCATE 55,0:PRINT "NOTHING"
1360 IF CH2 = 0 THEN LOCATE 70,0:PRINT "NOTHING"
1370 IF CH3 = 0 THEN LOCATE 55,1:PRINT "NOTHING"
1380 IF CH4 = 0 THEN LOCATE 70,1:PRINT "NOTHING"
1390 '
1400 '*** 画面設定 ***
1410 CLS 2
1420 LINE (30,57)-(620,307),7,B,&HCCCC
1430 FOR Y = 82 TO 282 STEP 25
1440 LINE (30,Y)-(620,Y),7,,&H1010
1450 NEXT Y
1460 '
1470 '*** リアルタイムデータ読み出し ***
1475 PRINT #1,":MEMORY:GETREAL"
1480 IF CH1 = 0 THEN 1540
1490 LINE (440,8)-(490,10),6,B
1500 PRINT #1,":MEMORY:AREAL? CH1"
1510 INPUT #1,Y10
1520 YY10 = INT(Y10 / 16)
1530 '
1540 IF CH2 = 0 THEN 1600
1550 LINE (560,8)-(610,10),5,B
1560 PRINT #1,":MEMORY:AREAL? CH2"
1570 INPUT #1,Y20
1580 YY20 = INT(Y20 / 16)
1590 '
1600 IF CH3 = 0 THEN 1660
1610 LINE (440,24)-(490,26),4,B
1620 PRINT #1,":MEMORY:AREAL? CH3"
1630 INPUT #1,Y30
1640 YY30 = INT(Y30 / 16)
1650 '
1660 IF CH4 = 0 THEN 1730
1670 LINE (560,24)-(610,26),3,B
1680 PRINT #1,":MEMORY:AREAL? CH4"
1690 INPUT #1,Y40
1700 YY40 = INT(Y40 / 16)
1710 '
1720 '*** リアルタイムデータ表示 ***
1730 FOR X = 30 TO 618 STEP 2
1740 PRINT #1,":MEMORY:GETREAL"
1750 *CH1
1760 IF CH1 = 0 THEN *CH2
1770 PRINT #1,":MEMORY:AREAL? CH1"
1780 INPUT #1,Y11
1790 YY11 = INT(Y11 / 16)
1800 LINE (X,182-YY10)-(X+2,182-YY11),6
1810 YY10 = YY11
1820 *CH2
1830 IF CH2 = 0 THEN *CH3
1840 PRINT #1,":MEMORY:AREAL? CH2"
1850 INPUT #1,Y21
1860 YY21 = INT(Y21 / 16)
1870 LINE (X,182-YY20)-(X+2,182-YY21),5
1880 YY20 = YY21
1890 *CH3
1900 IF CH3 = 0 THEN *CH4
1910 PRINT #1,":MEMORY:AREAL? CH3"
1920 INPUT #1,Y31
1930 YY31 = INT(Y31 / 16)
1940 LINE (X,182-YY30)-(X+2,182-YY31),4
1950 YY30 = YY31
1960 *CH4
1970 IF CH4 = 0 THEN 2030
1980 PRINT #1,":MEMORY:AREAL? CH4"
1990 INPUT #1,Y41
2000 YY41 = INT(Y41 / 16)
2010 LINE (X,182-YY40)-(X+2,182-YY41),3
2020 YY40 = YY41
2030 NEXT X
2040 GOTO 1400
2050 '
2060 *ENDP
2070 CLOSE #1 'クローズ
2080 STOP OFF
2090 CLS 3
2100 END
[例6]ストレージされているデータをDiskAへSAVEする。(シーケンシャル・ファイル)
100 '***************************************************************************
110 ' RS232C SAMPLE PROGRAM NO.6
120 ' ストレージされているデータをDiskAへSAVEする。(シーケンシャル・ファイル)
130 '***************************************************************************
140 '
150 OPEN "COM1:N81NN" AS #1 'パリティ無し、データ8bit、ストップ1bit、フロー制御無し
160 DR$ = "A:" 'FDD A
170 ON ERROR GOTO *EXIT0 'エラー発生時のジャンプ先を設定
180 ON STOP GOSUB *EXIT1 :STOP ON 'STOPキーが押された時のジャンプ先を設定
190 '
200 CLS 3
210 LOCATE 3, 3
220 PRINT "< Storage Data SAVE >"
230 PRINT :PRINT
240 '
250 PRINT #1,":HEADER OFF;:MEMORY:MAXPOINT?" 'ヘッダOFF
260 INPUT #1,MX 'ストレージされているデータ数を読み出す
270 IF MX = 0 THEN GOTO *EXIT2 'ストレージデータが無い時
280 '
290 PRINT "Max Point = ";MX :PRINT 'ストレージデータ数の表示
300 INPUT "Channel(CH1-CH4) ";CH$ 'セーブするチャネルの問い合せ
310 INPUT "File Name ";NA$ 'セーブファイル名の問い合せ
320 PRINT :PRINT
330 '
340 DD$ = DR$ + NA$
350 OPEN DD$ FOR OUTPUT AS #2 'ファイルを開く
360 '
370 PRINT #1,":MEMORY:POINT " + CH$ + ",0" 'ストレージデータの出力ポイントを設定する
380 '
390 PRINT #2,MX 'セーブするデータ数を、ファイルの先頭に記憶させておく。
400 FOR I = 0 TO MX 'データ数分ループ処理
410 PRINT #1,":MEMORY:ADATA? 1" 'ストレージデータを読み出す
420 INPUT #1,DT '
430 PRINT #2,DT 'ファイルに保存する
440 NEXT I
450 PRINT "Complete."
460 GOTO *EXIT3
470 '
480 'エラー処理ルーチン
490 *EXIT0
500 PRINT "ERROR !!"
510 GOTO *EXIT3
520 '
530 'ストップ処理ルーチン
540 *EXIT1
550 PRINT "STOP !!"
560 GOTO *EXIT3
570 '
580 'ストレージデータ無し処理ルーチン
590 *EXIT2
600 PRINT "No Storage Data !!"
610 '
620 '終了処理
630 *EXIT3
640 CLOSE #1 'クローズ
650 CLOSE #2 'ファイルをクローズ
660 END
[例7]サンプルプログラムNO.6で保存したファイルからデータを取り出し、本体へセットする。
100 '***************************************************************************
110 ' RS232C SAMPLE PROGRAM NO.7
120 ' SAMPLE PROGRAM NO.6で保存したファイルからデータを取出し、本体へセットする
130 '***************************************************************************
140 '
150 OPEN "COM1:N81NN" AS #1 'パリティ無し、データ8bit、ストップ1bit、フロー制御無し
160 DR$ = "A:" 'FDD A
170 ON ERROR GOTO *EXIT0 'エラー発生時のジャンプ先を設定
180 ON STOP GOSUB *EXIT1 :STOP ON 'STOPキーが押された時のジャンプ先を設定
190 '
200 CLS 3
210 LOCATE 3, 3
220 PRINT "< Storage Data LOAD >"
230 PRINT :PRINT
240 '
250 INPUT "File Name ";NA$ 'ロードファイル名の問い合せ
260 INPUT "Channel(CH1-CH4) ";CH$ 'ロードするチャネルの問い合せ
270 PRINT :PRINT
280 '
290 DD$ = DR$ + NA$
300 OPEN DD$ FOR INPUT AS #2 'ファイルを開く
310 '
315 PRINT #1,":MEMORY:PREPARE"
320 PRINT #1,":MEMORY:POINT " + CH$ + ",0" 'ストレージデータの入力ポイントを設定する
330 '
340 INPUT #2,MX 'ロードするデータ数を読込む
350 PRINT #1,":HEADER OFF;:MEMORY:MAXPOINT?" 'ストレージデータ数を読み出す
360 INPUT #1,MM
370 IF MX <> MM THEN *EXIT0
380 '
390 FOR I = 0 TO MX 'データ数分ループ処理
400 INPUT #2,DT 'ファイルからデータを取出す
410 PRINT #1,":MEMORY:ADATA "+STR$(DT) 'ストレージメモリにデータを書込む
420 NEXT I
430 PRINT "Complete."
440 GOTO *EXIT2
450 '
460 'エラー処理ルーチン
470 *EXIT0
480 PRINT "ERROR !!"
490 GOTO *EXIT2
500 '
510 'ストップ処理ルーチン
520 *EXIT1
530 PRINT "STOP !!"
540 GOTO *EXIT2
550 '
560 '終了処理
570 *EXIT2
580 CLOSE #1 'クローズ
590 CLOSE #2 'ファイルをクローズ
600 END
3.2 Visual Basicサンプルプログラム
3.2.1 RS-232Cサンプルプログラム
以下のサンプルプログラムは、Visual Basic Professional Edition 以上に付属のMSComm コントロ
ールを用いて作成しました。
プログラムを実行するには、次のことをする必要があります。
(1)Visual Basic メニューの、プロジェクト−コンポーネントを開き、Comm Control をチェック
してOKボタンを押して下さい。MSComm コントロールが登録されます。(電話のアイコン)
(2)フォームに、テキストボックス、MSComm コントロール、コマンドボタンを貼り付けて下さい。
(3)テキストボックス Text1 のプロパティウインドウの Multiline を True にして下さい。
(4)コマンドボタンをダブルクリックすると、コードの入力状態になりますので、下記のプログラ
ムを入力して下さい。
以下のサンプルプログラムで$の付く変数は、文字列型です。
[例1]セットコマンドの使用法
Private Sub Sample1_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.1
' セットコマンドの使用法
'
' コマンドリストの<使用可能条件>を満足している状態において<コマンド>の書式通り
' に送信します。
'*******************************************************************************
deli$ = Chr$(13) & Chr$(10) 'デリミタ定義
MSComm1.PortOpen = True 'ポートオープン
MSComm1.Output = ":FUNCTION MEM" & deli$ 'メモリレコーダファンクションに設定
MSComm1.Output = ":CONFIGURE:TDIV 1.E-3" & deli$ 'TIME/DIV 1msに設定
MSComm1.Output = ":CONFIGURE:SHOT 20" & deli$ '記録長を20DIVに設定
MSComm1.Output = ":TRIGGER:SOURCE OR" & deli$ 'トリガソース OR
MSComm1.Output = ":TRIGGER:KIND CH1,LEVEL" & deli$ 'レベルトリガ CH1
MSComm1.Output = ":TRIGGER:PRETRIG 5" & deli$ 'プリトリガ 5%
MSComm1.Output = ":TRIGGER:LEVEL CH1,0" & deli$ 'トリガレベル 0V
MSComm1.Output = ":TRIGGER:SLOPE CH1,UP" & deli$ 'トリガスロープ UP
MSComm1.Output = ":TRIGGER:KIND CH2,OFF" & deli$ 'CH2 OFF
MSComm1.Output = ":TRIGGER:KIND CH3,OFF" & deli$ 'CH3 OFF
MSComm1.Output = ":TRIGGER:KIND CH4,OFF" & deli$ 'CH4 OFF
MSComm1.Output = ":START" & deli$ '実行処理
MSComm1.PortOpen = False 'クローズ
End Sub
[例2]クエリの使用法
Private Sub Sample2_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.2
' クエリの使用法
'
' ・コマンドリストの<使用可能条件>を満足している状態において<コマンド>の書式通
' りに送信して、出力準備させます。
' ・<クエリ>によって出力準備されるデータは、コマンドリストの<応答>記載されている
' 形式となります。
'*******************************************************************************
deli$ = Chr$(13) & Chr$(10) 'デリミタ定義
MSComm1.PortOpen = True 'オープン
MSComm1.Output = ":HEADER OFF" & deli$ 'ヘッダ OFF
MSComm1.Output = ":FUNCTION?" & deli$ 'ファンクションの問い合わせ
Do
ans$ = ans$ & MSComm1.Input '問い合わせ結果を変数ANS$にセット
Loop Until InStr(1, ans$, Chr$(10))
MSComm1.Output = ":SYSTEM:TIME?" & deli$ '現在時刻を問い合わせる
Do
tm$ = tm$ & MSComm1.Input '問い合わせ結果を変数にセット
Loop Until InStr(1, tm$, Chr$(10))
Text1.Text = "FUNCTION = " & ans$
Text1.Text = Text1.Text & "TIME = " & tm$
MSComm1.PortOpen = False 'クローズ
End Sub
[例3]ストレージデータの出力法
Private Sub Sample3_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.3
' ストレージデータの出力法
'
' ・:MEMORY:MAXPOINT?クエリによって、ストレージデータが入出力可能であるか調べます。
' ストレージされていない状態では、MAXPOINT?による出力値が0となり、データの出力
' はできません。
' ・出力したいデータのチャネルとポイントを:MEMORY:POINTコマンドによって指定します。
' データを入出力すると自動的にポイントが移動していきます。連続したデータを取込
' む場合には、一度指定するだけで済みます。
' ・ASCII形式で取込む場合は、:MEMORY:ADATA?クエリ、電圧値形式の場合は:VDATA?
' クエリを使用します。まとめて出力できるデータ数は:ADATA?で1〜80個、:VDATA?
' で1〜40個ですがバッファの容量により、個数制限されます。
' ・より多くのデータをまとめて出力させるほど、処理全体の時間は短くなります。
' ・記録長20DIVでストレージされているデータのCH1のデータ1600個を取り込みます。
' 注記 9600bpsで1分程度時間がかかります。
'*******************************************************************************
deli$ = Chr$(13) & Chr$(10) 'デリミタ定義
Dim d(1600) As Double
MSComm1.PortOpen = True 'オープン
MSComm1.Output = ":FUNCTION MEM" & deli$ 'メモリレコーダファンクションに設定
MSComm1.Output = ":CONFIGURE:SHOT 20" & deli$ '記録長20DIVに設定
MSComm1.Output = ":TRIGGER:MODE SINGLE" & deli$ 'トリガをSINGLEに設定
MSComm1.Output = ":START;:STOP;*OPC?" & deli$ 'スタート処理
'注記
'MEMファンクションでは":START;:STOP;*OPC?"とすることによって、指定記録長分
'分の取り込みの終了を待つことができます。REC,RMSファンクションではできません。
'これはMEMファンクションは1度のSTOPキーでは、記録長分の取り込みが終わるまで
'取り込みを中断しないためです。
Do
o$ = o$ & MSComm1.Input
Loop Until InStr(1, o$, Chr$(10))
MSComm1.Output = ":HEADER OFF" & deli$ 'ヘッダをOFF
MSComm1.Output = ":MEMORY:MAXPOINT?" & deli$ 'ストレージデータ数を読み出す
Do
mx$ = mx$ & MSComm1.Input
Loop Until InStr(1, mx$, Chr$(10))
If (Val(mx$) = 0) Then
MSComm1.PortOpen = False
Exit Sub
End If
MSComm1.Output = ":MEMORY:POINT CH1,0" & deli$ '出力データをCH1、ポイント0に設定
For i = 1 To 1600
vd$ = ""
MSComm1.Output = ":MEMORY:VDATA? 1" & deli$
Do
vd$ = vd$ & MSComm1.Input
Loop Until InStr(1, vd$, Chr$(10))
d(i) = Val(vd$)
Next
For i = 1 To 1600 'データ表示
Text1.SelText = Format(d(i), "Scientific") & deli$
Next
MSComm1.PortOpen = False 'クローズ
End Sub
[例4]ストレージデータの入力法
Private Sub Sample4_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.4
' ストレージデータの入力法
'
' ・:MEMORY:PREPAREによって、ストレージメモリ準備をします。
' ・入力するデータのチャネルとポイントを:MEMORY:POINTコマンドによって指定します。
' 指定後、:MEMORY:ADATAコマンドによって入力します。
' 注記 9600bpsで35秒程度時間がかかります。
'*******************************************************************************
deli$ = Chr$(13) & Chr$(10) 'デリミタ定義
MSComm1.PortOpen = True 'オープン
MSComm1.Output = ":FUNCTION MEM" & deli$ ' メモリレコーダファンクションに設定
MSComm1.Output = ":CONFIGURE:SHOT 20" & deli$ '記録長20DIVに設定
MSComm1.Output = ":MEMORY:PREPARE;*OPC?" & deli$ 'ストレージメモリの準備
Do
o$ = MSComm1.Input
Loop Until InStr(1, o$, Chr$(10))
MSComm1.Output = ":MEMORY:POINT CH1,0" & deli$ '入力データをCH1、ポイント0に設定
For i = 1 To 1600 'SIN波のセット
MSComm1.Output = ":MEMORY:ADATA " & Str$(Int(500 * Sin(3.14 * i / 500))) & deli$
Next
MSComm1.PortOpen = False 'クローズ
End Sub
[例5]入力チャネルの有無を調べ、その入力レベルをディスプレイ上にモニタ表示させる。
Private Sub Sample5_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.5
' 入力チャネルの有無を調べ、その入力レベルをディスプレイ上にモニタ表示させる。
'*******************************************************************************
deli$ = Chr$(13) & Chr$(10) 'デリミタ定義
MSComm1.PortOpen = True 'オープン
MSComm1.Output = ":HEADER OFF" & deli$ 'ヘッダ OFF
MSComm1.Output = "*OPT?" & deli$ '入力チャネルの問い合わせ
Do
op$ = op$ & MSComm1.Input
Loop Until InStr(1, op$, Chr$(10))
ch1% = Val(Mid$(op$, 1, 1))
ch2% = Val(Mid$(op$, 3, 1))
ch3% = Val(Mid$(op$, 5, 1))
ch4% = Val(Mid$(op$, 7, 1))
MSComm1.Output = ":MEMORY:GETREAL" & deli$ 'リアルタイムデータの取り込み
If (ch1% <> 0) Then '各チャネルのリアルタイムデータの出力
MSComm1.Output = ":MEMORY:AREAL? CH1" & deli$
ar$ = ""
Do
ar$ = ar$ & MSComm1.Input
Loop Until InStr(1, ar$, Chr$(10))
ch1_data$ = "CH1 = " & ar$
Else
ch1_data$ = "CH1 = NON"
End If
If (ch2% <> 0) Then
MSComm1.Output = ":MEMORY:AREAL? CH2" & deli$
ar$ = ""
Do
ar$ = ar$ & MSComm1.Input
Loop Until InStr(1, ar$, Chr$(10))
ch2_data$ = "CH2 = " & ar$
Else
ch2_data$ = "CH2 = NON"
End If
If (ch3% <> 0) Then
MSComm1.Output = ":MEMORY:AREAL? CH3" & deli$
ar$ = ""
Do
ar$ = ar$ & MSComm1.Input
Loop Until InStr(1, ar$, Chr$(10))
ch3_data$ = "CH3 = " & ar$
Else
ch3_data$ = "CH3 = NON"
End If
If (ch4% <> 0) Then
MSComm1.Output = ":MEMORY:AREAL? CH4" & deli$
ar$ = ""
Do
ar$ = ar$ & MSComm1.Input
Loop Until InStr(1, ar$, Chr$(10))
ch4_data$ = "CH4 = " & ar$
Else
ch4_data$ = "CH4 = NON"
End If
Text1.Text = ch1_data$ & deli$ & ch2_data$ & deli$ & ch3_data$ & deli$ & ch4_data$ & deli$
'データ表示
MSComm1.PortOpen = False 'クローズ
End Sub
[例6]ストレージされているデータをAドライブにSAVEする。
Private Sub Sample6_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.6
' ストレージされているデータをAドライブにSAVEする。
'*******************************************************************************
deli$ = Chr$(13) & Chr$(10) 'デリミタ定義
na$ = "c:\sample.dat" 'Aドライブとファイル名を設定
MSComm1.PortOpen = True 'オープン
MSComm1.Output = ":HEADER OFF" & deli$ 'ヘッダ 0FF
MSComm1.Output = ":MEMORY:MAXPOINT?" & deli$ 'ストレージされているデータ数を読み出す
Do
mx$ = mx$ & MSComm1.Input
Loop Until InStr(1, mx$, Chr$(10))
If (Val(mx$) = 0) Then
MSComm1.PortOpen = False
Exit Sub
End If
Open na$ For Output As #1
MSComm1.Output = ":MEMORY:POINT CH1,0" & deli$ 'ストレージデータの出力ポイントを設定
Print #1, 10
For i = 0 To 10
MSComm1.Output = ":MEMORY:ADATA? 1" & deli$ 'ストレージデータを読み出す
ad$ = ""
Do
ad$ = ad$ & MSComm1.Input
Loop Until InStr(1, ad$, Chr$(10))
Print #1, Val(ad$) 'ファイルへ出力
Next
Close #1
MSComm1.PortOpen = False 'クローズ
End Sub
[例7]SAMPLE PROGRAM NO.6で保存したファイルからデータを取出し、本体へセットする。
Private Sub Sample7_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.7
' SAMPLE PROGRAM NO.6で保存したファイルからデータを取出し、本体へセットする。
'*******************************************************************************
deli$ = Chr$(13) & Chr$(10) 'デリミタ定義
na$ = "c:\sample.dat" 'Aドライブとファイル名を指定
MSComm1.PortOpen = True 'オープン
MSComm1.Output = ":HEADER OFF" & deli$ 'ヘッダ OFF
MSComm1.Output = ":MEMORY:PREPARE;*OPC?" & deli$ 'ストレージデータの準備
Do
o$ = MSComm1.Input
Loop Until InStr(1, o$, Chr$(10))
Open na$ For Input As #1
MSComm1.Output = ":MEMORY:POINT CH1,0" & deli$ 'ストレージデータの入力ポイントを設定
Line Input #1, mx
For i = 0 To mx
Line Input #1, dt 'ファイルからデータを読み込む
MSComm1.Output = ":MEMORY:ADATA " & Str$(dt) & deli$ 'ストレージメモリにデータを書込む
Next
Close #1
MSComm1.PortOpen = False 'クローズ
End Sub