# SiglentSDS1000XE

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

Bases: [`ScopeDriverBase`](https://dev.nominal.io/instro/ref/instruments/instro.scope.ScopeDriverBase.md#instro.scope.ScopeDriverBase "instro.scope.scope.ScopeDriverBase")

SCPI driver for Siglent SDS1000X-E series oscilloscopes (SDS1104X-E and family).

Methods

| [`check_errors`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.check_errors "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.check_errors") | Poll `CMR?` then `EXR?` and raise on the first non-zero code (no error queue on Siglent). |
| --- | --- |
| [`close`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.close "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.close") | Close the underlying transport. |
| [`digitize`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.digitize "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.digitize") | Arm a single acquisition then poll `INR?` bit 0 (new signal acquired) until set or `timeout`. |
| [`fetch_waveform`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.fetch_waveform "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.fetch_waveform") | Fetch the full waveform from `channel` over `C{n}:WF? DAT2` (signed 8-bit codes). |
| [`force_trigger`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.force_trigger "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.force_trigger") | Force a trigger event immediately, regardless of the configured conditions. |
| [`get_acquisition_mode`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_acquisition_mode "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_acquisition_mode") | Read back the current acquisition mode. |
| [`get_acquisition_state`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_acquisition_state "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_acquisition_state") | Read back the acquisition run state (RUNNING / STOPPED). |
| [`get_average_count`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_average_count "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_average_count") | Read back the waveforms-to-average count. |
| [`get_coupling`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_coupling "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_coupling") | Read back input coupling on `channel`. |
| [`get_horizontal_scale`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_horizontal_scale "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_horizontal_scale") | Read back the timebase (seconds/div). |
| [`get_probe_attenuation`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_probe_attenuation "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_probe_attenuation") | Read back `channel`'s probe attenuation ratio. |
| [`get_sample_rate`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_sample_rate "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_sample_rate") | Read back the current sample rate (samples per second). |
| [`get_trigger_status`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_trigger_status "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_trigger_status") | Read back the trigger status (ARMED / READY / TRIGGERED / …). |
| [`get_vertical_offset`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_vertical_offset "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_vertical_offset") | Read back `channel`'s vertical offset (volts). |
| [`get_vertical_scale`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_vertical_scale "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.get_vertical_scale") | Read back `channel`'s vertical scale (V/div). |
| [`load_settings`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.load_settings "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.load_settings") | Recall a panel setup from a USB file (`RCPN`) or push host bytes back (`PNSU`). |
| [`measure`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.measure "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.measure") | Query a built-in parameter via `C{n}:PAVA?`; unavailable/sentinel results map to `NaN`. |
| [`open`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.open "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.open") | Open the transport and disable comm headers so query replies are bare values. |
| [`run`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.run "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.run") | Start continuous (free-running) acquisition. |
| [`save_screenshot`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.save_screenshot "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.save_screenshot") | Transfer a screen dump (`SCDP`, a raw BMP) to the host and write it to `filepath`. |
| [`save_settings`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.save_settings "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.save_settings") | Save the panel setup to a USB file (`STPN`) or transfer it to the host (`PNSU?`). |
| [`set_acquisition_mode`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_acquisition_mode "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_acquisition_mode") | Set the acquisition mode. |
| [`set_average_count`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_average_count "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_average_count") | Set the number of waveforms to average. |
| [`set_coupling`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_coupling "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_coupling") | Set AC/DC input coupling on `channel`. |
| [`set_horizontal_scale`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_horizontal_scale "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_horizontal_scale") | Set the timebase to `seconds_per_div`. |
| [`set_probe_attenuation`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_probe_attenuation "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_probe_attenuation") | Set `channel`'s probe attenuation ratio (e.g. 1, 10, 100, 1000). |
| [`set_trigger_level`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_trigger_level "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_trigger_level") | Set the trigger threshold to `level` (volts). |
| [`set_trigger_mode`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_trigger_mode "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_trigger_mode") | Set the trigger sweep mode (AUTO / NORMAL). |
| [`set_trigger_slope`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_trigger_slope "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_trigger_slope") | Set the trigger edge slope (RISING / FALLING / EITHER). |
| [`set_trigger_source`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_trigger_source "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_trigger_source") | Set the trigger source to analog `channel`. |
| [`set_trigger_type`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_trigger_type "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_trigger_type") | Set the trigger type (EDGE, PULSE, …). |
| [`set_vertical_offset`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_vertical_offset "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_vertical_offset") | Set `channel`'s vertical offset to `offset` (volts). |
| [`set_vertical_scale`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_vertical_scale "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.set_vertical_scale") | Set `channel`'s vertical scale to `volts_per_div` (V/div). |
| [`setup_measurement`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.setup_measurement "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.setup_measurement") | Ensure a measurement slot exists for `measurement_type`/`channel` before the scope triggers. |
| [`single`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.single "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.single") | Arm a single-shot acquisition. |
| [`stop`](https://dev.nominal.io/instro/ref/instruments/instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.md#instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.stop "instro.scope.drivers.siglent_sds1000x_e.SiglentSDS1000XE.stop") | Stop acquisition. |

### open() → None[source]

Open the transport and disable comm headers so query replies are bare values.

### close() → None[source]

Close the underlying transport. Idempotent.

### check_errors() → None[source]

Poll `CMR?` then `EXR?` and raise on the first non-zero code (no error queue on Siglent).

### 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]

Arm a single acquisition then poll `INR?` bit 0 (new signal acquired) until set or `timeout`.

### get_acquisition_state() → AcquisitionState[source]

Read back the acquisition run state (RUNNING / STOPPED).

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

Fetch the full waveform from `channel` over `C{n}:WF? DAT2` (signed 8-bit codes).

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

Query a built-in parameter via `C{n}:PAVA?`; unavailable/sentinel results map 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]

Read back the trigger status (ARMED / READY / TRIGGERED / …).

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

Transfer a screen dump (`SCDP`, a raw BMP) to the host and write it to `filepath`.

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

Save the panel setup to a USB file (`STPN`) or transfer it to the host (`PNSU?`).

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

Recall a panel setup from a USB file (`RCPN`) or push host bytes back (`PNSU`).

The host-side `PNSU` write-back is known to wedge the USBTMC interface on some
SDS1000X-E firmware; prefer `from_instrument=True` (USB stick) over USB connections.

### 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.
