第 3 章 サンプルプログラム

3.1 RS-232C N88 Basicサンプルプログラム

8420-50、8421-50、8422-50の通信画面で通信インタフェースの設定を「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,":CONFIGURE:SAMPLE 100.0E-3"        'データ間隔を100ms に設定 (8422-50で17ch以上測定時は200msから)
210 PRINT #1,":CONFIGURE:TDIV 1.0E+0"            'TIME/DIV 1s に設定
220 PRINT #1,":CONFIGURE:RECTIME 0,0,0,10"       '記録長を10秒 に設定
230 '
240 PRINT #1,":UNIT:STORE CH1,ON"                'CH1 データ収集
250 PRINT #1,":UNIT:INMODE CH1,VOLTAGE"          'CH1 電圧測定
260 '
270 PRINT #1,":TRIGGER:SOURCE OR"                'トリガソース OR
280 PRINT #1,":TRIGGER:PRETRIG 0,0,0,5"          'プリトリガ 5秒
290 PRINT #1,":TRIGGER:KIND CH1,LEVEL"           'CH1 LEVEL
300 PRINT #1,":TRIGGER:LEVEL CH1,0.0E+0"         'トリガレベル 0V
310 PRINT #1,":TRIGGER:SLOPE CH1,UP"             'トリガスロープ UP
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,":CONFIGURE:RECTIME?"               '記録長を問い合わせる
250 INPUT #1,SD$,SH$,SM$,SS$                     '問い合せ結果を変数にセット
260 PRINT "RECTIME=";SD$"d"SH$"h"SM$"m"SS$"s"    '問い合わせ結果を表示する
270 PRINT #1,":SYSTEM:TIME?"                     '現在時刻を問い合わせる
280 INPUT #1,TH$,TM$,TS$                         '問い合せ結果を変数にセット
290 PRINT "TIME=";TH$":"TM$":"TS$                '問い合せ結果を表示する
300 '
310 CLOSE #1 'クローズ
320 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 ' ・データ間隔100ms、記録長10秒でストレージされているデータのCH1のデータ100+1個を取り込みます
270 '***************************************************************************
280 '
290 DIM D(100)
300 OPEN "COM1:N81NN" AS #1        'パリティ無し、データ8bit、ストップ1bit、フロー制御無し
310 '
320 PRINT #1,":CONFIGURE:SAMPLE 100.0E-3"        'データ間隔100msに設定 (8422-50で17ch以上測定時は200msから)
330 PRINT #1,":CONFIGURE:RECTIME 0,0,0,10"       '記録長を10秒に設定
340 PRINT #1,":UNIT:STORE CH1,ON"                'CH1を収集に設定
350 PRINT #1,":TRIGGER:MODE SINGLE"              'トリガをSINGLEに設定
360 PRINT #1,":START;:STOP;*OPC?"                'スタート処理
370 INPUT #1,O$                                  '終了待ち
380 '
390 PRINT #1,":HEADER OFF"                       'ヘッダをOFFにする
400 PRINT #1,":MEMORY:MAXPOINT?"                 'ストレージデータ数を読み出す
410 INPUT #1,MX '
420 IF MX <> 100+1 THEN 560                      'データ数が100+1以外なら終了
430 '
440 PRINT #1,":MEMORY:POINT CH1,0"               '出力データをCH1、ポイント0に設定
450 FOR I = 0 TO 90 STEP 10                      '10個ずつデータを取込む
460  PRINT #1,":MEMORY:VDATA? 10"                '(電圧値形式)
470  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)
480 NEXT I
490 PRINT #1,":MEMORY:VDATA? 1"                  '最後のデータを取込む
500 INPUT #1,D(100)                              '
510 '
520 FOR I = 0 TO 100                             'データ表示
530  PRINT D(I)
540 NEXT I
550 '
560 CLOSE #1                                     'クローズ
570 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,":CONFIGURE:SAMPLE 100.0E-3"        'データ間隔を100msに設定 (8422-50で17ch以上測定時は200msから)
230 PRINT #1,":CONFIGURE:RECTIME 0,0,0,10"       '記録長を10秒に設定
240 PRINT #1,":UNIT:STORE CH1,ON"                'CH1を収集に設定
250 PRINT #1,":DISPLAY:DRAWING CH1,C1"           'CH1の波形色をC1に設定
260 PRINT #1,":MEMORY:PREPARE"                   'ストレージメモリの準備
270 PRINT #1,":MEMORY:POINT CH1,0"               '入力データをCH1、ポイント0に設定
280 FOR I = 0 TO 100                             'SIN波のセット
290 PRINT #1,":MEMORY:ADATA "+STR$(INT(10000*SIN(3.14*I/50)))
300 NEXT I
310 '
320 CLOSE #1 'クローズ
330 END

