Searching Peak

Other topics about Processing Measurement Results

Overview

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.

Searching Peak Sample Program in Excel VBA

    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