Other topics about Processing Measurement Results
The program listed in the below section is written in VISA-COM with Excel VBA. It can be executed from the external PC controller. The program demonstrates how to search peak.
Dim ioMgr As VisaComLib.ResourceManager
Dim Analyzer As VisaComLib.FormattedIO488
Sub PeakSearch_Click()
Range("B6:I30").Clear
Dim Excursion As Double
Dim Freq As Double, Resp As Variant, PeakPoint As Variant
Dim Poin As Long, Stat As Long, Dummy As Long
Excursion = 1
Set ioMgr = New VisaComLib.ResourceManager
Set Analyzer = New VisaComLib.FormattedIO488
'
'*** Open the instrument.
Set Analyzer.IO = ioMgr.Open("GPIB0::18::INSTR")
Analyzer.IO.timeout = 10000
'
' Setup Analyzer
'
Analyzer.WriteString ":SYST:PRES", True
Analyzer.WriteString ":TRIG:SOUR BUS", True ' Set trigger source at BUS.
'
' Setup Channel 1
'
Analyzer.WriteString ":CALC1:PAR1:DEF Z", True ' Set measurement parameter for trace 1
Analyzer.WriteString ":CALC1:PAR2:DEF TZ", True ' Set measurement parameter for trace 2
Analyzer.WriteString ":DISP:WIND1:TRAC1:Y:SPAC LOG", True ' Set Y-Axis at Log format
' Stimulus Setup
Analyzer.WriteString ":INIT1:CONT ON", True ' Turn on Continuous Activation mode for channel 1
Analyzer.WriteString ":SENS1:SWE:TYPE LOG", True ' Set sweep type at LOG
Analyzer.WriteString ":SENS1:SWE:POIN 201", True ' Set number of point
Analyzer.WriteString ":SENS1:FREQ:STAR 100E3", True ' Set start freqency
Analyzer.WriteString ":SENS1:FREQ:STOP 10E6", True ' Set stop freqency
' Make a Measurement
Analyzer.WriteString ":INIT:CONT ON", True
Analyzer.WriteString ":TRIG:SING", True
Analyzer.WriteString "*OPC?", True ' Wait measurement end
Dummy = Analyzer.ReadNumber
Analyzer.WriteString ":DISP:WIND1:TRAC1:Y:AUTO", True ' Auto scale
'
' Example of Marker Peak Search
'
Analyzer.WriteString ":CALC1:MARK:FUNC:DOM ON", True
Analyzer.WriteString ":CALC1:MARK:FUNC:DOM:STAR 1E6", True
Analyzer.WriteString ":CALC1:MARK:FUNC:DOM:STOP 5E6", True
Analyzer.WriteString ":CALC1:MARK1:FUNC:TYPE PEAK", True ' Search type: peak
Analyzer.WriteString ":CALC1:MARK1:FUNC:PEXC 0.1", True ' Set peak excursion
Analyzer.WriteString ":CALC1:MARK1:FUNC:PPOL NEG", True ' Peak Polarity: negative
Analyzer.WriteString ":CALC1:MARK1:FUNC:EXEC", True ' Execute search
'Call ErrorCheck
Analyzer.WriteString ":CALC1:MARK1:X?", True ' Read marker stimulus value
Freq = Analyzer.ReadNumber
Analyzer.WriteString ":CALC1:MARK1:Y?", True ' Read marker value
Resp = Analyzer.ReadList
Cells(6, 2).Value = Val(Freq)
Cells(6, 3).Value = Resp(0) ' Display real part of result.
'
' Example of All Peak Search
'
Analyzer.WriteString ":CALC1:FUNC:DOM ON", True
Analyzer.WriteString ":CALC1:FUNC:DOM:STAR 1E6", True
Analyzer.WriteString ":CALC1:FUNC:DOM:STOP 5E6", True
Analyzer.WriteString ":CALC1:FUNC:TYPE APEAK", True ' Search type: all peak
Analyzer.WriteString ":CALC1:FUNC:PEXC 0.1", True ' Set peak excursion
Analyzer.WriteString ":CALC1:FUNC:PPOL NEG", True ' Peak Polarity: negative
Analyzer.WriteString ":CALC1:FUNC:EXEC", True ' Execute search
Analyzer.WriteString "*OPC?", True
Dummy = Analyzer.ReadNumber
Call ErrorCheck
'
Analyzer.WriteString ":CALC1:FUNC:POIN?", True ' Read how many peak is found
Poin = Analyzer.ReadNumber
Analyzer.WriteString ":CALC1:FUNC:DATA?", True ' Read stimulus point number
PeakPoint = Analyzer.ReadList '
j = 0
For i = 1 To Poin
Cells(5 + i, 5).Value = Val(PeakPoint(j))
Cells(5 + i, 6).Value = Val(PeakPoint(j + 1))
j = j + 2
Next i
'
' Example of Multi Peak Search
'
Analyzer.WriteString ":CALC1:MARK:FUNC:MULT:TYPE PEAK", True
Analyzer.WriteString ":CALC1:MARK:FUNC:MULT:PEXC 0.1", True
Analyzer.WriteString ":CALC1:MARK:FUNC:MULT:PPOL NEG", True
Analyzer.WriteString ":CALC1:MARK:FUNC:EXEC", True
Analyzer.WriteString "*OPC?", True
Dummy = Analyzer.ReadNumber
Call ErrorCheck
For i = 1 To 9
Analyzer.WriteString ":CALC1:MARK" & i & "?", True ' Check if marker is active.
Stat = Analyzer.ReadNumber
If Stat = 1 Then
Analyzer.WriteString ":CALC1:MARK" & i & ":X?", True ' Read marker stimulus value
Freq = Analyzer.ReadNumber
Analyzer.WriteString ":CALC1:MARK" & i & ":Y?", True ' Read marker value
Resp = Analyzer.ReadList
Cells(5 + i, 8).Value = Val(Freq)
Cells(5 + i, 9).Value = Resp(0)
End If
Next i
Analyzer.IO.Close
'
End Sub
Sub ErrorCheck()
Dim err As Variant
Analyzer.WriteString ":SYST:ERR?", True 'Reads error message.
err = Analyzer.ReadList
If Val(err(0)) <> 0 Then
Response = MsgBox(CStr(err(1)), vbOKOnly) 'Display the message box.
End If
End Sub