[例5]入力チャネルの有無を調べ、その入力レベルをディスプレイ上にモニタ表示させる。
100 '***************************************************************************
110 ' RS232C SAMPLE PROGRAM NO.5
120 ' 入力レベルをディスプレイ上にモニタ表示させる。
130 '***************************************************************************
140 '
150 MAXCH = 8                                    '8420-50は8、8421-50は16、8422-50は32まで
160 DIM A(MAXCH),B(MAXCH),C(MAXCH),D(MAXCH)
170 OPEN "COM1:N81NN" AS #1        'パリティ無し、データ8bit、ストップ1bit、フロー制御無し
180 ON STOP GOSUB *ENDP
190 STOP ON
200 '
210 '*** 画面設定 ***
220 SCREEN 3,0
230 CONSOLE 0,25,0,1
240 CLS 3
250 LOCATE 5,0 :PRINT "< LEVEL MONITOR >"        '表題を表示
260 LOCATE 7,3 :PRINT "100"                      'ゲージを表示
270 LOCATE 8,11:PRINT "50"
280 LOCATE 9,19:PRINT "0"
290 '
300 '*** 画面設定 ***
310 CLS 2
320 LINE (10*8,57)-(620,307),7,B,&HCCCC          '外枠を表示
330 FOR Y = 82 TO 282 STEP 25                    'Y軸グリッドを表示
340  LINE (10*8,Y)-(620,Y),7,,&H1010
350 NEXT Y
360 '
370 '*** 最初のリアルタイムデータ読み出し ***
380 PRINT #1,":MEMORY:GETREAL"
390 FOR CH=1 TO MAXCH                            'MAXCH分最初のデータ取得
400  LOCATE 0,3+CH :PRINT "CH"+STR$(CH)          'チャネル番号
410  LINE (5*8,(3+CH)*16+8)-(7*8,(3+CH)*16+10),3+(CH MOD 4),B  '色
420  PRINT #1,":MEMORY:AREAL? CH"+STR$(CH)       '最初のリアルタイムデータ取得
430  INPUT #1,A(CH)
440  C(CH) = INT(A(CH) / 256)
450 NEXT CH
460 '
470 '*** リアルタイムデータ表示 ***
480 FOR X = 10*8 TO 618 STEP 2                   '時間軸方向にデータを書く
490  PRINT #1,":MEMORY:GETREAL" 
500  FOR CH=1 TO MAXCH                           'MAXCH分リアルタイムデータ取得
510   PRINT #1,":MEMORY:AREAL? CH"+STR$(CH)
520   INPUT #1,B(CH)
530   D(CH) = INT(B(CH) / 256)
540   LINE (X,182-C(CH))-(X+2,182-D(CH)),3+(CH MOD 4) 'データをグラフに書く
550   C(CH) = D(CH)
560  NEXT CH
570 NEXT X
580 GOTO 300 
590 '
600 *ENDP
610 CLOSE #1                                     'クローズ
620 STOP OFF
630 CLS 3                                        '画面クリア
640 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"                       'ヘッダOFF
260 PRINT #1,":MEMORY:MAXPOINT?"                 'ストレージされているデータ数
270 INPUT #1,MX                                  'ストレージされているデータ数を読み出す
280 IF MX = 0 THEN GOTO *EXIT2                   'ストレージデータが無い時   
290 '
300 PRINT "Max Point = ";MX :PRINT               'ストレージデータ数の表示
310 INPUT "Channel(CH1-CH8) ";CH$                'セーブするチャネルの問い合せ
320                                              '8420-50は8,8421-50は16,8422-50は32チャネルまで
330 PRINT #1,":MEMORY:CHSTORE? "+ CH$            'チャネルが収集されているか 
340 INPUT #1,CHAN$,ONOFF$                        'チャネルが収集されているかを読み出す
350 IF ONOFF$ = "OFF" THEN GOTO *EXIT2           'チャネルが収集されてない時
360                                              'チャネルが収集されているかを読み出す
370 INPUT "File Name ";NA$                       'セーブファイル名の問い合せ
380 PRINT :PRINT
390 '
400 DD$ = DR$ + NA$
410 OPEN DD$ FOR OUTPUT AS #2                    'ファイルを開く
420 '
430 PRINT #1,":MEMORY:POINT " + CH$ + ",0"       'ストレージデータの出力ポイントを設定する
440 '
450 PRINT #2,MX                                  'セーブするデータ数を、ファイルの先頭に記憶させておく。
460 FOR I = 1 TO MX                              'データ数分ループ処理
470  PRINT #1,":MEMORY:ADATA? 1"                 'ストレージデータを読み出す
480  INPUT #1,DT                                 '
490  PRINT #2,DT                                 'ファイルに保存する
500 NEXT I 
510 PRINT "Complete."
520 GOTO *EXIT3
530 '
540 'エラー処理ルーチン
550 *EXIT0
560 PRINT "ERROR !!"
570 GOTO *EXIT3
580 '
590 'ストップ処理ルーチン
600 *EXIT1
610 PRINT "STOP !!"
620 GOTO *EXIT3
630 '
640 'ストレージデータ無し処理ルーチン
650 *EXIT2
660 PRINT "No Storage Data !!"
670 '
680 '終了処理
690 *EXIT3
700 CLOSE #1                                     'クローズ
710 CLOSE #2                                     'ファイルをクローズ
720 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-CH8) ";CH$                'ロードするチャネルの問い合せ
270                                              '8420-50は8,8421-50は16,8422-50は32チャネルまで
280 PRINT :PRINT
290 '
300 DD$ = DR$ + NA$
310 OPEN DD$ FOR INPUT AS #2                     'ファイルを開く
320 '
330 PRINT #1,":UNIT:STORE " + CH$ + ",ON"        'チャネルの収集をONにする
340 PRINT #1,":MEMORY:PREPARE"                   'ストレージメモリの準備
350 PRINT #1,":MEMORY:POINT " + CH$ + ",0"       'ストレージデータの入力ポイントを設定する
360 '
370 INPUT #2,MX                                  'ロードするデータ数を読込む
380 PRINT #1,":HEADER OFF;:MEMORY:MAXPOINT?"     'ストレージデータ数を読み出す
390 INPUT #1,MM
400 IF MX<>MM THEN *EXIT0
410 '
420 FOR I = 1 TO MX                              'データ数分ループ処理
430  INPUT #2,DT                                 'ファイルからデータを取出す
440  PRINT #1,":MEMORY:ADATA "+STR$(DT)          'ストレージメモリにデータを書込む
450 NEXT I 
460 PRINT "Complete."
470 GOTO *EXIT2
480 '
490 'エラー処理ルーチン
500 *EXIT0
510 PRINT "ERROR !!"
520 GOTO *EXIT2
530 '
540 'ストップ処理ルーチン
550 *EXIT1
560 PRINT "STOP !!"
570 GOTO *EXIT2
580 '
590 '終了処理
600 *EXIT2
610 CLOSE #1                                     'クローズ
620 CLOSE #2                                     'ファイルをクローズ
630 END

