Standard Commands for Programmable Instruments
The Standard Commands for Programmable Instruments (SCPI; often pronounced "skippy") defines a standard for syntax and commands to use in controlling programmable test and measurement devices.
In 1990, SCPI was defined as an additional layer on top of the (IEEE 488.2) specification ("Standard Codes, Formats, Protocols, and Common Commands"). The standard specifies a common syntax, command structure, and data formats, to be used with all instruments. It introduced generic commands (such as
MEASure) that could be used with any instrument. These commands are grouped into subsystems. SCPI also defines several classes of instruments. For example, any controllable power supply would implement the same
DCPSUPPLY base functionality class. Instrument classes specify which subsystems they implement, as well as any instrument-specific features.
SCPI commands are ASCII textual strings, which are sent to the instrument over the physical layer (e.g., IEEE-488). Commands are a series of one or more keywords, many of which take parameters. In the specification, keywords are written
CONFigure: The entire keyword can be used, or it can be abbreviated to just the uppercase portion. Responses to query commands are typically ASCII strings. However, for bulk data, binary formats can be used.
SCPI commands to an instrument may either perform a set operation (e.g. switching a power supply on) or a query operation (e.g. reading a voltage). Queries are issued to an instrument by appending a question-mark to the end of a command. Some commands can be used for both setting and querying an instrument. For example, the data-acquisition mode of an instrument could be set by using the
ACQuire:MODe command or it could be queried by using the
ACQuire:MODe? command. Some commands can both set and query an instrument at once. For example, the
*CAL? command runs a self-calibration routine on some equipment, and then returns the results of the calibration.
Similar commands are grouped into a hierarchy or "tree" structure. For example, any instruction to read a measurement from an instrument will begin with "
MEASure". Specific sub-commands within the hierarchy are nested with a colon (
:) character. For example, the command to "Measure a DC voltage" would take the form
MEASure:VOLTage:DC?, and the command to "Measure an AC current" would take the form
:MEASure :VOLTage :DC? :AC? :CURRent :DC? :AC? ...
Some commands require an additional argument. Arguments are given after the command, and are separated by a space. For example, the command to set the trigger mode of an instrument to "normal" may be given as "
TRIGger:MODe NORMal". Here, the word "
NORMal" is used as the argument to the "
Multiple commands can be issued to an instrument in a single string. They are made of simple commands separated by a semicolon character (
;). For example, the command to "Measure a DC voltage then measure an AC current" would be issued as
Simple commands which start with a colon (
:) are interpreted with respect to the root of the command tree. Otherwise, they refer implicitely to the last node of the previous command (unless they already begin with an asterisk). For example
:SOURce:FREQuency:STARt 100;STOP 200
is a shorthand for the message
:SOURce:FREQuency:STARt 100;:SOURce:FREQuency:STOP 200
The command syntax shows some characters in a mixture of upper and lower case. Abbreviating the command to only sending the upper case has the same meaning as sending the upper and lower case command.
For example, the command “
SYSTem:COMMunicate:SERial:BAUD 2400” would set an RS-232 serial communications interface to 2400 bit/s. This could also alternatively be abbreviated “
SYST:COMM:SER:BAUD 2400”. The query command “
SYSTem:COMMunicate:SERial:BAUD?” or “
SYST:COMM:SER:BAUD?” would instruct the instrument to report its current baud rate.
First released in 1990, SCPI originated as an additional layer for IEEE-488. IEEE-488.1 specified the physical and electrical bus, and IEEE-488.2 specified protocol and data format, but neither specified instrument commands. Different manufacturers, and even different models, of the same type of instrument would use different command sets. SCPI created a standard which could be common across all manufacturers and models. It requires use of the IEEE-488.2 data formats, but does not mandate the IEEE-488.1 bus.
In 2002-2003, the SCPI Consortium voted to become part of the IVI Foundation (Interchangeable Virtual Instruments).