执行功率校准

E5071C

执行功率校准

有关应用程序的其他主题

概述

pow_cal.vba 展示利用E4418B功率计和E4412A功率传感器来执行功率校准的样本程序(VBA程序)。该VBA程序由下列程序模块组成:

对象名

模块类型

说明

mdlPowCal

标准模块

执行功率校准

模块1
模块2

标准模块

使用VISA库的定义文件

程序概述

此程序通过USB/GPIB连接E5071C和E4418B(GPIB地址:13),如下所示。然后,根据需要程序执行调零并对与功率计(E4418B)相连的功率传感器(E4412A)进行校准。最后,程序执行对E5071C的功率校准,并将所得到的功率校准数据组保存到文件中。

E5071C与功率计之间的连接

 

程序说明

当您运行这个VBA程序时,要进行复位,设置受控功率计的GPIB地址和E5071C的测量条件,并显示消息Do you want to zero and calibrate the power sensor?”(您是否想调零和校准功率传感器?)若您想进行调零和校准功率传感器,请点击Yes(是)否则点击No(否)

若您想进行调零和校准功率传感器,便应按照所显示的消息,将与功率的A通道相连的功率传感器连接到功率计的POWER RF(射频功率)端口,并点击OK。当完成调零和功率传感器校准时,将显示消息“Zeroing and calibrating the power sensor is complete”(调零和校准功率传感器已完成)

当显示提示您将功率传感器与E5071C的端口1相连的消息时,便进行连接,然后点击OK。立即执行功率校准数据测量,并将获得的功率校准数据组保存在名为CORR_DATA的文件中。

下面详细说明功率校准执行程序(对象名:mdlPowCal)。添加的行号只用于说明,并不在实际程序的源代码中出现。

100行到150行

分别将扫描类型(功率扫描)、点数(41)、功率范围(-20到+12 dBm)、扫描起始值(-20 dBm)、扫描终止值(-10 dBm)和固定频率分配给Swp_type、Nop、Pow_rang、Start_p、Stop_p和Cw_freq变量。

 

160行到170行

分别将对每个测量点的功率校准数据测量次数(4)和功率校准数据组的极限值(10 dBm)分配到Num_avg和Limit变量中。

200行

将E5071C返回到预置状态。

230行

将功率计的GPIB地址(13)设置到E5071C中。

260行到310行

对于通道1,将扫描类型分配给Swp_type变量,点数分配给Nop变量,功率范围分配给Pow_rang变量,扫描起始值分配给Start_p变量,扫描终止值分配给Stop_p变量以及固定频率分配给Cw_freq变量。

340行到370行