3.2 RS-232C Visual Basicサンプルプログラム

8420-50、8421-50、8422-50の通信画面で通信インタフェースの設定を「RS-232C」にして下さい。


以下のサンプルプログラムは、Visual Basicに付属のMSComm コントロールを用いて作成しました。

プログラムを実行するには、次のことをする必要があります。
(1)Visual Basic メニューの、プロジェクト−コンポーネントを開き、Comm Control をチェック
してOKボタンを押して下さい。MSComm コントロールが登録されます。(電話のアイコン)
(2)フォームに、テキストボックス、MSComm コントロール、コマンドボタンを貼り付けて下さい。
(3)テキストボックス Text1 のプロパティウインドウの Multiline を True にして下さい。
(4)コマンドボタンをダブルクリックすると、コードの入力状態になりますので、下記のプログラ
ムを入力して下さい。


以下のサンプルプログラムで$の付く変数は、文字列型です。

[例1]セットコマンドの使用法
Private Sub Command1_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.1
' セットコマンドの使用法
'
' コマンドリストの<使用可能条件>を満足している状態において<コマンド>の書式通り
' に送信します。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                            'デリミタ定義

MSComm1.PortOpen = True                                  'ポートオープン

MSComm1.Output = ":CONFIGURE:SAMPLE 100.0E-3" & deli$    'データ間隔を100msに設定 (8422-50で17ch以上測定時は200msから)
MSComm1.Output = ":CONFIGURE:TDIV 1.0E+0" & deli$        'TIME/DIV 1sに設定
MSComm1.Output = ":CONFIGURE:RECTIME 0,0,0,10" & deli$   '記録長を10秒に設定

MSComm1.Output = ":UNIT:STORE CH1,ON" & deli$            'CH1 データ収集
MSComm1.Output = ":UNIT:INMODE CH1,VOLTAGE" & deli$      'CH1 電圧測定

MSComm1.Output = ":TRIGGER:SOURCE OR" & deli$            'トリガソース OR
MSComm1.Output = ":TRIGGER:KIND CH1,LEVEL" & deli$       'レベルトリガ CH1
MSComm1.Output = ":TRIGGER:PRETRIG 0,0,0,5" & deli$      'プリトリガ 5秒
MSComm1.Output = ":TRIGGER:LEVEL CH1,0" & deli$          'トリガレベル 0V
MSComm1.Output = ":TRIGGER:SLOPE CH1,UP" & deli$         'トリガスロープ UP

MSComm1.Output = ":START" & deli$                        '実行処理

MSComm1.PortOpen = False                                 'クローズ
End Sub

[例2]クエリの使用法
Private Sub Command1_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.2
' クエリの使用法
'
' ・コマンドリストの<使用可能条件>を満足している状態において<コマンド>の書式通
' りに送信して、出力準備させます。
' ・<クエリ>によって出力準備されるデータは、コマンドリストの<応答>記載されている
' 形式となります。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                           'デリミタ定義

MSComm1.PortOpen = True                                 'オープン

MSComm1.Output = ":HEADER OFF" & deli$                  'ヘッダ OFF
MSComm1.Output = ":CONFIGURE:RECTIME?" & deli$          '記録長の問い合わせ
Do
sh$ = sh$ & MSComm1.Input                               '問い合わせ結果を変数ANS$にセット
Loop Until InStr(1, sh$, Chr$(10))

MSComm1.Output = ":SYSTEM:TIME?" & deli$                '現在時刻を問い合わせる
Do
tm$ = tm$ & MSComm1.Input                               '問い合わせ結果を変数にセット
Loop Until InStr(1, tm$, Chr$(10))

Text1.Text = "RECTIME = " & sh$
Text1.Text = Text1.Text & "TIME = " & tm$
MSComm1.PortOpen = False 'クローズ
End Sub

[例3]ストレージデータの出力法
Private Sub Command1_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.3
' ストレージデータの出力法
'
' ・:MEMORY:MAXPOINT?クエリによって、ストレージデータが入出力可能であるか調べます。
' ストレージされていない状態では、MAXPOINT?による出力値が0となり、データの出力
' はできません。
' ・出力したいデータのチャネルとポイントを:MEMORY:POINTコマンドによって指定します。
' データを入出力すると自動的にポイントが移動していきます。連続したデータを取込
' む場合には、一度指定するだけで済みます。
' ・ASCII形式で取込む場合は、:MEMORY:ADATA?クエリ、電圧値形式の場合は:VDATA?
' クエリを使用します。まとめて出力できるデータ数は:ADATA?で1〜80個、:VDATA?
' で1〜40個ですがバッファの容量により、個数制限されます。
' ・より多くのデータをまとめて出力させるほど、処理全体の時間は短くなります。
' ・データ間隔100ms、記録長10秒でストレージされているデータのCH1のデータ100+1個を取り込みます。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                           'デリミタ定義
Dim d(100) As Double

MSComm1.PortOpen = True                                 'オープン

