Hardware Protocol Specification: SCPI (Standard Commands for Programmable Instruments) over RS-232¶
Version: SCPI-99 / IEEE 488.2
Physical Layer: 9600 bps, 8N1.0
Framing: delimited
Integrity Algorithm: none
📄 AsyncAPI Artifacts: Download AsyncAPI 2.6.0 YAML | View Interactive AsyncAPI HTML Docs
Description¶
ASCII line-based instrument control (oscilloscopes, PSUs, DMMs). Baud is configured manually on both sides -- no auto-negotiation -- and commonly must match exactly or the instrument just doesn't respond, with no error reported at all. Chains multiple independent commands onto one physical line via ';', which compoundMessageDelimiter exists specifically for.
Command Catalog & Message Signatures¶
Category: SCPI/SYSTEM¶
Identify (Command ID: *IDN?) - *IDN? System identification query.¶
Reset (Command ID: *RST) - *RST System reset command.¶
ClearStatus (Command ID: *CLS) - *CLS Clear status registers.¶
Category: DASHBOARD¶
Identify (Command ID: *IDN?) - *IDN? System identification query.¶
MeasureVoltageDC (Command ID: MEAS:VOLT:DC?) - MEAS:VOLT:DC? Measure DC voltage in Volts.¶
Category: SCPI/MEASURE¶
MeasureVoltageDC (Command ID: MEAS:VOLT:DC?) - MEAS:VOLT:DC? Measure DC voltage in Volts.¶
MeasureCurrentDC (Command ID: MEAS:CURR:DC?) - MEAS:CURR:DC? Measure DC current in Amperes.¶
Category: SCPI/SOURCE¶
SetVoltageOutput (Command ID: SOUR:VOLT) - SOUR:VOLT Set programmable power supply output voltage.¶
| Parameter | Type | Unit | Range / Constraints | Options |
|---|---|---|---|---|
voltage |
float32 |
- | - | - |
Device-Initiated Messages¶
IdentifyResult (Message ID: IdentifyResult) - e.g. 'ACME,MM7,SN12345,FW2.1'¶
| Field Name | Type | Unit |
|---|---|---|
manufacturer |
string |
- |
model |
string |
- |
serial |
string |
- |
firmware |
string |
- |
Formal AsyncAPI 2.6.0 Specification¶
asyncapi: 2.6.0
info:
title: SCPI (Standard Commands for Programmable Instruments) over RS-232
version: SCPI-99 / IEEE 488.2
description: ASCII line-based instrument control (oscilloscopes, PSUs, DMMs). Baud
is configured manually on both sides -- no auto-negotiation -- and commonly must
match exactly or the instrument just doesn't respond, with no error reported at
all. Chains multiple independent commands onto one physical line via ';', which
compoundMessageDelimiter exists specifically for.
servers:
serial_link:
url: serial://tty/9600
protocol: serial
description: Physical UART Transport (9600 bps, 8N1.0)
bindings:
serial:
baudRate: 9600
dataBits: 8
parity: none
stopBits: 1.0
framingType: delimited
integrity: none
channels:
omniuart/cmd/Identify:
publish:
summary: 'Send command Identify (ID: *IDN?)'
description: '*IDN? System identification query.'
message:
name: Identify_Message
title: Identify Command
payload:
$ref: '#/components/schemas/Identify_Request'
omniuart/cmd/Reset:
publish:
summary: 'Send command Reset (ID: *RST)'
description: '*RST System reset command.'
message:
name: Reset_Message
title: Reset Command
payload:
$ref: '#/components/schemas/Reset_Request'
omniuart/cmd/ClearStatus:
publish:
summary: 'Send command ClearStatus (ID: *CLS)'
description: '*CLS Clear status registers.'
message:
name: ClearStatus_Message
title: ClearStatus Command
payload:
$ref: '#/components/schemas/ClearStatus_Request'
omniuart/cmd/MeasureVoltageDC:
publish:
summary: 'Send command MeasureVoltageDC (ID: MEAS:VOLT:DC?)'
description: MEAS:VOLT:DC? Measure DC voltage in Volts.
message:
name: MeasureVoltageDC_Message
title: MeasureVoltageDC Command
payload:
$ref: '#/components/schemas/MeasureVoltageDC_Request'
omniuart/cmd/MeasureCurrentDC:
publish:
summary: 'Send command MeasureCurrentDC (ID: MEAS:CURR:DC?)'
description: MEAS:CURR:DC? Measure DC current in Amperes.
message:
name: MeasureCurrentDC_Message
title: MeasureCurrentDC Command
payload:
$ref: '#/components/schemas/MeasureCurrentDC_Request'
omniuart/cmd/SetVoltageOutput:
publish:
summary: 'Send command SetVoltageOutput (ID: SOUR:VOLT )'
description: SOUR:VOLT <val> Set programmable power supply output voltage.
message:
name: SetVoltageOutput_Message
title: SetVoltageOutput Command
payload:
$ref: '#/components/schemas/SetVoltageOutput_Request'
omniuart/telemetry/IdentifyResult:
subscribe:
summary: 'Unsolicited telemetry message IdentifyResult (ID: IdentifyResult)'
description: e.g. 'ACME,MM7,SN12345,FW2.1'
message:
name: IdentifyResult_Telemetry_Message
title: IdentifyResult Telemetry
payload:
$ref: '#/components/schemas/IdentifyResult_Telemetry'
components:
messages: {}
schemas:
Identify_Request:
type: object
properties:
command_id:
type: integer
const: '*IDN?'
description: Opcode ID for Identify
description: '*IDN? System identification query.'
Reset_Request:
type: object
properties:
command_id:
type: integer
const: '*RST'
description: Opcode ID for Reset
description: '*RST System reset command.'
ClearStatus_Request:
type: object
properties:
command_id:
type: integer
const: '*CLS'
description: Opcode ID for ClearStatus
description: '*CLS Clear status registers.'
MeasureVoltageDC_Request:
type: object
properties:
command_id:
type: integer
const: MEAS:VOLT:DC?
description: Opcode ID for MeasureVoltageDC
description: MEAS:VOLT:DC? Measure DC voltage in Volts.
MeasureCurrentDC_Request:
type: object
properties:
command_id:
type: integer
const: MEAS:CURR:DC?
description: Opcode ID for MeasureCurrentDC
description: MEAS:CURR:DC? Measure DC current in Amperes.
SetVoltageOutput_Request:
type: object
properties:
command_id:
type: integer
const: 'SOUR:VOLT '
description: Opcode ID for SetVoltageOutput
voltage:
type: number
description: SOUR:VOLT <val> Set programmable power supply output voltage.
IdentifyResult_Telemetry:
type: object
properties:
manufacturer:
type: string
model:
type: string
serial:
type: string
firmware:
type: string
description: e.g. 'ACME,MM7,SN12345,FW2.1'