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 sequenceget_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 overrideget_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 setLOAD,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()andcapture_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, ...)raisesValueError - 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
Related packages
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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.