MSComm1.Output = ":CONFIGURE:SAMPLE 100.0E-3" & deli$   'データ間隔100msに設定 (8422-50で17ch以上測定時は200msから)
MSComm1.Output = ":CONFIGURE:RECTIME 0,0,0,10" & deli$  '記録長10秒に設定
MSComm1.Output = ":UNIT:STORE CH1,ON" & deli$           'CH1を収集に設定
MSComm1.Output = ":TRIGGER:MODE SINGLE" & deli$         'トリガをSINGLEに設定
MSComm1.Output = ":START;:STOP;*OPC?" & deli$           'スタート処理
'注記
'":START;:STOP;*OPC?"とすることによって、指定記録長分
'の取り込みの終了を待つことができます。
'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 = 0 To 100
    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 = 0 To 100                                      'データ表示
    Text1.SelText = Format(d(i), "Scientific") & deli$
Next

MSComm1.PortOpen = False                                'クローズ
End Sub

[例4]ストレージデータの入力法
Private Sub Command1_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.4
' ストレージデータの入力法
'
' ・:MEMORY:PREPAREによって、ストレージメモリ準備をします。
' ・入力するデータのチャネルとポイントを:MEMORY:POINTコマンドによって指定します。
' 指定後、:MEMORY:ADATAコマンドによって入力します。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                           'デリミタ定義

MSComm1.PortOpen = True                                 'オープン

MSComm1.Output = ":CONFIGURE:SAMPLE 100.0E-3" & deli$   'データ間隔100msに設定 (8422-50で17ch以上測定時は200msから)
MSComm1.Output = ":CONFIGURE:RECTIME 0,0,0,10" & deli$  '記録長10秒に設定
MSComm1.Output = ":UNIT:STORE CH1,ON" & deli$           'CH1を収集に設定
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 = 0 To 100                                      'SIN波のセット
    MSComm1.Output = ":MEMORY:ADATA " & Str$(Int(10000 * Sin(3.14 * i / 50))) & deli$
Next

MSComm1.PortOpen = False                                'クローズ
End Sub

[例5]入力チャネルの有無を調べ、その入力レベルをディスプレイ上にモニタ表示させる。
Private Sub Command1_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.5
' 入力レベルをディスプレイ上にモニタ表示させる。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                           'デリミタ定義

MSComm1.PortOpen = True                                 'オープン

MAXCH = 8                                               '8420-50は8、8421-50は16、8422-50は32チャネル
Dim ch_data$(32 + 1)

MSComm1.Output = ":HEADER OFF" & deli$                  'ヘッダ OFF
MSComm1.Output = ":MEMORY:GETREAL" & deli$              'リアルタイムデータの取り込み
                                                      
                                                      '各チャネルのリアルタイムデータの出力
For ch = 1 To MAXCH
    MSComm1.Output = ":MEMORY:AREAL? CH" + Str$(ch) & deli$
    ar$ = ""
    Do
    ar$ = ar$ & MSComm1.Input
    Loop Until InStr(1, ar$, Chr$(10))
    ch_data$(ch) = "CH" + Str$(ch) + " = " & ar$
Next ch

                                                       'データ表示
For ch = 1 To MAXCH
    Text1.SelText = ch_data$(ch) & deli$
Next ch

MSComm1.PortOpen = False                                 'クローズ
End Sub

[例6]ストレージされているデータをAドライブにSAVEする。
Private Sub Command1_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.6
' ストレージされているデータをAドライブにSAVEする。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                           'デリミタ定義
na$ = "a:\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, Val(mx$)
For i = 1 To Val(mx$)
    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 Command1_Click()
'*******************************************************************************
' RS232C SAMPLE PROGRAM NO.7
' SAMPLE PROGRAM NO.6で保存したファイルからデータを取出し、本体へセットする。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                           'デリミタ定義
na$ = "a:\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 = 1 To mx
    Line Input #1, dt                                 'ファイルからデータを読み込む
    MSComm1.Output = ":MEMORY:ADATA " & Str$(dt) & deli$ 'ストレージメモリにデータを書込む
Next

Close #1
MSComm1.PortOpen = False                                'クローズ
End Sub

3.3 10BASE-T Visual Basicサンプルプログラム

注意:8420-50、8421-50、8422-50を社内ネットワーク等に繋げる場合は、社内のネットワーク管理者に相談の
うえ8420-50、8421-50、8422-50のIPアドレス等を設定して下さい。


ご使用のパソコンが、社内ネットワーク等に繋がっておらず、8420-50、8421-50、8422-50とパソコンを1対1
で繋げる場合は、以下の例のようにIPアドレス等を設定して下さい。


*8420-50、8421-50、8422-50をHUBに繋げる場合は、ストレートケーブルをご使用下さい。
*8420-50、8421-50、8422-50をパソコンと1対1で繋げる場合は、ストレートケーブル+クロス変換コネクタ
(または、クロスケーブル)をご使用下さい。

*8420-50、8421-50、8422-50の通信画面で通信インタフェースの設定を「10BASE-T」にして下さい。
*8420-50、8421-50、8422-50のIPアドレス等の設定は、8420-50、8421-50、8422-50取説の「付録」を参照して下さい
*例えば、ご使用のパソコンの、サブネットマスクが255.255.255.0であった場合、8420-50、8421-50、8422-50の
サブネットマスクも255.255.255.0とし、IPアドレスの左から1,2,3桁までをパソコンの
IPアドレスと同じにし、4桁目のみを違う値にすると通信ができます。


注意:下記のTCP/IPのプロパティの設定は、あくまでも説明用の例としての設定であり、
ご使用のパソコンが社内ネットワーク等に繋がっている場合は、ご使用のパソコンの
IPアドレス等の設定をむやみに変更すると、社内ネットワーク等に障害を及ぼす可能性が
ありますので、変更する場合はネットワーク管理者に相談のうえ設定して下さい。


ご使用のパソコンが、社内ネットワーク等に繋がっておらず、8420-50、8421-50、8422-50とパソコンを1対1
で繋げる場合は、以下の例のようにIPアドレス等を設定して下さい。



