等待触发(SQR)
概述
这个样本程序说明如何使用SRQ检测测量是否结束。
当通道/迹线的最大数量设置为9通道/9迹线时,这个样本程序正确运行。
该样本程序设置触发系统、配置仪器,以正确发出SRQ,然后对仪器进行触发。当仪器发出了指示测量结束的SQR时,程序在打印测量完成的消息之后推出。
参见这个程序的等待测量结束。
在Excel VBA中的样本程序
Sub srq_meas_Click()
Dim defrm As Long
Dim vi As Long
Dim ContMode(9) As String
Dim Result As String * 10
Dim i As Integer, StbStatus As Integer
Const TimeOutTime = 100000 ' TimeOut time should be greater than the measurement time.
'
' Assign a GPIB address to the I/O pass.
Call viOpenDefaultRM(defrm)
Call viOpen(defrm, "GPIB0::17::INSTR", 0, 0, vi)
Call viSetAttribute(vi, VI_ATTR_TMO_VALUE, TimeOutTime)
'
' Store the settings of continuous initiation mode for eachchannel
' (on for channels 1 and 2; off for channels 3 through 9)
' into the array variable ContMode().
ContMode(1) = "ON"
ContMode(2) = "ON"
For i = 3 To 9
ContMode(i) = "OFF"
Next i
'
' Turn on or off continuous initiation mode for each channel
' depending on the value of ContMode(*).
For i = 1 To 9
Call viVPrintf(vi, ":INIT" & CStr(i) & ":CONT " & ContMode(i) & vbLf, 0)
Next i
'
' Set the trigger source to Bus Trigger.
Call viVPrintf(vi, ":TRIG:SOUR BUS" & vbLf, 0)
'
' .
Call viVPrintf(vi, ":STAT:OPER:PTR 0" & vbLf, 0) 'Set 0 at all bits of Position Transition Filter
Call viVPrintf(vi, ":STAT:OPER:NTR 16" & vbLf, 0) 'Set 1 at bit 4 of Negative Transition Filter
Call viVPrintf(vi, ":STAT:OPER:ENAB 16" & vbLf, 0) 'Set 1 at bit 4 of Operation status enable
Call viVPrintf(vi, "*SRE 128" & vbLf, 0) 'Set 1 at bit 7 of Service Request Enable Register
Call viVPrintf(vi, "*CLS" & vbLf, 0) ' Clear Register.
'
Call viVPrintf(vi, "*TRG" & vbLf, 0) 'Make a trigger
' Wait until Status Byte Register became 192
Do
Call viReadSTB(vi, StbStatus) ' Read Status Byte Register
Range("B5").Value = StbStatus
Loop Until StbStatus = 192
'
' Display a measurement completion message.
Stat = MsgBox("Measurement complete", vbOKOnly)
' Close IO
Call viClose(vi)
Call viClose(defrm)
End Sub
在HT Basic中的样本程序(srq_meas.htb)
10 DIM Cont_mode$(1:9)[9],Buff$[9]
20 INTEGER I
30 !
40 ASSIGN @Agte507x TO 717
50 !
60 Cont_mode$(1)="ON"
70 Cont_mode$(2)="ON"
80 Cont_mode$(3)="OFF"
90 Cont_mode$(4)="OFF"
100 Cont_mode$(5)="OFF"
110 Cont_mode$(6)="OFF"
120 Cont_mode$(7)="OFF"
130 Cont_mode$(8)="OFF"
140 Cont_mode$(9)="OFF"
150 !
160 FOR I=1 TO 9
170 OUTPUT @Agte507x;":INIT"&VAL$(I)&":CONT "&Cont_mode$(I)
180 NEXT I
190 OUTPUT @Agte507x;":TRIG:SOUR BUS"
200 !
210 OUTPUT @Agte507x;":STAT:OPER:PTR 0"
220 OUTPUT @Agte507x;":STAT:OPER:NTR 16"
230 OUTPUT @Agte507x;":STAT:OPER:ENAB 16"
240 OUTPUT @Agte507x;"*SRE 128"
250 OUTPUT @Agte507x;"*CLS"
260 OUTPUT @Agte507x;"*OPC?"
270 ENTER @Agte507x;Buff$
280 !
290 ON INTR 7 GOTO Meas_end
300 ENABLE INTR 7;2
310 OUTPUT @Agte507x;"*TRG"
320 PRINT "Waiting..."
330 Meas_wait: GOTO Meas_wait
340 Meas_end: OFF INTR 7
350 PRINT "Measurement Complete"
360 END
说明
40行
为I/O口分配GPIB地址。
60行到140行
这些行将每个通道(通道1和2打开;通道3到9关闭)连续初始化模式的设置储存到序列变量Cont_mode$(*)中。
160行到180行
这些行打开或关闭每个通道的连续初始化模式,打开或关闭取决于Cont_mode$(*)的值。
190行
设置触发源为“总线触发”。
210行到220行
这些行对仪器进行配置,使操作状态事件寄存器的位4只在操作状态条件寄存器的位4从1变为0(负缘变迁)时才设置为1。
230行到240行
这些行启动工作状态事件寄存器的位4和状态位寄存器的位7。
250行到270行
这些行清除状态位寄存器和操作状态事件寄存器。
290行到300行
这些行设置SRQ中断的分支目标以启动SRQ中断。
310行到320行
这些行对仪器进行触发,并等待测量周期的完成。
350行
显示测量完成的消息。