配列の処理は、文字列や倍精度の処理と少し異なります。測定器でデータを処理するには、ReadString WriteString を使用します。配列を処理する場合は、ReadListを使って測定器から配列を読み取り、WriteList を使って配列を測定器へ送信します。バイナリ・データの場合には、ReadIEEEBlock WriteIEEEBlock を使用します。

配列の読み取り方法

測定器が複数の表示値をカンマ区切りリストとして返すときには、変数を配列として宣言するだけです。例えば、測定器のIDNは、4つの文字列から成る配列です。下のコードは、測定器のIDNを読み取り、配列の各パートを4個のメッセージ・ボックスに文字列として表示します。

Dim idn( ) As String
Dim i As Integer 

instrument.WriteString "*IDN?"
idn = instrument.ReadList(VisaComLib.IEEEASCIIType.ASCIIType_BSTR, ",") 

For i = (LBound(idn)) To (UBound(idn))
    MsgBox ("At index " & i & ", the idn is " & idn(i))
Next i 

ReadList メソッドには2個の引数を入力できます。読み取り中の配列のIEEEASCIITypeと、文字列としてのリスト・セパレータです。メソッドは、配列の各パートをその順番に従って、個別のインデックスで文字列として返します。この例では、ReadList が配列を文字列として読み取り、カンマがあると配列の各パートを分離します。

ReadList を使用して数値の配列を読み取ります。IEEEASCIIの型を数値フォーマットに変更します。

Dim preamble() As Double
scope.WriteString "Waveform:Preamble?"
preamble = .ReadList(VisaComLib.IEEEASCIIType.ASCIIType_R8) 

この例では、WriteString コマンドがプリアンブルの問合せをオシロスコープに送信します。プリアンブルは数値配列です。ReadList が配列内の数値をそれぞれ倍精度として読み取り、それをプリアンブルに格納します。


配列の書き込み方法

データの配列を測定器に書き込む方法は、倍精度を測定器に送信する場合の処理と似ています。WriteList の使用前に、WriteString コマンドを使ってメモリにデータ配列用のスペースを割り当てます。以下のコードは、4段の階段状波形を配列としてKeysightファンクション・ジェネレータに送信します。

Dim i As Integer 
Dim dblSend(3) As Double

' create the waveform
For i = 0 To 3
    dblSend(i) = i * 0.25
Next i 

With arbGen
    .WriteString "Data Volatile, ", False
    .WriteList dblSend, VisaComLib.IEEEASCIIType.ASCIIType_BSTR, ","
End With 

データの配列を作成したら、それをファンクション・ジェネレータ内の揮発性メモリに書き込みます。WriteString には、2つの引数を追加できます。測定器に送信する文字列と、コードの次のラインからのデータを最初の引数からの文字列に追加するかどうかを示す論理値です。この例では、WriteString が測定器に次のデータを揮発性メモリに格納するよう指示した後、WriteList ラインでデータを追加します。

WriteList コマンドでは3つの引数を指定できます。書き込むデータ、データを書き込むときのIEEEASCIIの型、リスト・セパレータです。この例では、配列dblSendを、値をカンマで区切った文字列として揮発性メモリに書き込むよう WriteString で指示します。この例では2つのコマンドが協調して、数値の配列を測定器に送信します。

注記:以下のコードを使ってファンクション・ジェネレータをセットアップすると、オシロスコープに階段状波形を表示することができます。詳細については、ファンクション・ジェネレータのユーザ・マニュアルを参照してください。波形がオシロスコープの画面に現われない場合は、オシロスコープのAutoscaleボタンを押してください。

With arbGen
    .WriteString "*RST"                            ' instrument reset
    .IO.Timeout = 5000                             ' ensure completion
    .WriteString "Data:Delete:All"                 ' clears memory
    ' insert code here
    .WriteString "Output:Load 50"                  ' output termination is 50 ohms
    .WriteString "Data:Copy DampSine, Volatile"    ' copy arb to non-volatile memory
    .WriteString "Function:User DampSine"          ' select the active arb waveform
    .WriteString "Function:Shape User"             ' output selected arb waveform
    .WriteString "Frequency 5000; Voltage 1"       ' freq is 5kHz at 1 Vpp
    .WriteString "Output ON"                       ' use with 33220A
End With

バイナリ・ブロックの読み取り方法

測定器が、データを数値のリストやIEEEバイナリ・ブロックとして出力する場合があります。以下の例では、前の例で作成したオシロスコープ上の階段状波形を読み取る方法を示します。

Dim ydata() As Byte
Dim i As Integer
With scope
    .WriteString "Waveform:points 250; Source Channel1" 
    .WriteString "Waveform:Format byte"
    .WriteString "Waveform:data?"
    ydata = .ReadIEEEBlock(VisaComLib.IEEEBinaryType.BinaryType_UI1)
End With 

ReadIEEEBlock メソッドは、データをバイト配列ydata()に入力します。ReadIEEEBlock は、読み取り中のデータに対応するIEEEバイナリ型を渡します。この場合、バイト配列を読み取るため1バイトの符号なし整数を使用しています。


バイナリ・ブロックの書き込み方法

ファンクション・ジェネレータには、IEEEバイナリ・データを送信できます。ここでは、データのバイナリ・ブロックをファンクション・ジェネレータに送信する方法の例を示します。まず、このコードを使用して、ダンプされた正弦波のポイントを配列 intSend に格納します。

Dim intSend() As Integer
Dim numTemp As Single
Dim intTemp As Integer
Dim lastPoint As Long
Dim TwoPiF As Double
Dim i As Long

Const pi = 3.1416
Const dampFactor = -5
Const NumberCycles = 10
lastPoint = UBound(intSend) * 0.875
TwoPiF = 2 * pi * NumberCycles / lastPoint

For i = 1 To lastPoint
    numTemp = Sin(TwoPiF * i) * 2047
    intSend(i) = CInt(numTemp * Exp(dampFactor * i / lastPoint))
Next i 

For i = i To UBound(intSend)
    intSend(i) = CInt(0)
Next i 

WriteIEEEBlockを使用して、バイナリ・ブロックを測定器に送信します。以下のコードは、IEEEブロックをファンクション・ジェネレータの揮発性メモリに書き込みます。

arbGen.WriteIEEEBlock "Data:Dac Volatile,", intSend 

コマンド WriteIEEEBlock の最初の引数は、IEEEブロックを書き込む場所を示します。2番目の引数は、どんなデータを書き込むかを示します。WriteIEEEBlock コマンドは、配列intSendを揮発性メモリに書き込みます。測定器のコマンドの詳細については、測定器のユーザ・マニュアルを参照してください。