以下のサンプルプログラムは、Visual Basicに付属のWinsock コントロールを用いて作成しました。

プログラムを実行するには、次のことをする必要があります。
(1)Visual Basic メニューの、プロジェクト−コンポーネントを開き、Winsock Control をチェック
してOKボタンを押して下さい。Winsock コントロールが登録されます。(ネットワークのアイコン)

(2)フォームに、Winsock コントロールを貼り付けて下さい。
(3)「IPアドレス」入力用のテキストボックスを、txtIPという名前で作成して下さい。
IPアドレスは、8420-50、8421-50、8422-50の通信画面で設定してある値を入力します。
(4)「ポート番号」入力用のテキストボックスを、txtPortという名前で作成して下さい。
ポート番号は、8420-50、8421-50、8422-50の通信画面で設定してある一番右のXにあたる桁を2にして入力します。
(5)「コマンド実行」用のボタンを、Command1という名前で作成して下さい。Command1_Click()関数に対応します。
(6)「接続」用のボタンを、Command2という名前で作成して下さい。Command2_Click()関数に対応します。
(7)「切断」用のボタンを、Command3という名前で作成して下さい。Command3_Click()関数に対応します。
(8)「Text1」結果出力用のテキストボックスを、Text1という名前で作成して下さい。
(9)「Text2」接続状態用のテキストボックスを、Text2という名前で作成して下さい。
(10)下記プログラムを入力して下さい。

(11)プログラムを実行して、「接続」ボタンを押すと、Command2_Click()に記述された処理が行われ、
Text2のボックスに「LAN接続完了」と表示されます。
「LAN接続待ち」と表示されたままでしたら、ケーブルの接続、IPアドレス、ポート番号等を確認して下さい。
(12)「コマンド実行」ボタンを押すと、Command1_Click()に記述された処理が行われます。
(13)最後に、「切断」ボタンを押すと、Command3_Click()に記述された処理が行われ、「LAN切断完了」
と表示されれば終わりです。


以下のサンプルプログラムで$の付く変数は、文字列型です。

[例1]セットコマンドの使用法

Dim MsgFlg As Integer
Dim MsgBuf As String

Private Sub Command1_Click()
'*******************************************************************************
' 10BASE-T(LAN) SAMPLE PROGRAM NO.1
' セットコマンドの使用法
'
' コマンドリストの<使用可能条件>を満足している状態において<コマンド>の書式通り
' に送信します。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                          'デリミタ定義

SendMsg ":CONFIGURE:SAMPLE 100.0E-3" & deli$         'データ間隔を100msに設定 (8422-50で17ch以上測定時は200msから)
SendMsg ":CONFIGURE:TDIV 1.0E+0" & deli$             'TIME/DIV 1sに設定
SendMsg ":CONFIGURE:RECTIME 0,0,0,10" & deli$        '記録長を10秒に設定

SendMsg ":UNIT:STORE CH1,ON" & deli$                 'CH1 データ収集
SendMsg ":UNIT:INMODE CH1,VOLTAGE" & deli$           'CH1 電圧測定

SendMsg ":TRIGGER:SOURCE OR" & deli$                 'トリガソース OR
SendMsg ":TRIGGER:KIND CH1,LEVEL" & deli$            'レベルトリガ CH1
SendMsg ":TRIGGER:PRETRIG 0,0,0,5" & deli$           'プリトリガ 5秒
SendMsg ":TRIGGER:LEVEL CH1,0" & deli$               'トリガレベル 0V
SendMsg ":TRIGGER:SLOPE CH1,UP" & deli$              'トリガスロープ UP

SendMsg ":START" & deli$                             '実行処理

End Sub

Private Sub Command2_Click()

Winsock1.Protocol = sckTCPProtocol                   'プロトコル
Winsock1.RemoteHost = txtIP.Text                     'IPアドレス
Winsock1.RemotePort = Val(txtPort.Text)              'ポート番号

Winsock1.Connect                                     'ソケット接続

Do While (Winsock1.State <> sckConnected)
    If Winsock1.State = sckConnecting Then Text2.Text = "LAN接続待ち"
    DoEvents
Loop
    If Winsock1.State = sckConnected Then Text2.Text = "LAN接続完了"

End Sub

Private Sub Command3_Click()

Winsock1.Close                                       'ソケット切断

Do While (Winsock1.State <> sckClosed)
    If Winsock1.State = sckConnected Then Text2.Text = "LAN切断待ち"
    DoEvents
Loop
    If Winsock1.State = sckClosed Then Text2.Text = "LAN切断完了"

End Sub

Private Sub SendMsg(strMsg As String)

Winsock1.SendData strMsg                             'メッセージ送信

End Sub

Private Sub GetMsg(strMsg As String)

MsgFlg = 0                                           '受信完了フラグ初期化
    
Winsock1.SendData strMsg                             'メッセージ送信
    
Do While (MsgFlg = 0)                                '応答受信まで待つ
    DoEvents
Loop
    
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Winsock1.GetData MsgBuf, vbString                    '応答受信
        
MsgFlg = 1                                           '受信完了フラグセット

End Sub


[例2]クエリの使用法

Dim MsgFlg As Integer
Dim MsgBuf As String

Private Sub Command1_Click()
'*******************************************************************************
' 10BASE-T(LAN) SAMPLE PROGRAM NO.2
' クエリの使用法
'
' ・コマンドリストの<使用可能条件>を満足している状態において<コマンド>の書式通
' りに送信して、出力準備させます。
' ・<クエリ>によって出力準備されるデータは、コマンドリストの<応答>記載されている
' 形式となります。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                          'デリミタ定義