显示询问是否执行调零和功率传感器校准的消息。若点击Yes(是)按键,则这些行调用程序Control_PowerMeter(900行到1340行。相反,若点击No(否)按键,则程序跳过调零和功率传感器校准。

410行到420行

清除错误排队。然后,这些行提示您将功率传感器连接到E5071C的端口1,并在完成连接之后,等待点击OK按键。

450行到470行

对于通道1的端口1,这些行将会把每个测量点的功率校准测量次数设定到Num_avg变量,然后起动功率校准数据测量,并等待完成测量。

500行

读出在测量功率校准数据期间E5071C中发生的差错,并将其设置在Err变量中。

510行到590行

若未发生差错,则这些行便读出功率校准数据组,并将其设置在Corr_data变量中。此外,程序利用极限_测试功能(Limit_Test function)来核查读出的功率校准数据组是否超出规定的极限值。若超出了极限值,便返回极限_测试(Limit_Test)功能的返回值False(虚假)。然后,显示询问是否重新进行功率校准的消息,点击Yes(是)按键以返回起动功率校准数据测量。点击No(否)按键使程序终结。

610行到660行

若发生差错,将显示出错消息和询问是否重新执行功率校准的消息。点击Yes(是)按键以返回功率校准数据测量。点击No(否)按键使程序终结。

690行到790行

将读出的功率校准数据组写入名为CORR_DATA的文件。然后,这些行显示已成功完成保存到文件中的消息。

程序:Control_PowerMeter(900行到1340行)

990行到1000行

对VISA系统进行初始化和起动,并将起动信息输出到Defrm变量。在此过程期间,若发生差错,程序便转到错误处理程序(1260行到1300行)。

 

1030行到1040行

建立与使用中的功率计(GPIB地址:13)的连接,并将连接信息输出到E4418变量,在此过程期间,若发生差错,程序便转到错误处理程序(1260行到1300行)。

 

1070行到1090行

通过VISA将功率计返回到预置状态,并对状态字节寄存器和标准事件状态寄存器进行清零。然后,这些行启动标准事件状态寄存器的0位。

 

1100行

提示您将功率传感器与功率计的POWER REF(功率参考)端口相连,并在完成连接之后等待OK按键被点击。

1110行到1120行

通过VISA执行调零和功率传感器的校准。这些行进行设置,使得当完成所有未决操作时,1被设定到标准事件状态寄存器的0位。

1130行到1190行

通过VISA对状态字节寄存器的值进行检索,并将其设置到Rgst变量中。这些行将读出值与32(其中只5位为1的值)的AND(“与”逻辑)设定到Rslt变量中,并显示当Rslt变为1时(当调零和功率传感器的校准完成时)调零和功率传感器的校准完成的消息。

1220行

中断通信并使VISA系统终结。

1260行到1300行

若VISA功能出现差错,则这些行显示出错的细节并终结程序。

功能:Limit_Test(1360行到1530行)

1420行到1470行

若读出功率校准数据组的绝对值超出规定极限值,这些行便关断功率校准功能并返回False(虚假)值。否则便返回True(真实)值。

功率校准的测量(对象名:mdlPowCal)

10| Sub Main()

20|

30| Dim Swp_type As String, File As String

40| Dim Start_p As Double, Stop_p As Double, Cw_freq As Double, Limi t As Double

50| Dim Nop As Long, Pow_rang As Long, Num_avg As Long, Data_size As Long, Buff As Long, Dmy As Long

60| Dim Corr_data As Variant, Err As Variant

70| Dim Verifier As Boolean

80| Dim FileNo As Integer, I As Integer

90|

100| Swp_type = "POW" 'Sweep type : POWER

110| Nop = 41 'Number of points : 41

120| Pow_rang = 0 'Power range : -20 to +12 dBm

130| Start_p = -20# 'Start power : -20 dBm

140| Stop_p = -10# 'Stop power : -10 dBm

150| Cw_freq = 1000000000# 'CW frequency : 1 GHz

160| Num_avg = 4 'Number of averaging : 4

170| Limit = 10# 'limit for corrected data : 10 dBm

180|

190| '''Presetting the ENA

200| SCPI.SYSTem.PRESet

210|

220| '''Setting GPIB address of the power meter to ENA

230| SCPI.SYSTem.COMMunicate.GPIB.PMETer.address = 13

240|

250| '''Setting measurement conditions

260| SCPI.SENSe(1).SWEep.TYPE = Swp_type

270| SCPI.SENSe(1).SWEep.POINts = Nop

280| SCPI.Source(1).POWer.ATTenuation.DATA = Pow_rang

290| SCPI.Source(1).POWer.STARt = Start_p

300| SCPI.Source(1).POWer.STOP = Stop_p

310| SCPI.SENSe(1).FREQuency.CW = Cw_freq

320|

330| '''Performing a calibration in the power meter

340| Buff = MsgBox("Do you perform zeroing and calibrating the power sensor?", vbYesNo, "Power meter calibration")

350| If Buff = vbYes Then

360| Control_PowerMeter

370| End If

380|

390| Meas_Start:

400| '''Connecting the power sensor to the port 1 in the ENA

410| SCPI.IEEE4882.CLS

420| MsgBox "Set the power sensor connected to the port 1 in the ENA.", vbOKOnly, "Power meter calibration"

430|

440| '''Performing power calibration measurement

450| SCPI.Source(1).POWer.PORT(1).CORRection.COLLect.AVERage.count = Num_avg

460| SCPI.Source(1).POWer.PORT(1).CORRection.COLLect.ACQuire = "ASEN "

470| Dmy = SCPI.IEEE4882.OPC

480|

490| '''Error handling at power meter calibration

500| Err = SCPI.SYSTem.Error

510| If Err(0) = 0 Then

520| Corr_data = SCPI.Source(1).POWer.PORT(1).CORRection.DATA

530| Verifier = Limit_Test(Nop, Limit, Corr_data)

540| If Verifier = False Then

550| Buff = MsgBox("Do you perform the power meter calibration me asurement again?", vbYesNo, "Power meter calibration")

560| If Buff = vbYes Then GoTo Meas_Start

570| If Buff = vbNo Then GoTo Prog_Stop

580| End If

590| MsgBox "Power meter calibration measurement is complete.", vbO KOnly, "Power meter calibration"

600|

610| Else

620| MsgBox "Error: " & Err(1)

630| Buff = MsgBox("Do you perform the power meter calibration meas urement again?", vbYesNo, "Power meter calibration")

640| If Buff = vbYes Then GoTo Meas_Start

650| If Buff = vbNo Then GoTo Prog_Stop

660| End If

670|

680| '''Installing the corrected data to a file

690| FileNo = FreeFile

700| File = "CORR_DATA"

710|

720| Open File For Output As FileNo

730|

740| For I = 0 To Nop - 1

750| Write #FileNo, Val(Corr_data(I))

760| Next I

770| Close #FileNo

780|

790| MsgBox "Installing the corrected data to the file is DONE.", vbO KOnly, "Power meter calibration"

800|

810| GoTo Prog_End

820|

830| Prog_Stop:

840| MsgBox "Program Interruption", vbOKOnly, "Power meter calibratio n"

850|

860| Prog_End:

870|

880| End Sub

890|

900| Private Sub Control_PowerMeter()

910|

920| Dim Status As Long 'VISA function status return

930| Dim Defrm As Long 'Session to default resource code

940| Dim E4418 As Long 'Session to power meter

950| Dim Rslt As Integer

960| Dim Rgst As String * 10

970|

980| '''Initializing the VISA system

990| Status = viOpenDefaultRM(Defrm)

1000| If (Status <> VI_SUCCESS) Then GoTo VisaErrorHandler

1010|

1020| '''Opening the session to the power meter

1030| Status = viOpen(Defrm, "GPIB0::13::INSTR", 0, 0, E4418)

1040| If (Status <> VI_SUCCESS) Then GoTo VisaErrorHandler

1050|

1060| '''Zeroing and calibratingthe power meter

1070| Status = viVPrintf(E4418, "SYST:PRES" & Chr$(10), 0)

1080| Status = viVPrintf(E4418, "*CLS" & Chr$(10), 0)

1090| Status = viVPrintf(E4418, "*ESE 1" & Chr$(10), 0)

1100| MsgBox "Set the power sensor connected to the POWER REF port in the power meter.", vbOKOnly, "Power meter calibration"

1110| Status = viVPrintf(E4418, "CAL1:ALL" & Chr$(10), 0)

1120| Status = viVPrintf(E4418, "*OPC" & Chr$(10), 0)

1130| Do While Rslt = 0

1140| Status = viVPrintf(E4418, "*STB?" & Chr$(10), 0)

1150| Status = viVScanf(E4418, "%t", Rgst)

1160| Rslt = CInt(CInt(Rgst) And 32)

1170| Loop

1180|

1190| MsgBox "Zeroing and Calibrating the power sensor is complete.", vbOKOnly, "Power meter calibration"

1200|

1210| '''Closing the resource manager session

1220| Call viClose(Defrm)

1230|

1240| GoTo Prog_End

1250|

1260| VisaErrorHandler:

1270| Dim VisaErr As String * 200

1280| Call viStatusDesc(Defrm, Status, VisaErr)

1290| MsgBox "Error : " & VisaErr, vbExclamation

1300| End

1310|

1320| Prog_End:

1330|

1340| End Sub

1350|

1360| Function Limit_Test(Nop As Long, Limit As Double, Corr_data As Var iant) As Boolean

1370|

1380| Dim I As Integer

1390|

1400| For I = 0 To Nop - 1

1410|

1420| If Abs(Corr_data(I)) > Limit Then

1430| SCPI.Source(1).POWer.PORT(1).CORRection.STATe = False

1440| MsgBox "The corrected data is out of limit!", vbExclamation, "Power meter calibration"

1450| Limit_Test = False

1460| Exit Function

1470| End If

1480|

1490| Next I

1500|

1510| Limit_Test = True

1520|

1530| End Function