读-写测量数据

E5071C

读-写测量数据

关于控制E5071C的其他主题

概述

这部分说明如何处理E5071C的内部数据。您可以利用以下内部数据组:经修正的数据组、经修正的存储数组、格式化数据组、格式化存储数组和激励数据组。有关内部数据组的详情,参见Internal Data Processing(内部数据处理)

为了读-写格式化数据组、格式化存储数组、经修正的数据组或经修正的存储数组,可以利用以下目标程序:

为了读出激励数据组,利用以下目标程序:

E5071C VBA允许您利用Variant(变体)型变量来处理多个数据片。Variant变量可能包含任意数据类型,从而允许处理数组数据,而无须知道单元数。例如,一个包含5个测量点的格式化数据组像下图所示那样被存储。注意,格式化数据组总是每个测量点包含2个数据项,采用无论哪种格式。有关所包含数据的详情,参见Internal Data Processing(内部数据处理)。您可能发现说明所包含的数据项与数据格式之间的关系的数值表。

将数据存入Variant变量中的实例

 

  • 当您使用上面列出的目标程序之一时,数组的基本分度数总是为0,即使说明部分包含"Option Base 1"语句,也是如此,该语句规定使用为1的基本数组下标。

例如,您可能希望整体(包括所有测量点)读出一条特定迹线的格式化数据组、在回送窗中显示数据,然后将数据写入另一条迹线。借助样本程序能更好地理解如何来实现这样的过程。

样本程序磁盘包含名为"read_write.vba"的样本程序,说明如何读出和写入测量数据,这个VBA程序由下列模块组成:

目标名

模块类型

内容

frmReadWrite

UserForm

读出显示和写入格式化数据组

mdlReadWrite

标准模块

调用UserForm.

  • 当通道/迹线的最大数据定为9通道/9迹线时,该样本程序正确运行。

当您运行这个VBA程序时,将出现以下窗口。

read_write.vba程序的UserForm

 

程序使用户指定待控制的通道

  1. 程序使用户指定读出哪条迹线的格式化数据组(源迹线)。

  2. 程序针对用户指定的迹线读出格式化数据组、在回送窗中显示测量结果,并将数据写入用户指定的迹线。详情见对代码窗的描述。

  3. 程序使用户指定重写哪条迹线的格式化数据组(目标迹线)。

  4. 退出程序,窗口消失。

 

在Visual Basic Editor中,打开UserForm(目标名:frmReadWrite),双击整个UserForm或Copy ->Exit按键以带出代码窗。以下是与相应按键相联系的子程序的说明。

当用户点击UserForm上的Copy按键时,便调用程序(10行到520行)

90行到160行

这些行对每个列表中所选择的项目进行识别,并将他们存储到变量TrGet,TrPut和ActCh中。

180行到210行

如果未显示指定的目标迹线,这些行便显示那条迹线。

230行到250行

这些行使指定通道(ActCh)内的指定迹线(TrGet:源迹线)成为工作迹线,并保持扫描。

260行

读出指定通道(ActCh)的测量点数,并将该数存储到Nop变量中。

280行

读出工作迹线(源迹线)的格式化数据组,并将数据存储到FmtData变量中。

290行

读出指定通道(ActCh)的激励数组,并将数据存储到Freq变量中。

330行

读出工作迹线(源迹线)的数据格式,并将其存储到Fmt变量中。

340行到350行

这些行将回送窗显示在LCD屏幕的靠下部分。

360行到470行

在回送窗中,若Fmt是"MLOG"、"PHAS"、"GDEL"、"MLIN"、"SWR"、"REAL"、"IMAG"或 "UPH",则这些行将显示每个点连同一个被测值(下标的奇数部分始终为0);而若Fmt$返回任何其它字符串,则显示每个点连同两个被测值和频率。

490行

使指定通道(ActCh)内的指定迹线(TrPut:目标迹线)成为工作迹线。

500行

将格式化数据组(FmtData)写入工作迹线(目标迹线)。

当用户点击UserForm上的Exit按键时,便调用程序(540行到580行)。