SendMsg ":HEADER OFF" & deli$                        'ヘッダ OFF
GetMsg ":CONFIGURE:RECTIME?" & deli$                 '記録長の問い合わせ
sh$ = MsgBuf

GetMsg ":SYSTEM:TIME?" & deli$                       '現在時刻を問い合わせる
tm$ = MsgBuf

Text1.Text = "RECTIME = " & sh$
Text1.Text = Text1.Text & "TIME = " & tm$

End Sub

Private Sub Command2_Click()

Winsock1.Protocol = sckTCPProtocol                   'プロトコル
Winsock1.RemoteHost = txtIP.Text                     'IPアドレス
Winsock1.RemotePort = Val(txtPort.Text)              'ポート番号

Winsock1.Connect                                     'ソケット接続

Do While (Winsock1.State <> sckConnected)
    If Winsock1.State = sckConnecting Then Text2.Text = "LAN接続待ち"
    DoEvents
Loop
    If Winsock1.State = sckConnected Then Text2.Text = "LAN接続完了"

End Sub

Private Sub Command3_Click()

Winsock1.Close                                       'ソケット切断

Do While (Winsock1.State <> sckClosed)
    If Winsock1.State = sckConnected Then Text2.Text = "LAN切断待ち"
    DoEvents
Loop
    If Winsock1.State = sckClosed Then Text2.Text = "LAN切断完了"

End Sub

Private Sub SendMsg(strMsg As String)

Winsock1.SendData strMsg                             'メッセージ送信

End Sub

Private Sub GetMsg(strMsg As String)

MsgFlg = 0                                           '受信完了フラグ初期化
    
Winsock1.SendData strMsg                             'メッセージ送信
    
Do While (MsgFlg = 0)                                '応答受信まで待つ
    DoEvents
Loop
    
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Winsock1.GetData MsgBuf, vbString                    '応答受信
        
MsgFlg = 1                                           '受信完了フラグセット

End Sub


[例3]ストレージデータの出力法

Dim MsgFlg As Integer
Dim MsgBuf As String

Private Sub Command1_Click()
'*******************************************************************************
' 10BASE-T(LAN) SAMPLE PROGRAM NO.3
' ストレージデータの出力法
'
' ・:MEMORY:MAXPOINT?クエリによって、ストレージデータが入出力可能であるか調べます。
' ストレージされていない状態では、MAXPOINT?による出力値が0となり、データの出力
' はできません。
' ・出力したいデータのチャネルとポイントを:MEMORY:POINTコマンドによって指定します。
' データを入出力すると自動的にポイントが移動していきます。連続したデータを取込
' む場合には、一度指定するだけで済みます。
' ・ASCII形式で取込む場合は、:MEMORY:ADATA?クエリ、電圧値形式の場合は:VDATA?
' クエリを使用します。まとめて出力できるデータ数は:ADATA?で1〜80個、:VDATA?
' で1〜40個ですがバッファの容量により、個数制限されます。
' ・より多くのデータをまとめて出力させるほど、処理全体の時間は短くなります。
' ・データ間隔100ms、記録長10秒でストレージされているデータのCH1のデータ100+1個を取り込みます。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                           'デリミタ定義
Dim d(100) As Double

SendMsg ":CONFIGURE:SAMPLE 100.0E-3" & deli$          'データ間隔100msに設定 (8422-50で17ch以上測定時は200msから)
SendMsg ":CONFIGURE:RECTIME 0,0,0,10" & deli$         '記録長10秒に設定
SendMsg ":UNIT:STORE CH1,ON" & deli$                  'CH1を収集に設定
SendMsg ":TRIGGER:MODE SINGLE" & deli$                'トリガをSINGLEに設定
GetMsg ":START;:STOP;*OPC?" & deli$                   'スタート処理
'注記
'":START;:STOP;*OPC?"とすることによって、指定記録長分
'の取り込みの終了を待つことができます。
'1度のSTOPキーでは、記録長分の取り込みが終わるまで
'取り込みを中断しないためです。
o$ = MsgBuf

SendMsg ":HEADER OFF" & deli$                         'ヘッダをOFF
GetMsg ":MEMORY:MAXPOINT?" & deli$                    'ストレージデータ数を読み出す
mx$ = MsgBuf
If (Val(mx$) = 0) Then
    Exit Sub
End If

SendMsg ":MEMORY:POINT CH1,0" & deli$                 '出力データをCH1、ポイント0に設定
For i = 0 To 100
    vd$ = ""
    GetMsg ":MEMORY:VDATA? 1" & deli$
    vd$ = MsgBuf
    d(i) = Val(vd$)
Next

For i = 0 To 100                                      'データ表示
    Text1.SelText = Format(d(i), "Scientific") & deli$
Next

End Sub

Private Sub Command2_Click()

Winsock1.Protocol = sckTCPProtocol                   'プロトコル
Winsock1.RemoteHost = txtIP.Text                     'IPアドレス
Winsock1.RemotePort = Val(txtPort.Text)              'ポート番号

Winsock1.Connect                                     'ソケット接続

Do While (Winsock1.State <> sckConnected)
    If Winsock1.State = sckConnecting Then Text2.Text = "LAN接続待ち"
    DoEvents
Loop
    If Winsock1.State = sckConnected Then Text2.Text = "LAN接続完了"

End Sub

Private Sub Command3_Click()

Winsock1.Close                                       'ソケット切断

Do While (Winsock1.State <> sckClosed)
    If Winsock1.State = sckConnected Then Text2.Text = "LAN切断待ち"
    DoEvents
Loop
    If Winsock1.State = sckClosed Then Text2.Text = "LAN切断完了"

End Sub

Private Sub SendMsg(strMsg As String)

Winsock1.SendData strMsg                             'メッセージ送信

End Sub

