Synchronizing Acquisitions
38
Keysight InfiniiVision M9241/42/43A PXIe Oscilloscopes SCPI Programmer's Guide
1365
N_SEGMENTS = \
float(KsInfiniiVisionX.query(":ACQuire:SEGMented:COUNt?"))
# Note that if there are a lot of analysis associated segments,
# for example, serial data decode, the timeout will likely need
# to be longer than calculated.
#
# You are encouraged to manually set up the oscilloscope in
# this case, as it will be used, time it, and use that, with
# a little overhead.
#
# Blocking method is recommended for Segmented Memory mode.
elif ACQ_TYPE == "AVER":
N_AVERAGES = float(KsInfiniiVisionX.query(":ACQuire:COUNt?"))
# Calculate acuisition timeout by overestimate method:
# Recall that PyVisa timeouts are in ms, so multiply by 1000.
SCOPE_ACQUISITION_TIME_OUT = (float(TIME_TO_TRIGGER)*1.1 +
(T_RANGE*2.0 + abs(T_POSITION)*2.0 + HO*1.1 +
float(TIME_BETWEEN_TRIGGERS)*1.1)*N_SEGMENTS*N_AVERAGES)*1000.0
## Ensure the timeout is no less than 10 seconds
if SCOPE_ACQUISITION_TIME_OUT < 10000.0:
SCOPE_ACQUISITION_TIME_OUT = 10000.0
# What about Equivalent Time Mode and other odd modes such as
# Jitter or Eye (the last two only being found on the
# 6000 X-Series), and math functions?
#
# In most cases, the padding and 10 second minimum timeout will
# take care of this.
#
# Equivalent Time Mode has effects only at the fastest time
# scales, so it really doesn't make a difference as long as a
# trigger signal is present.
If trigger signal occurs rarely,
# adjust the TIME_BETWEEN_TRIGGERS constant accordingly.
#
# For math, the math will happen fast enough that the "padding"
# in the timeout calculation takes care of this.
#
# For jitter mode on the 6000 X-Series, you can try this method,
# typically there is always a signal present, and the 10 second
# minimum should work out.
If not, make it bigger, or increase
# padding.
#
# For Eye mode on the 6000 X-Series, none of this works anyway,
# and you have to use :RUN (or :RTEYe:ACQuire) and :STOP.
# Acquire Signal
# ----------------------------------------------------------------
# Choose blocking_method or polling_method.
These were defined as
# functions in case you want to use them repeatedly.
blocking_method()
# If Acquisition Type is Average, always use blocking_method() to
# get complete average.
do_something_with_data()
polling_method()