峰值搜索
概述
这个样本程序说明如何使用标记搜索功能和分析命令搜索峰值。
这个程序按两个步骤运行:首先,它使用标记搜索搜索到最大正峰值,然后,它使用分析命令搜索所有正峰值,并显示搜索结果。
参见这个程序的搜索与指定标准相匹配的点。
在Excel VBA中的样本程序
Sub PeakSearch_Click()
Dim defrm As Long
Dim vi As Long
Const TimeOutTime = 20000
'
Dim Buff As String, Img As String, Err_msg As String
Dim Excursion As String, Freq As String * 20, Resp As Variant, PeakPoint As Variant
Dim Poin As String * 5, Result As String * 1000, errmsg As String * 20
Excursion = "0.5"
' 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, "*CLS" & vbLf, 0)
'
' Setup Analyzer
Call viVPrintf(vi, ":SENS1:FREQ:CENT 947.5E6" & vbLf, 0)
Call viVPrintf(vi, ":SENS1:FREQ:SPAN 200E6" & vbLf, 0)
Call viVPrintf(vi, ":CALC1:PAR1:DEF S11" & vbLf, 0)
Call viVPrintf(vi, ":DISP:WIND1:TRAC1:Y:AUTO" & vbLf, 0)
'
Call viVPrintf(vi, ":CALC1:PAR1:SEL" & vbLf, 0)
Call viVPrintf(vi, ":CALC1:MARK1:FUNC:TYPE PEAK" & vbLf, 0)
Call viVPrintf(vi, ":CALC1:MARK1:FUNC:PEXC " & Excursion & vbLf, 0)
Call viVPrintf(vi, ":CALC1:MARK1:FUNC:PPOL POS" & vbLf, 0)
Call viVPrintf(vi, ":CALC1:MARK1:FUNC:EXEC" & vbLf, 0)
Call ErrorCheck(vi)
Call viVPrintf(vi, ":CALC1:MARK1:X?" & vbLf, 0)
Call viVScanf(vi, "%t", Freq)
'
Call viVPrintf(vi, ":CALC1:MARK1:Y?" & vbLf, 0)
Call viVScanf(vi, "%t", Result)
'
Resp = Split(Result, ",")
Cells(5, 5).Value = Val(Freq)
Cells(5, 6).Value = Val(Resp(0))
'
Call viVPrintf(vi, ":CALC1:FUNC:DOM OFF" & vbLf, 0)
Call viVPrintf(vi, ":CALC1:FUNC:TYPE APE" & vbLf, 0)
Call viVPrintf(vi, ":CALC1:FUNC:PEXC " & Excursion & vbLf, 0)
Call viVPrintf(vi, ":CALC1:FUNC:PPOL NEG" & vbLf, 0)
Call viVPrintf(vi, ":CALC1:FUNC:EXEC" & vbLf, 0)
Call ErrorCheck(vi)
'
Call viVPrintf(vi, ":CALC1:FUNC:POIN?" & vbLf, 0)
Call viVScanf(vi, "%t", Poin)
Call viVPrintf(vi, ":CALC1:FUNC:DATA?" & vbLf, 0)
Call viVScanf(vi, "%t", Result)
PeakPoint = Split(Result, ",")
'
j = 1
For i = 1 To Val(Poin) / 2
Cells(6 + i, 5).Value = Val(PeakPoint(j))
Cells(6 + i, 6).Value = Val(PeakPoint(j + 1))
j = j + 2
Next i
'
Call viClose(vi)
Call viClose(defrm)
'
End Sub
Sub ErrorCheck(vi)
Dim err As String * 50, ErrNo As Variant, Response As VbMsgBoxResult
Call viVQueryf(vi, ":SYST:ERR?" & vbLf, "%t", err)
ErrNo = Split(err, ",")
If Val(ErrNo(0)) <> 0 Then
Response = MsgBox(CStr(ErrNo(1)), vbOKOnly)
End If
End Sub
在HT Basic中的样本程序(search.htb)
10 DIM Buff$[9],Img$[50],Err_msg$[100]
20 REAL Excursion,Freq,Resp,Result(1:100,1:2)
30 INTEGER Poin,Err_no
40 !
50 ASSIGN @Agte507x TO 717
60 Excursion=.5
70 !
80 OUTPUT @Agte507x;"*ESE 60"
90 OUTPUT @Agte507x;"*SRE 32"
100 OUTPUT @Agte507x;"*CLS"
110 OUTPUT @Agte507x;"*OPC?"
120 ENTER @Agte507x;Buff$
130 ON INTR 7 GOTO Err
140 ENABLE INTR 7;2
150 !
160 PRINT "Maximum Peak Search using Marker 1"
170 !
180 OUTPUT @Agte507x;":CALC1:PAR1:SEL"
190 OUTPUT @Agte507x;":CALC1:MARK1:FUNC:TYPE PEAK"
200 OUTPUT @Agte507x;":CALC1:MARK1:FUNC:PEXC ";Excursion
210 OUTPUT @Agte507x;":CALC1:MARK1:FUNC:PPOL POS"
220 OUTPUT @Agte507x;":CALC1:MARK1:FUNC:EXEC"
230 OUTPUT @Agte507x;":CALC1:MARK1:X?"
240 ENTER @Agte507x;Freq
250 OUTPUT @Agte507x;":CALC1:MARK1:Y?"
260 ENTER @Agte507x;Resp
270 Img$="8A,MD.4DE,2X,MD.6DE"
280 PRINT " Frequency Response"
290 PRINT USING Img$;"Peak: ",Freq,Resp
300 !
310 PRINT "All Peaks Search using Command"
320 !
330 OUTPUT @Agte507x;":CALC1:FUNC:DOM OFF"
340 OUTPUT @Agte507x;":CALC1:FUNC:TYPE APE"
350 OUTPUT @Agte507x;":CALC1:FUNC:PEXC ";Excursion
360 OUTPUT @Agte507x;":CALC1:FUNC:PPOL POS"
370 OUTPUT @Agte507x;":CALC1:FUNC:EXEC"
380 OUTPUT @Agte507x;":CALC1:FUNC:POIN?"
390 ENTER @Agte507x;Poin
400 REDIM Result(1:Poin,1:2)
410 OUTPUT @Agte507x;":CALC1:FUNC:DATA?"
420 ENTER @Agte507x;Result(*)
430 Img$="4A,2D,2A,MD.4DE,2X,MD.6DE"
440 PRINT " Frequency Response"
450 FOR I=1 TO Poin
460 PRINT USING Img$;"Peak",I,": ",Result(I,2),Result(I,1)
470 NEXT I
480 GOTO No_err
490 Err: OFF INTR 7
500 OUTPUT @Agte507x;";:SYST:ERR?"
510 ENTER @Agte507x;Err_no,Err_msg$
520 PRINT "Error occurred!!"
530 PRINT " No:";Err_no,"Description: "&Err_msg$
540 No_err: OFF INTR 7
550 END