On this page 9 sections
SCPI and VISA instruments as ScpiDriver command maps
Generated by MHS/registry/build_registry.py on 2026-10-20T00:00:00Z from 125 registry records and their task cards. A plan, not a conformance claim.
- bridge_status:
available - helper:
ScpiDriver - exemplar:
MHS/drivers/labs/thinksrs__srsinst.sr860
Launch
Every driver package starts the same way; per-repo configuration (environment id, model path, port, baud rate, VISA resource) lives in the package's driver.py, never in launch flags:
mhs serve <driver-dir>A package is done when python3 -m mhs.driver check <driver-dir> --backend fake exits 0 (evidence contract_checked; a fake never yields an MHS-Device level).
Registry coverage
- Repos: 125
- Decisions: bridge-runtime 10, direct-driver 16, family-config 31, reference 21, skip 47
- Waves: 0: 1, 1: 10, 2: 2, 3: 31, 6: 3, 9: 78
- Dispatchable now: 0
- Modes: hardware 57, replay 1, simulated 16
Applicability
The repo imports pyvisa, vxi11, usbtmc or pymeasure and is not a driver pack: triage rule 9, family:scpi. Exemplar: thinksrs/srsinst.sr860.
Capability mapping
| native call | OpenMHS target | notes |
|---|---|---|
*IDN? | connect-time identity probe (idn.expect) | not a capability; identity is published by mhs.devices.get |
measurement query (for example MEAS:VOLT?) | reads: cap.measure.voltage.v1 or the measure class that fits | parse to a number; the unit comes from the manual |
setting (for example FREQ <value>) | writes: cap.device.configure.v1 | limits cite the manual or the upstream code |
*RST, INIT, ABOR | lifecycle, or an action with a catalogue class | never a configure write |
SYST:ERR? | error_query mapped to DriverFailed codes | |
| output off / abort | safety_bindings: e-stop and safe state |
Class ids come from python3 -m mhs.driver catalog search <words>. The deprecated classes cap.device.describe.v1, cap.world.state.v1, cap.world.snapshot.v1 and cap.world.restore.v1 are replaced by the protocol methods mhs.devices.get, mhs.resource.read, mhs.snapshot and mhs.restore.
Safety
The risk floor of a device is the highest catalogue risk_class of its classes (CAP-017); a driver may declare a higher risk, never a lower one. Hardware at R1 or above needs an @estop and a non-empty safe state. Sources, heaters, lasers and high-voltage supplies are common. Limits come from the instrument manual or the upstream code, never from the SCPI command name.
Fidelity
A transcript or a pyvisa-sim device file checks the command map; it cannot validate a measurement.
Pitfalls
SCPI carries no units; drain the error queue; one instrument per session; VISA backends differ (pyvisa-py versus a vendor VISA).
First task cards
gh.thinksrs/srsinst.sr860: family-config, wave 0, rank 2,MHS/registry/tasks/labs/thinksrs__srsinst.sr860.jsongh.python-ivi/python-ivi: family-config, wave 1, rank 8,MHS/registry/tasks/labs/python-ivi__python-ivi.jsongh.mclim9/rssd: family-config, wave 1, rank 13,MHS/registry/tasks/labs/mclim9__rssd.jsongh.asvela/keyoscacquire: family-config, wave 1, rank 17,MHS/registry/tasks/labs/asvela__keyoscacquire.jsongh.mba2d/test_equipment_control: family-config, wave 1, rank 19,MHS/registry/tasks/labs/mba2d__test_equipment_control.json
Sources
- Task cards:
MHS/registry/tasks/<track>/<owner>__<repo>.json(schema/taskcard.schema.json). - Triage rules and the helper table:
MHS/registry/triage.py; curated decisions:MHS/registry/overrides/. - Driver API and gate:
MHS/sdk/docs/driver-authoring.md; exemplars:MHS/drivers/.
Packages
Top 24 of 125 by stars. Filter the full list.
| Package | Tier | Ring | Evidence | Stars |
|---|---|---|---|---|
| pyvisa/pyvisa pyvisa/pyvisa: device backend; protocol implementation/bridge for general test measurement instrument communication (lab | Tier B | 3 | agent read | 965 |
| pyscada/pyscada pyscada/pyscada: control framework for general (lab instrumentation track). OpenMHS plan: reference only (host). Declare | Tier D | 3 | static scan | 654 |
| lxi-tools/lxi-tools lxi-tools/lxi-tools: protocol implementation/bridge for electronic measurement (lab instrumentation track). OpenMHS plan | Tier D | 3 | static scan | 624 |
| j123b567/scpi-parser j123b567/scpi-parser: protocol implementation/bridge for electronic measurement (lab instrumentation track). OpenMHS pla | Tier D | 3 | static scan | 598 |
| pyvisa/pyvisa-py pyvisa/pyvisa-py: protocol implementation/bridge for electronic measurement (lab instrumentation track). OpenMHS plan: S | Tier B | 3 | static scan | 360 |
| python-ivi/python-ivi python-ivi/python-ivi: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: family-confi | Tier B | 1 | contract checked | 237 |
| cnxy/visainstrument cnxy/visainstrument: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: not integrated | Tier D | 3 | static scan | 223 |
| abduznik/instrumation abduznik/instrumation: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: direct-drive | Tier B | 1 | contract checked | 97 |
| pyvisa/pyvisa-sim pyvisa/pyvisa-sim: electronic instrument protocol simulation for microscopy imaging; optics; electronic measurement and | Tier A | 3 | agent read | 95 |
| jana-marie/temperature-logger jana-marie/temperature-logger: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: not | Tier D | 3 | static scan | 68 |
| morgendagen/riden-dongle morgendagen/riden-dongle: protocol implementation/bridge for electronic measurement (lab instrumentation track). OpenMHS | Tier D | 3 | static scan | 56 |
| lachlangunn/oic lachlangunn/oic: protocol implementation/bridge for electronic measurement (lab instrumentation track). OpenMHS plan: fa | Tier B | 1 | contract checked | 55 |
| mclim9/rssd mclim9/rssd: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: family-config with Scp | Tier B | 1 | contract checked | 51 |
| atmelfan/scpi-rs atmelfan/scpi-rs: protocol implementation/bridge for electronic measurement (lab instrumentation track). OpenMHS plan: n | Tier D | 3 | static scan | 49 |
| bluehands/open-scpi-protocol-emulator bluehands/open-scpi-protocol-emulator: device backend for electronic measurement (lab instrumentation track). OpenMHS pl | Tier D | 3 | static scan | 45 |
| oe-fet/jisa oe-fet/jisa: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: not integrated (overri | Tier D | 3 | static scan | 35 |
| tiagocoutinho/sinstruments tiagocoutinho/sinstruments: repository for microscopy imaging; optics; electronic measurement and DAQ (lab instrumentati | Tier B | 3 | static scan | 34 |
| asvela/keyoscacquire asvela/keyoscacquire: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: family-config | Tier B | 1 | contract checked | 30 |
| markding/gpib-pyvisa markding/gpib-pyvisa: auxiliary tooling for electronic measurement (lab instrumentation track). OpenMHS plan: not integr | Tier D | 3 | static scan | 29 |
| microsoft/pyvisa-mock microsoft/pyvisa-mock: protocol implementation/bridge for electronic measurement (lab instrumentation track). OpenMHS pl | Tier A | 3 | static scan | 26 |
| usnistgov/labbench usnistgov/labbench: device backend; control framework (lab instrumentation track). OpenMHS plan: not integrated (skip:to | Tier D | 3 | static scan | 25 |
| isiscomputinggroup/lewis isiscomputinggroup/lewis: repository for shared access and protocol infrastructure (lab instrumentation track). OpenMHS | Tier A | 3 | static scan | 24 |
| mba2d/test_equipment_control mba2d/test_equipment_control: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: famil | Tier B | 1 | contract checked | 24 |
| asvela/tektronix-func-gen asvela/tektronix-func-gen: device backend for electronic measurement (lab instrumentation track). OpenMHS plan: direct-d | Tier B | 1 | contract checked | 21 |