Keysight1200X#

class Keysight1200X(
visa_resource: str | VisaConfig,
)[source]#

Bases: ScopeDriverBase

SCPI driver for Keysight InfiniiVision 1200 X-Series oscilloscopes.

Methods

check_errors

Query :SYSTem:ERRor? once and raise on a non-zero code.

close

Close the underlying transport.

digitize

:DIGitize the cached trigger source, then *OPC? under a scoped VISA timeout.

fetch_waveform

Fetch the waveform from channel over WORD (unsigned 16-bit, LSB-first), 1000 points.

force_trigger

Force a trigger event immediately, regardless of the configured conditions.

get_acquisition_mode

Read back the current acquisition mode.

get_acquisition_state

:OPERegister:CONDition? bit 3 (0x08) — set = RUNNING, clear = STOPPED.

get_average_count

Read back the waveforms-to-average count.

get_coupling

Read back input coupling on channel.

get_horizontal_scale

Read back the timebase (seconds/div).

get_probe_attenuation

Read back channel's probe attenuation ratio.

get_sample_rate

Read back the current sample rate (samples per second).

get_trigger_status

:OPERegister:CONDition? bits: 0x20 = ARMED, 0x08 = AUTO (running), else TRIGGERED.

get_vertical_offset

Read back channel's vertical offset (volts).

get_vertical_scale

Read back channel's vertical scale (V/div).

load_settings

:RECall:SETup from scope memory, or send local bytes via :SYSTem:SETup.

measure

Install then query a built-in measurement on channel.

open

Open the underlying transport.

run

Start continuous (free-running) acquisition.

save_screenshot

:SAVE:IMAGe to the scope, or :DISPlay:DATA? PNG,COLor and write locally.

save_settings

:SAVE:SETup to scope memory or to the host (:SYSTem:SETup?).

set_acquisition_mode

Set the acquisition mode.

set_average_count

Set the number of waveforms to average.

set_coupling

Set AC/DC input coupling on channel.

set_horizontal_scale

Set the timebase to seconds_per_div.

set_probe_attenuation

Set channel's probe attenuation ratio (e.g. 1, 10, 100, 1000).

set_trigger_level

Set the trigger threshold to level (volts).

set_trigger_mode

Set the trigger sweep mode (AUTO / NORMAL).

set_trigger_slope

Set the trigger edge slope (RISING / FALLING / EITHER).

set_trigger_source

Set the trigger source to analog channel.

set_trigger_type

Set the trigger type (EDGE, PULSE, …).

set_vertical_offset

Set channel's vertical offset to offset (volts).

set_vertical_scale

Set channel's vertical scale to volts_per_div (V/div).

setup_measurement

Ensure a measurement slot exists for measurement_type/channel before the scope triggers.

single

Arm a single-shot acquisition.

stop

Stop acquisition.

open() → None[source]#

Open the underlying transport. Idempotent.

Concrete drivers also perform any one-shot instrument setup here (e.g. *CLS, remote-mode handshake).

close() → None[source]#

Close the underlying transport. Idempotent.

check_errors() → None[source]#

Query :SYSTem:ERRor? once and raise on a non-zero code. Does not drain the queue.

set_vertical_scale(
volts_per_div: float,
channel: int,
) → None[source]#

Set channel’s vertical scale to volts_per_div (V/div).

Drivers may snap to the nearest hardware-supported step. Callers that need the actual applied value should get_vertical_scale() afterward.

get_vertical_scale(channel: int) → float[source]#

Read back channel’s vertical scale (V/div).

set_vertical_offset(offset: float, channel: int) → None[source]#

Set channel’s vertical offset to offset (volts).

get_vertical_offset(channel: int) → float[source]#

Read back channel’s vertical offset (volts).

set_coupling(
coupling: Coupling,
channel: int,
) → None[source]#

Set AC/DC input coupling on channel.

get_coupling(channel: int) → Coupling[source]#

Read back input coupling on channel.

set_probe_attenuation(factor: float, channel: int) → None[source]#

Set channel’s probe attenuation ratio (e.g. 1, 10, 100, 1000).

get_probe_attenuation(channel: int) → float[source]#

