This VBScript program creates two segments, then uploads the segment data to the PNA.
The second part downloads the segment list from the PNA.
The SCPI commands in this example are sent over a COM interface using the SCPIStringParser object. You do NOT need a GPIB connection to run this example.
This VBScript (*.vbs) program can be run as a macro in the PNA. To do this, copy the following code into a text editor file such as Notepad and save it on the PNA hard drive as Unguided.vbs. Learn how to setup and run the macro.
See all Segment SCPI commands.
Option Explicit Dim app Set app = CreateObject("AgilentPNA835x.Application") ' Preset the PNA app.Preset Dim scpi Set scpi = app.ScpiStringParser ' In case of a measurement receiver PNA like N5264A ' which has no source ports, "SOURce:CATalog?" will ' return an empty list (just a pair of quotation marks) Dim srcPortNames srcPortNames = Split( scpi.Execute("SOURce:CATalog?"), ",") Dim numberOfSrcPorts If Left( srcPortNames(0), 2 ) = Chr(34) & Chr(34) Then numberOfSrcPorts = 0 Else numberOfSrcPorts = UBound(srcPortNames) + 1 End If ' Building up a string consisting of the sweep segment data ' we want to set up. This example will create two segments. Dim segData ' Set state of first segment to be ON (1 = ON, 0 = OFF), ' 101 points, start freq of 10 MHz, stop freq of 1 GHz segData = "1,101,10E6,1E9" ' If you want to include one or more of: IFbandwidth, Dwell Time ' or Port Power, remove the comments from these next two lines 'TurnOnOptions 1 'Call the subroutine 'segData = AddOptionalSettings(segData, numberOfSrcPorts) ' Set state of second segment to be ON, 201 points, ' start freq of 1 GHz, stop freq of 3 GHz segData = segData & ",1,201,1E9,3E9" ' Uncomment this line below only if you uncommented the ' AddOptionalSettings line above for the first segment. 'segData = AddOptionalSettings(segData, numberOfSrcPorts) Const numSegs = 2 ' Upload our segment list to the channel scpi.Execute "SENSe1:SEGMent:LIST SSTOP," & numSegs & "," & segData ' Set segment sweep type on Channel 1 scpi.Execute "SENSe1:SWEep:TYPE SEGment" ' Having the PNA display the segment sweep table for the channel scpi.Execute "DISPlay:WINDow1:TABLe SEGMent" Sub TurnOnOptions(ByVal chan) scpi.Execute "SENSe"&chan&":SEGMent:BWIDth:CONTrol ON" scpi.Execute "SENSe"&chan&":SEGMent:SWEep:TIME:CONTrol ON" scpi.Execute "SENSe"&chan&":SEGMent:POWer:CONTrol ON" ' Turning off coupling allows power to vary per each port scpi.Execute "SOURce"&chan&":POWer:COUPle OFF" End Sub Function AddOptionalSettings(ByVal inStr, ByVal numSrcPorts) ' Specifying 1 kHz IF bandwidth and Dwell Time of 0 inStr = inStr & ",1E3,0" ' -10 dBm power for each of the source ports Dim i For i = 0 To numSrcPorts - 1 inStr = inStr & ",-10" Next AddOptionalSettings = inStr End Function |
This example assumes that the active trace is in Window 1
Option Explicit Dim app Set app = CreateObject("AgilentPNA835x.Application") Dim scpi Set scpi = app.ScpiStringParser ' Set the display-active channel's sweep type to segment sweep ' (if the PNA's currently active measurement window doesn't ' contain any traces, this querying for active channel will ' result in a SCPI error which scpi.Parse will trap and throw) Dim chan chan = CLng( scpi.Parse("SYSTem:ACTive:CHANnel?") ) scpi.Execute "SENSe"&chan&":SWEep:TYPE SEGment" ' Having the PNA display the segment sweep table for the channel scpi.Execute "DISPlay:WINDow1:TABLe SEGMent" ' Get the total number of segments Dim numSegs numSegs = CLng( scpi.Execute("SENSe"&chan&":SEGMent:COUNt?") ) ' Read the segment listing Dim segDataStr segDataStr = scpi.Execute("SENSe"&chan&":SEGMent:LIST?") Dim segData segData = Split(segDataStr, ",") ' Get upper bound of the array of data values ' (lower bound of array resulting from VB 'Split' function is 0) Dim segArrayUB segArrayUB = UBound(segData) Dim numDataElementsPerSeg numDataElementsPerSeg = (segArrayUB + 1) / numSegs WScript.Echo "Number of segments = " & numSegs WScript.Echo "Number of data values per segment = " & numDataElementsPerSeg Dim segInfStr segInfStr = "Segment 1: state = " & CBool(segData(0)) segInfStr = segInfStr & ", num points = " & CLng(segData(1)) segInfStr = segInfStr & ", start freq = " & CDbl(segData(2)) segInfStr = segInfStr & ", stop freq = " & CDbl(segData(3)) segInfStr = segInfStr & ", IFBW = " & CDbl(segData(4)) segInfStr = segInfStr & ", dwell time = " & CDbl(segData(5)) ' In case of a measurement receiver PNA like N5264A ' which has no source ports, "SOURce:CATalog?" will ' return an empty list Dim srcPortNames srcPortNames = Split( scpi.Execute("SOURce"&chan&":CATalog?"), ",") Dim srcPortNamesUB srcPortNamesUB = UBound(srcPortNames) ' First source port name will be preceded by a quotation mark ' and the last name will be followed by one of those, so stripping ' those off now. srcPortNames(0) = Right( srcPortNames(0), Len(srcPortNames(0)) - 1 ) srcPortNames(srcPortNamesUB) = Left( srcPortNames(srcPortNamesUB), InStrRev(srcPortNames(srcPortNamesUB), Chr(34)) - 1 ) Dim firstPortIndex firstPortIndex = 6 Dim lastPortIndex lastPortIndex = numDataElementsPerSeg - 1 Dim j For j = firstPortIndex To lastPortIndex segInfStr = segInfStr & ", " & srcPortNames(j - firstPortIndex) & " power = " & CDbl(segData(j)) Next WScript.Echo segInfStr |