极限测试
概述
这个样本程序说明如何执行极限测试。
该样本程序创建如下两个表格所示的极限表,关闭极限测试功能,执行一次测量循环,然后显示测试结果。
编号 |
类型 |
开始激励 |
停止激励 |
开始响应 |
停止响应 |
1 |
最大 |
847.5 MHz |
905.0 MHz |
-55.0 dBm |
-55.0 dBm |
2 |
最大 |
935.0 MHz |
960.0 MHz |
-3.5 dBm |
-3.5 dBm |
3 |
最大 |
935.0 MHz |
960.0 MHz |
0 dBm |
0 dBm |
4 |
最大 |
980.0 MHz |
1047.5 MHz |
-25.0 dBm |
-25.0 dBm |
参见这个程序的极限测试。
在HT Basic中的样本程序(lim_test.htb)
10 DIM Param1$[9],Param2$[9],Fmt1$[9],Fmt2$[9],Buff$[9]
20 REAL Cent,Span,Lim1(1:4,1:5),Lim2(1:3,1:5),Fail_data(1:1601)
30 INTEGER Num_of_seg1,Num_of_seg2,Segment,Column,Fail_point
40 !
50 ASSIGN @Agte507x TO 717
60 !
70 Cent=9.475E+8
80 Span=2.00E+8
90 Param1$="S21"
100 Param2$="S11"
110 Fmt1$="MLOG"
120 Fmt2$="MLOG"
130 !
140 ! == Trace 1 Limit Line ==
150 Num_of_seg1=4 ! Number of segments: 4
160 ! -- Segment 1 --
170 Lim1(1,1)=1 ! Type : Maximum
180 Lim1(1,2)=8.475E+8 ! Frequency Start: 847.5 MHz
190 Lim1(1,3)=9.050E+8 ! Stop : 905.0 MHz
200 Lim1(1,4)=-55 ! Response Start: -55 dBm
210 Lim1(1,5)=-55 ! Stop : -55 dBm
220 ! -- Segment 2 --
230 Lim1(2,1)=2 ! Type : Minimum
240 Lim1(2,2)=9.350E+8 ! Frequency Start: 935.0 MHz
250 Lim1(2,3)=9.600E+8 ! Stop : 960.0 MHz
260 Lim1(2,4)=-3.5 ! Response Start: -3.5 dBm
270 Lim1(2,5)=-3.5 ! Stop : -3.5 dBm
280 ! -- Segment 3 --
290 Lim1(3,1)=1 ! Type : Maximum
300 Lim1(3,2)=9.350E+8 ! Frequency Start: 935.0 MHz
310 Lim1(3,3)=9.600E+8 ! Stop : 960.0 MHz
320 Lim1(3,4)=0 ! Response Start: 0 dBm
330 Lim1(3,5)=0 ! Stop : 0 dBm
340 ! -- Segment 4 --
350 Lim1(4,1)=1 ! Type : Maximum
360 Lim1(4,2)=9.800E+8 ! Frequency Start: 980.0 MHz
370 Lim1(4,3)=1.0475E+9 ! Stop : 1047.5 MHz
380 Lim1(4,4)=-25 ! Response Start: -25 dBm
390 Lim1(4,5)=-25 ! Stop : -25 dBm
400 ! == Trace 2 Limit Line ==
410 Num_of_seg2=3 ! Number of segments: 3
420 ! -- Segment 1 --
430 Lim2(1,1)=1 ! Type : Maximum
440 Lim2(1,2)=8.475E+8 ! Frequency Start: 847.5 MHz
450 Lim2(1,3)=9.250E+8 ! Stop : 925.0 MHz
460 Lim2(1,4)=0 ! Response Start: 0 dBm
470 Lim2(1,5)=0 ! Stop : 0 dBm
480 ! -- Segment 2 --
490 Lim2(2,1)=1 ! Type : Maximum
500 Lim2(2,2)=9.350E+8 ! Frequency Start: 935.0 MHz
510 Lim2(2,3)=9.600E+8 ! Stop : 960.0 MHz
520 Lim2(2,4)=-9.5 ! Response Start: -9.5 dBm
530 Lim2(2,5)=-9.5 ! Stop : -9.5 dBm
540 ! -- Segment 3 --
550 Lim2(3,1)=1 ! Type : Maximum
560 Lim2(3,2)=9.700E+8 ! Frequency Start: 970.0 MHz
570 Lim2(3,3)=1.0475E+9 ! Stop : 1047.5 MHz
580 Lim2(3,4)=0 ! Response Start: 0 dBm
590 Lim2(3,5)=0 ! Stop : 0 dBm
600 !
610 OUTPUT @Agte507x;":SENS1:FREQ:CENT ";Cent
620 OUTPUT @Agte507x;":SENS1:FREQ:SPAN ";Span
630 OUTPUT @Agte507x;":CALC1:PAR1:COUN 2"
640 OUTPUT @Agte507x;":DISP:WIND1:SPL D1_2"
650 OUTPUT @Agte507x;":TRIG:SOUR BUS"
660 OUTPUT @Agte507x;":INIT1:CONT ON"
670 !
680 ! Trace 1
690 !
700 OUTPUT @Agte507x;":CALC1:PAR1:SEL"
710 !
720 OUTPUT @Agte507x;":CALC1:PAR1:DEF "&Param1$
730 OUTPUT @Agte507x;":CALC1:FORM "&Fmt1$
740 !
750 OUTPUT @Agte507x;":CALC1:LIM:DATA ";Num_of_seg1;
760 FOR Segment=1 TO Num_of_seg1
770 FOR Column=1 TO 5
780 OUTPUT @Agte507x;",";Lim1(Segment,Column);
790 NEXT Column
800 NEXT Segment
810 OUTPUT @Agte507x;""
820 OUTPUT @Agte507x;":CALC1:LIM:DISP ON"
830 OUTPUT @Agte507x;":CALC1:LIM ON"
840 !
850 ! Trace 2
860 !
870 OUTPUT @Agte507x;":CALC1:PAR2:SEL"
880 !
890 OUTPUT @Agte507x;":CALC1:PAR2:DEF "&Param2$
900 OUTPUT @Agte507x;":CALC1:FORM "&Fmt2$
910 !
920 OUTPUT @Agte507x;":CALC1:LIM:DATA ";Num_of_seg2;
930 FOR Segment=1 TO Num_of_seg2
940 FOR Column=1 TO 5
950 OUTPUT @Agte507x;",";Lim2(Segment,Column);
960 NEXT Column
970 NEXT Segment
980 OUTPUT @Agte507x;""
990 OUTPUT @Agte507x;":CALC1:LIM:DISP ON"
1000 OUTPUT @Agte507x;":CALC1:LIM ON"
1010 !
1020 ! Setting status registers
1030 !
1040 OUTPUT @Agte507x;":STAT:QUES:LIM:CHAN1:ENAB 6"
1050 OUTPUT @Agte507x;":STAT:QUES:LIM:CHAN1:PTR 6"
1060 OUTPUT @Agte507x;":STAT:QUES:LIM:CHAN1:NTR 0"
1070 OUTPUT @Agte507x;":STAT:QUES:LIM:PTR 2"
1080 OUTPUT @Agte507x;":STAT:QUES:LIM:NTR 0"
1090 OUTPUT @Agte507x;"*CLS"
1100 !
1110 OUTPUT @Agte507x;":TRIG:SING"
1120 OUTPUT @Agte507x;"*OPC?"
1130 ENTER @Agte507x;Buff$
1140 !
1150 ! Checking test results
1160 !
1170 OUTPUT @Agte507x;":STAT:QUES:LIM?"
1180 ENTER @Agte507x;Reg_val
1190 Ch1_judge=BIT(Reg_val,1)
1200 OUTPUT @Agte507x;":STAT:QUES:LIM:CHAN1?"
1210 ENTER @Agte507x;Reg_val
1220 Tr1_judge=BIT(Reg_val,1)
1230 Tr2_judge=BIT(Reg_val,2)
1240 !
1250 ! Displaying test results
1260 !
1270 IF Ch1_judge=0 THEN
1280 PRINT "## PASS! ##"
1290 ELSE
1300 PRINT "## FAIL! ##"
1310 IF Tr1_judge=0 THEN
1320 PRINT " Trace1(S21): PASS"
1330 ELSE
1340 PRINT " Trace1(S21): FAIL"
1350 !
1360 ! Reading and displaying frequency at failed points
1370 !
1380 OUTPUT @Agte507x;":CALC1:PAR1:SEL"
1390 OUTPUT @Agte507x;":CALC1:LIM:REP:POIN?"
1400 ENTER @Agte507x;Fail_point
1410 REDIM Fail_data(1:Fail_point)
1420 OUTPUT @Agte507x;":CALC1:LIM:REP?"
1430 ENTER @Agte507x;Fail_data(*)
1440 PRINT " Frequency:"
1450 FOR I=1 TO Fail_point
1460 PRINT USING "3X,MD.4DE";Fail_data(I)
1470 NEXT I
1480 END IF
1490 IF Tr2_judge=0 THEN
1500 PRINT " Trace2(S11): PASS"
1510 ELSE
1520 PRINT " Trace2(S11): FAIL"
1530 !
1540 ! Reading and displaying frequency at failed points
1550 !
1560 OUTPUT @Agte507x;":CALC1:PAR2:SEL"
1570 OUTPUT @Agte507x;":CALC1:LIM:REP:POIN?"
1580 ENTER @Agte507x;Fail_point
1590 REDIM Fail_data(1:Fail_point)
1600 OUTPUT @Agte507x;":CALC1:LIM:REP?"
1610 ENTER @Agte507x;Fail_data(*)
1620 PRINT " Frequency:"
1630 FOR I=1 TO Fail_point
1640 PRINT USING "3X,MD.4DE";Fail_data(I)
1650 NEXT I
1660 END IF
1670 END IF
1680 END
说明
50行
为I/O通道分配GPIB地址。
70行到120行
这些行将扫描中心值、扫描范围值、迹线1测量参数、迹线2测量参数、迹线1数据格式和迹线2数据格式分别储存到Cent、Span、Param1$、Param2$、Fmt1$和Fmt2$变量中。
150行
将迹线1极限表中的各个部分数量储存到Num_of_seg1变量。
160行到390行
这些行将迹线1极限表中的设置储存到Lim1(*)变量。
410行
将迹线2极限表中各个部分的数量储存到Num_of_seg2变量。
420行到590行
这些行将迹线2极限表中的设置储存到Lim2(*)变量。
610行到620行
这些行使用Cent与Span变量包含的中心与范围值为通道1的扫描范围设定扫描范围。
630行到660行
这些行对通道1进行设定,以使通道1包括2条迹线,能在两个水平窗口显示图形(即屏幕分成上、下两部分),使用总线触发源,并以连续的激活模式运行。
700行
设置通道1的激活迹线为迹线1。
720行到730行
这些行将迹线1的测量参数与数据格式分别储存到Param1$与Fmt1$变量中。
750行到810行
这些行为迹线1设置迹线表。
750行:发送极限表与Num_of_seg1变量(包括各部分数量)的设置命令。
770行到790行: 为每个部分发送五个数据项目(类型、起点激励值、终点激励值、起点响应值和终点响应值)。
820行到830行
这些行打开迹线1的极限显示功能与极限测试功能。
870行
设置通道1的激活迹线为迹线2。
890行到900行
这些行将迹线2的测量参数与数据格式分别设置为Param2$与Fmt2$。
920行到980行
这些行为迹线2设定迹线表。
990行到1000行
这些行打开迹线2的极限显示功能与极限测试功能。
1040行到1060行
这些行设置问题迹线通道1状态寄存器、启动寄存器与正过渡滤波器为6(以二进位表示为0000000000000110),同时设置负向过渡滤波器为0,以使问题迹线状态条件寄存器的位1在结合迹线1与迹线2结果的测试结果为“未通过”时设置为1。
该样本程序提供配置寄存器位的明确示例,以使其反映只包括迹线1和迹线2的测试结果。然而,因为只要启动了这些迹线的极限测试功能,迹线3到迹线9的结果就不会“未通过”,即使缺省设置不变,寄存器位反映的测试结果也限制为迹线1与迹线2。
1070行到1080行
这些行设置过渡滤波器,以使问题极限状态事件寄存器的位1在问题极限状态条件寄存器的位1从0变到1时设置为1。
1090行
清除问题极限状态事件寄存器和问题极限通道1状态事件寄存器。
1110行到1130行
这些行对仪器进行触发,并等待扫描周期完成。
1170行到1190行
这些行获取问题极限状态事件寄存器值,并将其值的位1设置保存到Ch1_judge。
1200行到1230行
这些行获取问题极限通道1状态事件寄存器的值,并将该值位1与位2的设置分别储存到Tr1_judge与Tr2_judge。
1280行
如果通道1的测试结果是“通过”(即如果Ch1_judge返回0),这行显示指示DUT通过极限测试的消息。
1300行到1660行
如果通道1的测试结果为“未通过”(即Ch1_judge返回1),则执行这些行。
1300行: 提醒用户极限测试结果“未通过”。
1320行: 如果迹线1的测试结果是“通过”(即如果Tr1_judge返回0),这行显示指示迹线1通过极限测试的消息。
1340行到1470行:如果迹线1的测试结果为“未通过”(即Tr1_judge返回1),则执行这些行。如果迹线1的测试结果为“未通过”(即Tr1_judge返回1),则执行这些行。
1340行: 提醒用户迹线1的极限测试结果“未通过”
1380行: 设置通道1的激活迹线为迹线2。
1390行到1410行:这些行获得迹线1上未通过的测量点数,并以点数为基础,调整包括获取频率的序列的大小。
1420行到1470行: 这些行获取并显示迹线1上未通过测量点的频率。
1500行: 如果迹线2的测试结果是“通过”(即如果Tr2_judge返回0),这行显示指示迹线2通过极限测试的消息。
1520行到1650行: 如果迹线2的测试结果是“未通过”(即如果Tr2_judge返回1),这些行提醒用户迹线1未通过极限测试,然后获取并显示迹线2上未通过的测量点频率。