Read back channel’s probe attenuation ratio.

set_horizontal_scale(seconds_per_div: float) → None[source]#

Set the timebase to seconds_per_div. Applies globally to all channels.

get_horizontal_scale() → float[source]#

Read back the timebase (seconds/div).

get_sample_rate() → float[source]#

Read back the current sample rate (samples per second).

This is the effective hardware rate the scope is acquiring at; it depends on the timebase, memory depth, and interpolation settings.

set_acquisition_mode(
mode: AcquisitionMode,
) → None[source]#

Set the acquisition mode.

Drivers should raise NotImplementedError for AcquisitionMode values their scope doesn’t support (e.g. Keysight 1200X has no ENVELOPE mode).

get_acquisition_mode() → AcquisitionMode[source]#

Read back the current acquisition mode.

set_average_count(count: int) → None[source]#

Set the number of waveforms to average. Only takes effect in AcquisitionMode.AVERAGE.

get_average_count() → int[source]#

Read back the waveforms-to-average count.

run() → None[source]#

Start continuous (free-running) acquisition.

stop() → None[source]#

Stop acquisition. Leaves the captured data intact for fetch_waveform / measure.

single() → None[source]#

Arm a single-shot acquisition.

Non-blocking — use get_acquisition_state to poll for STOPPED, or prefer digitize() which combines arming and waiting.

digitize(timeout: float) → None[source]#

:DIGitize the cached trigger source, then *OPC? under a scoped VISA timeout.

On timeout, clear() aborts the pending op and restores the session.

get_acquisition_state() → AcquisitionState[source]#

:OPERegister:CONDition? bit 3 (0x08) — set = RUNNING, clear = STOPPED.

fetch_waveform(
channel: int,
) → WaveformData[source]#

Fetch the waveform from channel over WORD (unsigned 16-bit, LSB-first), 1000 points.

measure(
measurement_type: ScopeMeasurementType,
channel: int,
) → float[source]#

Install then query a built-in measurement on channel.

The install form runs first as a guard — bad command syntax surfaces via check_errors() before we’d block on the query. The vendor’s invalid-measurement sentinel maps to NaN.

set_trigger_source(channel: int) → None[source]#

Set the trigger source to analog channel.

Drivers typically cache this value because the trigger-level SCPI on some scopes requires the source channel in the same command.

set_trigger_type(
trigger_type: TriggerType,
) → None[source]#

Set the trigger type (EDGE, PULSE, …).

set_trigger_level(level: float) → None[source]#

Set the trigger threshold to level (volts). Applies to the configured trigger source.

set_trigger_slope(
slope: TriggerSlope,
) → None[source]#

Set the trigger edge slope (RISING / FALLING / EITHER).

set_trigger_mode(
mode: TriggerMode,
) → None[source]#

Set the trigger sweep mode (AUTO / NORMAL).

AUTO forces an acquisition if no trigger fires within the timeout; NORMAL waits indefinitely for a real trigger.

force_trigger() → None[source]#

Force a trigger event immediately, regardless of the configured conditions.

get_trigger_status() → TriggerStatus[source]#

:OPERegister:CONDition? bits: 0x20 = ARMED, 0x08 = AUTO (running), else TRIGGERED.

save_screenshot(
filepath: str,
to_instrument: bool = False,
) → bytes[source]#

:SAVE:IMAGe to the scope, or :DISPlay:DATA? PNG,COLor and write locally.

save_settings(
name: str,
to_instrument: bool = False,
) → bytes[source]#

:SAVE:SETup to scope memory or to the host (:SYSTem:SETup?).

load_settings(
name: str,
from_instrument: bool = False,
) → None[source]#

:RECall:SETup from scope memory, or send local bytes via :SYSTem:SETup.

setup_measurement(
measurement_type: ScopeMeasurementType,
channel: int,
) → None#

Ensure a measurement slot exists for measurement_type/channel before the scope triggers.

Required for instruments (e.g. Tektronix) that compute measurements during acquisition — the slot must be present at trigger time or the first measure() returns stale/invalid data. Default is a no-op for instruments (e.g. Keysight 1200X) that compute on demand.