读出二进制格式的数据
概述
这个样本程序说明如何获取二进制交换格式的格式化数据序列。
这个程序保持通道1上扫描,然后获取并显示激励序列。
参见这个程序的检索测量结果。
在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
在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