Skip to content
Ralf Steinert edited this page Nov 1, 2026 · 3 revisions

scpi-sim simulates SCPI lab instruments — power supplies, multimeters, relay multiplexers and oscilloscopes — as network servers. Your test scripts talk to them exactly as they would talk to the real instruments on the bench: over a raw TCP socket (port 5025), VXI-11 or HiSLIP. Fifteen profiles make them answer like real models from Rohde & Schwarz, Keysight, Keithley, Siglent, Rigol and Tektronix.

The browser demo: a simulated HMP4040 power supply wired to a DAQ970A, with a SCPI terminal

Try it without installing anything: https://scpi-sim.steitec.net runs the real simulator in your browser — see Browser demo.

What it is for

  • Developing test software before the hardware is there — or while it is busy on someone else's bench.
  • Running instrument code in CI. A simulated bench starts in milliseconds, in a pytest fixture or as a Docker service container.
  • Testing the unhappy paths. Timeouts, dropped connections, wrong identities, drifting readings and error codes can be switched on at runtime — things that are hard to provoke with real instruments.

Where to start

If you want to … read
see it working in two minutes Browser demo
install it and talk to a first instrument Getting started
capture waveforms, from five real scope dialects Oscilloscope
run a script written for TCPIP::host::INSTR or hislip0 VXI-11 and HiSLIP
use it in pytest and CI pipelines Testing in CI
check that your code copes with broken instruments Fault injection recipes
find out why something does not answer Troubleshooting

The README is the complete reference: every command of the generic instruments, the profiles, bench files, your own devices under test, the Python API. This wiki adds walkthroughs and background.

At a glance

Install pip install scpi-sim (Python 3.10+, only dependency PyYAML) or docker run ghcr.io/steitec/scpi-sim
Transports raw TCP socket per instrument, VXI-11 (with port mapper), HiSLIP 1.0
Instruments generic psu, dmm, mux, scope; profiles rs-hmp4040, rs-nge103b, keysight-e36312a, siglent-spd3303x, rs-hmc8012, keysight-34461a, keithley-dmm6500, siglent-sdm3065x, keysight-daq970a, keithley-daq6510, keysight-dsox2024a, rigol-ds1054z, tektronix-tbs2104b, rs-rtb2004, siglent-sds1104x-e
Benches YAML file: instruments, loads, wiring, your own Python devices
Faults no_response, delay, disconnect, error, idn, offset, noise, no_trigger, signal
Tested on Linux, Windows, macOS; Python 3.10 and 3.13
License MIT

The profiles follow the manufacturers' public programming manuals and are not verified on real hardware. If you own one of these instruments and something answers differently, please open an issue.

Clone this wiki locally