- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
读-写测量数据
概述
样本程序
关于控制E5071C的其他主题
概述
这部分说明如何处理E5071C的内部数据。您可以利用以下内部数据组:经修正的数据组、经修正的存储数组、格式化数据组、格式化存储数组和激励数据组。有关内部数据组的详情,参见Internal Data Processing(内部数据处理)。
为了读-写格式化数据组、格式化存储数组、经修正的数据组或经修正的存储数组,可以利用以下目标程序:
SCPI.CALCulate(Ch).SELected.DATA.FDATa
SCPI.CALCulate(Ch).SELected.DATA.FMEMory
SCPI.CALCulate(Ch).SELected.DATA.SDATa
SCPI.CALCulate(Ch).SELected.DATA.SMEMory
为了读出激励数据组,利用以下目标程序:
SCPI.SENSe(Ch).FREQuency.DATA
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
程序使用户指定待控制的通道
程序使用户指定读出哪条迹线的格式化数据组(源迹线)。
程序针对用户指定的迹线读出格式化数据组、在回送窗中显示测量结果,并将数据写入用户指定的迹线。详情见对代码窗的描述。
程序使用户指定重写哪条迹线的格式化数据组(目标迹线)。
退出程序,窗口消失。
在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