Reading Data in Binary Format

Other topics about Sample Programs

Overview

This sample program demonstrates how to retrieve formatted data arrays in the Binary transfer format.

This program holds the sweep on channel 1, then retrieves and displays the stimulus array.

See Retrieving Measurement Results for this programming.

Sample Program in Excel VBA

Sub read_bin_Click()

    Dim defrm As Long

    Dim vi As Long

    Dim Result As String * 10000

    Dim Res() As Double

    Dim Nop As Long

    Const TimeOutTime = 10000

    ' Open Analyzer

    Call viOpenDefaultRM(defrm)

    Call viOpen(defrm, "GPIB0::17::INSTR", 0, 0, vi)

    Call viSetAttribute(vi, VI_ATTR_TMO_VALUE, TimeOutTime)

    '

    Call viVPrintf(vi, ":CALC1:PAR1:SEL" + vbLf, 0)

    Call viVPrintf(vi, ":INIT1:CONT OFF" + vbLf, 0)

    Call viVPrintf(vi, ":ABOR" + vbLf, 0)

    '

    ' Reading out Measurement Frequency Data in Binary transfer format

    Call viVPrintf(vi, ":FORM:DATA REAL" + vbLf, 0)

    Call viVPrintf(vi, ":CALC1:DATA:FDAT?" + vbLf, 0)

    Call Scpi_read_binary_double_array(vi, Res, Nop)

    '

    ' Write data in cells of Excel

    Range("A6:D1607").Clear

    For i = 0 To Nop - 1

        j = i Mod 2

        k = i \ 2

        Cells(k + 6, j + 3).Value = Res(i)

    Next i

    '

    ' Read out Measurement Frequency Data in Binary transfer format

    Call viVPrintf(vi, ":SENS1:FREQ:DATA?" + vbLf, 0)

    Call Scpi_read_binary_double_array(vi, Res, Nop)

    '

    ' Write data in cells of Excel

    For i = 0 To Nop - 1

        Cells(i + 6, 1) = i + 1

        Cells(i + 6, 2).Value = Res(i)

    Next i

    ' Close

    Call viClose(vi)

    Call viClose(defrm)

End Sub

    '===================================

    ' BinaryAry Read Subroutine

    '===================================

Sub Scpi_read_binary_double_array(vi As Long, data() As Double, Nop As Long)

    Dim dblArray(10000) As Double

    Dim paramsArray(3) As Long

    Dim err As Long

    Dim i As Long

    Dim lf_eoi As String * 1

    

    Nop = UBound(dblArray) - LBound(dblArray) + 1

    paramsArray(0) = VarPtr(Nop)

    paramsArray(1) = VarPtr(dblArray(0))

    err = viVScanf(vi, "%#Zb%1t", paramsArray(0))

    If err <> 0 Then MsgBox "Binary Error"

    

    ReDim data(Nop - 1)

    For i = 0 To Nop - 1

        data(i) = dblArray(i)

    Next

End Sub

Sample Program in HT Basic (read_bin.htb)

10 REAL Fdata(1:1601,1:2),Freq(1:1601)

20 DIM Buff$[9],Img$[30]

30 INTEGER Nop,I

40 !

50 ASSIGN @Agte507x TO 717

60 ASSIGN @Binary TO 717;FORMAT OFF

70 !

80 OUTPUT @Agte507x;":CALC1:PAR1:SEL"

90 OUTPUT @Agte507x;":INIT1:CONT OFF"

100 OUTPUT @Agte507x;":ABOR"

110 OUTPUT @Agte507x;":SENS1:SWE:POIN?"

120 ENTER @Agte507x;Nop

130 REDIM Fdata(1:Nop,1:2),Freq(1:Nop)

140 !

150 ! Reading out in binary transfer format

160 !

170 OUTPUT @Agte507x;":FORM:DATA REAL"

180 !

190 OUTPUT @Agte507x;":CALC1:DATA:FDAT?"

200 ENTER @Agte507x USING "#,8A";Buff$

210 ENTER @Binary;Fdata(*)

220 ENTER @Agte507x USING "#,1A";Buff$

230 OUTPUT @Agte507x;":SENS1:FREQ:DATA?"

240 ENTER @Agte507x USING "#,8A";Buff$

250 ENTER @Binary;Freq(*)

260 ENTER @Agte507x USING "#,1A";Buff$

270 !

280 ! Displaying

290 !

300 OUTPUT @Agte507x;":CALC1:FORM?"

310 ENTER @Agte507x;Fmt$

320 SELECT Fmt$

330 CASE "MLOG","PHAS","GDEL","MLIN","SWR","REAL","IMAG","UPH"

340 Img$="MD.4DE,2X,MD.6DE"

350 PRINT " Frequency Data"

360 FOR I=1 TO Nop

370 PRINT USING Img$;Freq(I),Fdata(I,1)

380 NEXT I

390 CASE ELSE

400 Img$="MD.4DE,2X,MD.6DE,2X,MD.6DE"

410 PRINT " Frequency Data1 Data2"

420 FOR I=1 TO Nop

430 PRINT USING Img$;Freq(I),Fdata(I,1),Fdata(I,2)

440 NEXT I

450 END SELECT

460 !

470 END