560行

从存储器中卸载UserForm,结束程序。

对UserForm进行初始的程序(600行到1020行)。

620行到1000行

当起动程序时,这些行将增加各列表项目,并对每个列表设置默认值。

样本程序

 读出/显示/写入格式化数据组(read_write.frm)

10| Private Sub cmdCopy_Click()

20|

30| Dim X As Integer, Y As Integer, Z As Integer, I As Integer

40| Dim ActCh As Long, TrGet As Long, TrPut As Long

50| Dim TrCont As Long, Nop As Long

60| Dim FmtData As Variant, Freq As Variant

70| Dim Fmt As String

80|

90| X = cboCh.ListIndex

100| ActCh = X + 1

110|

120| Y = cboGet.ListIndex

130| TrGet = Y + 1

140|

150| Z = cboPut.ListIndex

160| TrPut = Z + 1

170|

180| TrCont = SCPI.CALCulate(ActCh).PARameter.Count

190| If TrCont < TrPut Then

200| SCPI.CALCulate(ActCh).PARameter.Count = TrPut

210| End If

220|

230| SCPI.CALCulate(ActCh).PARameter(TrGet).SELect

240| SCPI.INITiate(ActCh).CONTinuous = False

250| SCPI.ABORt

260| Nop = SCPI.SENSe(ActCh).SWEep.POINts

270|

280| FmtData = SCPI.CALCulate(ActCh).SELected.Data.FDATa

290| Freq = SCPI.SENSe(ActCh).FREQuency.Data

300|

310| '''Displays the formatted data

320|

330| Fmt = SCPI.CALCulate(ActCh).SELected.Format

340| SCPI.DISPlay.TABLe.TYPE = "ECHO"

350| SCPI.DISPlay.TABLe.STATe = True

360| Select Case Fmt

370| Case "MLOG", "PHAS", "GDEL", "MLIN", "SWR", "REAL", "IMAG", "UPH"

380| ECHO "Nop", "Frequency(GHz)", "Data"

390| For I = 0 To Nop - 1

400| ECHO I + 1, Freq(I) / 1000000000#, FmtData(2 * I)

410| Next I

420| Case Else

430| ECHO "Nop", "Frequency(GHz)", "Data1", "Data2"

440| For I = 0 To Nop - 1

450| ECHO I + 1, Freq(I) / 1000000000#, FmtData(2 * I), FmtData(2 * I + 1)

460| Next I

470| End Select

480|

490| SCPI.CALCulate(ActCh).PARameter(TrPut).SELect

500| SCPI.CALCulate(ActCh).SELected.Data.FDATa = FmtData

510|

520| End Sub

530|

540| Private Sub cmdExit_Click()

550|

560| Unload Me

570|

580| End Sub

590|

600| Private Sub UserForm_Initialize()

610|

620| With cboCh

630| .AddItem "CH1"

640| .AddItem "CH2"

650| .AddItem "CH3"

660| .AddItem "CH4"

670| .AddItem "CH5"

680| .AddItem "CH6"

690| .AddItem "CH7"

700| .AddItem "CH8"

710| .AddItem "CH9"

720| End With

730|

740| With cboGet

750| .AddItem "Trace 1"

760| .AddItem "Trace 2"

770| .AddItem "Trace 3"

780| .AddItem "Trace 4"

790| .AddItem "Trace 5"

800| .AddItem "Trace 6"

810| .AddItem "Trace 7"

820| .AddItem "Trace 8"

830| .AddItem "Trace 9"

840| End With

850|

860| With cboPut

870| .AddItem "Trace 1"

880| .AddItem "Trace 2"

890| .AddItem "Trace 3"

900| .AddItem "Trace 4"

910| .AddItem "Trace 5"

920| .AddItem "Trace 6"

930| .AddItem "Trace 7"

940| .AddItem "Trace 8"

950| .AddItem "Trace 9"

960| End With

970|

980| cboCh.ListIndex = 0

990| cboGet.ListIndex = 0

1000| cboPut.ListIndex = 0

1010|

1020| End Sub