Private Sub GetMsg(strMsg As String)

MsgFlg = 0                                           '受信完了フラグ初期化
    
Winsock1.SendData strMsg                             'メッセージ送信
    
Do While (MsgFlg = 0)                                '応答受信まで待つ
    DoEvents
Loop
    
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Winsock1.GetData MsgBuf, vbString                    '応答受信
        
MsgFlg = 1                                           '受信完了フラグセット

End Sub


[例4]ストレージデータの入力法

Dim MsgFlg As Integer
Dim MsgBuf As String

Private Sub Command1_Click()
'*******************************************************************************
' 10BASE-T(LAN) SAMPLE PROGRAM NO.4
' ストレージデータの入力法
'
' ・:MEMORY:PREPAREによって、ストレージメモリ準備をします。
' ・入力するデータのチャネルとポイントを:MEMORY:POINTコマンドによって指定します。
' 指定後、:MEMORY:ADATAコマンドによって入力します。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                           'デリミタ定義

Text1.Text = "コマンド実行中"

SendMsg ":CONFIGURE:SAMPLE 100.0E-3" & deli$          'データ間隔100msに設定 (8422-50で17ch以上測定時は200msから)
SendMsg ":CONFIGURE:RECTIME 0,0,0,10" & deli$         '記録長10秒に設定
SendMsg ":UNIT:STORE CH1,ON" & deli$                  'CH1を収集に設定
GetMsg ":MEMORY:PREPARE;*OPC?" & deli$                'ストレージメモリの準備
o$ = MsgBuf

SendMsg ":MEMORY:POINT CH1,0" & deli$                 '入力データをCH1、ポイント0に設定
For i = 0 To 100                                      'SIN波のセット
    SendMsg ":MEMORY:ADATA " & Str$(Int(10000 * Sin(3.14 * i / 50))) & deli$
Next

Text1.Text = "コマンド終了"

End Sub

Private Sub Command2_Click()

Winsock1.Protocol = sckTCPProtocol                   'プロトコル
Winsock1.RemoteHost = txtIP.Text                     'IPアドレス
Winsock1.RemotePort = Val(txtPort.Text)              'ポート番号

Winsock1.Connect                                     'ソケット接続

Do While (Winsock1.State <> sckConnected)
    If Winsock1.State = sckConnecting Then Text2.Text = "LAN接続待ち"
    DoEvents
Loop
    If Winsock1.State = sckConnected Then Text2.Text = "LAN接続完了"

End Sub

Private Sub Command3_Click()

Winsock1.Close                                       'ソケット切断

Do While (Winsock1.State <> sckClosed)
    If Winsock1.State = sckConnected Then Text2.Text = "LAN切断待ち"
    DoEvents
Loop
    If Winsock1.State = sckClosed Then Text2.Text = "LAN切断完了"

End Sub

Private Sub SendMsg(strMsg As String)

Winsock1.SendData strMsg                             'メッセージ送信

End Sub

Private Sub GetMsg(strMsg As String)

MsgFlg = 0                                           '受信完了フラグ初期化
    
Winsock1.SendData strMsg                             'メッセージ送信
    
Do While (MsgFlg = 0)                                '応答受信まで待つ
    DoEvents
Loop
    
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Winsock1.GetData MsgBuf, vbString                    '応答受信
        
MsgFlg = 1                                           '受信完了フラグセット

End Sub


[例5]入力チャネルの有無を調べ、その入力レベルをディスプレイ上にモニタ表示させる。

Dim MsgFlg As Integer
Dim MsgBuf As String

Private Sub Command1_Click()
'*******************************************************************************
' 10BASE-T(LAN) SAMPLE PROGRAM NO.5
' 入力レベルをディスプレイ上にモニタ表示させる。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                          'デリミタ定義

MAXCH = 8                                            '8420-50は8、8421-50は16、8422-50は32チャネル
Dim ch_data$(32 + 1)

SendMsg ":HEADER OFF" & deli$                        'ヘッダ OFF
SendMsg ":MEMORY:GETREAL" & deli$                    'リアルタイムデータの取り込み
                                                      
                                                     '各チャネルのリアルタイムデータの出力
For ch = 1 To MAXCH
    GetMsg ":MEMORY:AREAL? CH" + Str$(ch) & deli$
    ar$ = MsgBuf
    ch_data$(ch) = "CH" + Str$(ch) + " = " & ar$
Next ch

                                                     'データ表示
For ch = 1 To MAXCH
    Text1.SelText = ch_data$(ch) & deli$
Next ch

End Sub

Private Sub Command2_Click()

Winsock1.Protocol = sckTCPProtocol                   'プロトコル
Winsock1.RemoteHost = txtIP.Text                     'IPアドレス
Winsock1.RemotePort = Val(txtPort.Text)              'ポート番号

Winsock1.Connect                                     'ソケット接続

Do While (Winsock1.State <> sckConnected)
    If Winsock1.State = sckConnecting Then Text2.Text = "LAN接続待ち"
    DoEvents
Loop
    If Winsock1.State = sckConnected Then Text2.Text = "LAN接続完了"

End Sub

Private Sub Command3_Click()

Winsock1.Close                                       'ソケット切断

Do While (Winsock1.State <> sckClosed)
    If Winsock1.State = sckConnected Then Text2.Text = "LAN切断待ち"
    DoEvents
Loop
    If Winsock1.State = sckClosed Then Text2.Text = "LAN切断完了"

End Sub

Private Sub SendMsg(strMsg As String)

Winsock1.SendData strMsg                             'メッセージ送信

End Sub

Private Sub GetMsg(strMsg As String)

MsgFlg = 0                                           '受信完了フラグ初期化
    
Winsock1.SendData strMsg                             'メッセージ送信
    
