第 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