Skip to main content

An easy library for controlling SCPI instruments

Project description


A simple and robust library making communication with SCPI (Standard Control of Programmbale Instruments) instruments easy. After creating an instrument object that connects to an actual instrument, commands are sent to the instrument using a property-like format. This class is very useful for inheritance when creating a controller for a specific instrument.


SCPI Commands

Generic SCPI commands can be executed by transforming the SCPI code in to attributes via the hierarchy relationship, then calling it. Instrument properties can be queried by passing no arguments to the call. Commands with no arguments are run by passing an empty string to the call.


# Connect to an instrument
inst = Instrument( <port> )

# Read the voltage [MEASure:VOLTage:DC?]
# or

# Set the voltage to 1 V [MEASure:VOLTage:DC 1]
inst.measure.voltage.dc( 1 )
# or
inst.source.voltage( '1' )

# Execute a command to take a reading [SYSTem:ZCORrect:ACQuire]
inst.syst.zcor.aqc( '' )


Instrument( <port>, <timeout>, read_terminator = None, write_terminator = None, backend = '' ): Creates an instance of an instrument

connect(): Connects the object instance to the actual instrument on the specified port

disconnect(): Disconnects the instrument from the program, closing the port

write( <msg> ): Sends msg to the instrument

read(): Gets the most recent response from the instrument

query( <msg> ): Sends msg to the instrument and returns its response

reset(): Sets the instrument to its default state

init(): Initializes the instrument for a measurement


port: The communication port

rid: The resource id associated with the instrument [Read Only]

timeout: The communication timeout of the instrument [Read Only]

id: The manufacturer id of the instrument [Read Only]

value: The current value of the instrument [Read Only]

connected: Whether the instrument is connected or not [Read Only]

Full Example

For use with Tektronix PWS4305

#standard imports
import os
import sys

#SCPI imports
import usb
import visa

#instrument controller
import instrument_controller as ic

class PowerSupply( ic.Instrument ):

    def __init__( self, timeout = 10, rid = None ):
        ic.Instrument.__init__( self, None, timeout, '\n', '\n' )
        self.rid = '<default resource id>' if ( rid is None ) else rid

    #--- public methods ---

    def voltage( self ):
        Returns the voltage setting
        return self.source.volt.level()

    def voltage( self, volts ):
        Sets the voltage of the instrument
        self.source.volt.level( volts )

    def current( self ):
        Returns the current setting in Amps
        return self.source.current.level()

    def current( self, amps ):
        Set the current of the instrument
        self.source.current.level( amps )

    def on( self ):
        Turns the output on
        self.output.state( 'on' )

    def off( self):
        Turns the output off
        self.output.state( 'off' )

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for easy-scpi, version 0.0.2
Filename, size File type Python version Upload date Hashes
Filename, size easy_scpi-0.0.2-py3-none-any.whl (14.7 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size easy-scpi-0.0.2.tar.gz (2.7 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page