Do While (MsgFlg = 0)                                '応答受信まで待つ
    DoEvents
Loop
    
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Winsock1.GetData MsgBuf, vbString                    '応答受信
        
MsgFlg = 1                                           '受信完了フラグセット

End Sub


[例6]ストレージされているデータをAドライブにSAVEする。

Dim MsgFlg As Integer
Dim MsgBuf As String

Private Sub Command1_Click()
'*******************************************************************************
' 10BASE-T(LAN) SAMPLE PROGRAM NO.6
' ストレージされているデータをAドライブにSAVEする。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                           'デリミタ定義

Text1.Text = "コマンド実行中"

na$ = "a:\sample.dat"                                 'Aドライブとファイル名を設定

SendMsg ":HEADER OFF" & deli$                         'ヘッダ 0FF
GetMsg ":MEMORY:MAXPOINT?" & deli$                    'ストレージされているデータ数を読み出す
mx$ = MsgBuf

If (Val(mx$) = 0) Then
Exit Sub
End If

Open na$ For Output As #1
SendMsg ":MEMORY:POINT CH1,0" & deli$                 'ストレージデータの出力ポイントを設定
Print #1, Val(mx$)
For i = 1 To Val(mx$)
    GetMsg ":MEMORY:ADATA? 1" & deli$                 'ストレージデータを読み出す
    ad$ = MsgBuf
Print #1, Val(ad$)                                    'ファイルへ出力
Next

Close #1

Text1.Text = "コマンド終了"

End Sub

Private Sub Command2_Click()

Winsock1.Protocol = sckTCPProtocol                   'プロトコル
Winsock1.RemoteHost = txtIP.Text                     'IPアドレス
Winsock1.RemotePort = Val(txtPort.Text)              'ポート番号

Winsock1.Connect                                     'ソケット接続

Do While (Winsock1.State <> sckConnected)
    If Winsock1.State = sckConnecting Then Text2.Text = "LAN接続待ち"
    DoEvents
Loop
    If Winsock1.State = sckConnected Then Text2.Text = "LAN接続完了"

End Sub

Private Sub Command3_Click()

Winsock1.Close                                       'ソケット切断

Do While (Winsock1.State <> sckClosed)
    If Winsock1.State = sckConnected Then Text2.Text = "LAN切断待ち"
    DoEvents
Loop
    If Winsock1.State = sckClosed Then Text2.Text = "LAN切断完了"

End Sub

Private Sub SendMsg(strMsg As String)

Winsock1.SendData strMsg                             'メッセージ送信

End Sub

Private Sub GetMsg(strMsg As String)

MsgFlg = 0                                           '受信完了フラグ初期化
    
Winsock1.SendData strMsg                             'メッセージ送信
    
Do While (MsgFlg = 0)                                '応答受信まで待つ
    DoEvents
Loop
    
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Winsock1.GetData MsgBuf, vbString                    '応答受信
        
MsgFlg = 1                                           '受信完了フラグセット

End Sub


[例7]SAMPLE PROGRAM NO.6で保存したファイルからデータを取出し、本体へセットする。

Dim MsgFlg As Integer
Dim MsgBuf As String

Private Sub Command1_Click()
'*******************************************************************************
' 10BASE-T(LAN) SAMPLE PROGRAM NO.7
' SAMPLE PROGRAM NO.6で保存したファイルからデータを取出し、本体へセットする。
'*******************************************************************************

deli$ = Chr$(13) & Chr$(10)                           'デリミタ定義

Text1.Text = "コマンド実行中"

na$ = "a:\sample.dat"                                 'Aドライブとファイル名を指定

SendMsg ":HEADER OFF" & deli$                         'ヘッダ OFF
GetMsg ":MEMORY:PREPARE;*OPC?" & deli$                'ストレージデータの準備
o$ = MsgBuf

Open na$ For Input As #1
SendMsg ":MEMORY:POINT CH1,0" & deli$                 'ストレージデータの入力ポイントを設定
Line Input #1, mx
For i = 1 To mx
    Line Input #1, dt                                 'ファイルからデータを読み込む
    SendMsg ":MEMORY:ADATA " & Str$(dt) & deli$       'ストレージメモリにデータを書込む
Next

Close #1

Text1.Text = "コマンド終了"

End Sub

Private Sub Command2_Click()

Winsock1.Protocol = sckTCPProtocol                   'プロトコル
Winsock1.RemoteHost = txtIP.Text                     'IPアドレス
Winsock1.RemotePort = Val(txtPort.Text)              'ポート番号

Winsock1.Connect                                     'ソケット接続

Do While (Winsock1.State <> sckConnected)
    If Winsock1.State = sckConnecting Then Text2.Text = "LAN接続待ち"
    DoEvents
Loop
    If Winsock1.State = sckConnected Then Text2.Text = "LAN接続完了"

End Sub

Private Sub Command3_Click()

Winsock1.Close                                       'ソケット切断

Do While (Winsock1.State <> sckClosed)
    If Winsock1.State = sckConnected Then Text2.Text = "LAN切断待ち"
    DoEvents
Loop
    If Winsock1.State = sckClosed Then Text2.Text = "LAN切断完了"

End Sub

Private Sub SendMsg(strMsg As String)

Winsock1.SendData strMsg                             'メッセージ送信

End Sub

Private Sub GetMsg(strMsg As String)

MsgFlg = 0                                           '受信完了フラグ初期化
    
Winsock1.SendData strMsg                             'メッセージ送信
    
Do While (MsgFlg = 0)                                '応答受信まで待つ
    DoEvents
Loop
    
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Winsock1.GetData MsgBuf, vbString                    '応答受信
        
MsgFlg = 1                                           '受信完了フラグセット

End Sub