Skip to main content

rf-bench-drivers-siglent

Siglent instrument drivers for bench automation, part of the rf-bench-drivers family.

Provides SCPI-over-raw-TCP drivers for five Siglent bench instruments. No pyvisa or NI-VISA required — all instruments connect via a plain TCP socket to port 5025.

Instruments

Driver class Instrument Default IP Key capabilities
SSA3000X SSA3032X Plus spectrum analyzer 10.1.1.60 9 kHz–3.2 GHz sweep, tracking generator, trace readback, RBW auto-select
SDG1000X SDG1062X function generator 10.1.1.55 2-channel, 60 MHz, sine/square/ramp, dBm-level API (50 Ω), EasyWave protocol
SDS2000X SDS2354X Plus oscilloscope 10.1.1.58 Waveform capture, FFT-ready audio acquisition, PAVA measurements, built-in AWG, MSO digital channels (D0–D15)
SDM3000X SDM3045X bench multimeter 10.1.1.63 DC/AC V/I, 2W/4W resistance, frequency, continuity, diode, multi-sample acquisition
SPD3303X SPD3303X-E triple-output PSU 10.1.1.56 CH1/CH2: 0–32 V / 0–3.2 A CC/CV; CH3: fixed 2.5/3.3/5 V; series/parallel tracking

All connect via raw TCP/SCPI to port 5025. No pyvisa, no NI-VISA, no GPIB required. Configure the static IP on each instrument via its front-panel Utility → LAN menu.

Installation

pip install rf-bench-drivers-siglent

This automatically installs rf-bench-drivers-utils (RF math functions used internally by the SSA and SDG drivers).

Quick start

from rf_bench.siglent import SSA3000X, SDG1000X, SDS2000X, SDM3000X, SPD3303X

# Spectrum analyzer
ssa = SSA3000X("10.1.1.60")
ssa.enable_tracking_generator(tg_level_dbm=0)
ssa.setup_band(7_000_000, 7_300_000, points=1001)
ssa.single_sweep()
trace = ssa.get_trace()   # numpy array of dBm values
ssa.close()

# Function generator
sdg = SDG1000X("10.1.1.55")
sdg.set_sine(1, freq_hz=14_001_000, level_dbm=-20)
sdg.output_on(1)
sdg.output_off_all()
sdg.close()

# Oscilloscope
scope = SDS2000X("10.1.1.58")
voltages, sample_rate_hz = scope.capture_audio(channel=1, duration_s=2.0)
scope.close()

# Multimeter
dmm = SDM3000X("10.1.1.63")
v = dmm.measure_vdc()
r = dmm.measure_resistance()
dmm.close()

# Power supply
psu = SPD3303X("10.1.1.56")
psu.set_voltage(1, 5.0)
psu.set_current(1, 0.5)
psu.enable(1)
v = psu.measure_voltage(1)
psu.disable_all()
psu.close()

Context managers are supported on all drivers:

with SSA3000X("10.1.1.60") as ssa:
    ssa.setup_band(144_000_000, 148_000_000)
    ssa.single_sweep()
    trace = ssa.get_trace()

Driver notes

SSA3000X — spectrum analyzer

  • Model tested: Siglent SSA3032X Plus (9 kHz to 3.2 GHz)
  • setup_band() auto-selects RBW using the Siglent 1-3-10 step sequence
  • get_trace() handles both ASCII CSV and IEEE 488.2 binary block response formats
  • Firmware quirk: some versions use :TRACE1:DATA? instead of :TRAC:DATA? TRC1 — subclass and override get_trace() if the trace comes back empty

SDG1000X — function generator

  • Model tested: Siglent SDG1062X (2-channel, 60 MHz)
  • Uses Siglent EasyWave protocol (C1:BSWV / C2:BSWV), not standard IEEE SCPI
  • All public methods use dBm (into 50 Ω) for levels; Vpp conversion is internal
  • Always call output_on() to set LOAD,50 — some firmware ignores the BSWV LOAD field

SDS2000X — oscilloscope

  • Model tested: Siglent SDS2354X Plus (500 MHz, firmware 5.4.x)
  • capture_audio() handles the 5.4.x firmware bug where it returns 1000 display-buffer samples instead of deep memory — automatically retries once
  • Waveform preamble (:WAVeform:PREamble?) returns a 346-byte binary WAVEDESC block, not ASCII
  • MSO digital channels (D0–D15) via capture_digital() and capture_all_digital() — requires MSO hardware probe pod; not yet physically tested
  • Built-in AWG available via set_awg_sine(), set_awg_square(), set_awg_ramp(), set_awg_dc()

SDM3000X — bench multimeter

  • Model tested: Siglent SDM3045X (4.5-digit)
  • Capacitance and temperature measurement require SDM3055 or SDM3065X
  • Use configure_*() + read_multiple() for efficient multi-sample acquisition

SPD3303X — power supply

  • Model tested: Siglent SPD3303X-E
  • CH3 voltage is hardware-fixed (2.5 V / 3.3 V / 5 V front-panel switch); set_voltage(3, ...) raises ValueError
  • CH1+CH2 tracking modes: TRACKING_INDEPENDENT, TRACKING_SERIES (up to 64 V), TRACKING_PARALLEL (up to 6.4 A)

Dependencies

  • numpy — used by SSA3000X for trace data and SDS2000X for waveform data
  • rf-bench-drivers-utils — RF math (dBm/Vpp conversion, RBW selection) used internally by SSA3000X and SDG1000X

This package is part of the rf-bench-drivers family:

  • rf-bench-drivers-siglent — this package (Siglent instrument drivers)
  • rf-bench-drivers-utils — RF math utilities (required dependency)
  • rf-bench-drivers-icom — Icom radio drivers (IC-7300 via Hamlib rigctld)
  • rf-bench-drivers-yaesu — Yaesu radio drivers (FT-891 via Hamlib rigctld)

All four packages share the rf_bench.* namespace and can be installed independently or together.

License

GPL-3.0-or-later

Metadata

Release files for rf-bench-drivers-siglent 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rf-bench-drivers-siglent 0.1.0
File Size Uploaded Provenance Actions
rf_bench_drivers_siglent-0.1.0.tar.gz 39.7 kB Without provenance Details for rf_bench_drivers_siglent-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for rf-bench-drivers-siglent 0.1.0
File Interpreter ABI Platform Actions
rf_bench_drivers_siglent-0.1.0-py3-none-any.whl Python 3 none any Details for rf_bench_drivers_siglent-0.1.0-py3-none-any.whl

Total release size: 81.0 kB

Release files / rf_bench_drivers_siglent-0.1.0.tar.gz

Download URL rf_bench_drivers_siglent-0.1.0.tar.gz
Size 39.7 kB
Tags Source
SHA-256 checksum
How to use checksums
c40afd8c816b5cad1a8ce7bc76cabaa91e215ead77502b724e10b8d309b1d3ae
BLAKE2b-256 checksum
How to use checksums
fdc2f722d4495a0fc6c43d86df1827d76febb4f01c415c4b5c27dacb0ac138d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release files / rf_bench_drivers_siglent-0.1.0-py3-none-any.whl

Download URL rf_bench_drivers_siglent-0.1.0-py3-none-any.whl
Size 41.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bf3ad84f813d7bf944f808befbbedeb907728694c825ab3e672036e44cc26840
BLAKE2b-256 checksum
How to use checksums
3ff5747b964b0fee2a7e6f5672e2607ca09ade155eb0b607ca1947bf5239dd55
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Security for rf-bench-drivers-siglent 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page