12 releases (6 breaking)
| new 0.7.0-alpha.1 | Feb 1, 2026 |
|---|---|
| 0.6.2 | Aug 2, 2024 |
| 0.6.1 | Mar 28, 2024 |
| 0.5.0 | Sep 5, 2023 |
| 0.3.0 | Jun 17, 2022 |
#191 in Hardware support
247 downloads per month
Used in 3 crates
(2 directly)
220KB
3K
SLoC
visa-rs
Safe Rust bindings for VISA(Virtual Instrument Software Architecture) library
Most documentation comes from NI-VISA Product Documentation
Requirements
This crate needs to link to an installed visa library, for example, NI-VISA.
A default link configuration is used for the default installation setup on Windows, Linux and MacOs.
You can overwrite the configuration by specifying the name of the visa library file (default to visa for linux, visa64 or visa32 for windows) by environment variable LIB_VISA_NAME, and the path of the file by environment variable LIB_VISA_PATH.
Example
Codes below will find the first Keysight instrument in your environment and print out its *IDN? response.
fn find_an_instr() -> visa_rs::Result<()>{
use std::ffi::CString;
use std::io::{BufRead, BufReader, Read, Write};
use visa_rs::prelude::*;
// open default resource manager
let rm: DefaultRM = DefaultRM::new()?;
// expression to match resource name
let expr = CString::new("?*KEYSIGH?*INSTR").unwrap().into();
// find the first resource matched
let rsc = rm.find_res(&expr)?;
// open a session to the resource, the session will be closed when rm is dropped
let instr: Instrument = rm.open(&rsc, AccessMode::NO_LOCK, TIMEOUT_IMMEDIATE)?;
// write message
(&instr).write_all(b"*IDN?\n").map_err(io_to_vs_err)?;
// read response
let mut buf_reader = BufReader::new(&instr);
let mut buf = String::new();
buf_reader.read_line(&mut buf).map_err(io_to_vs_err)?;
eprintln!("{}", buf);
Ok(())
}
Tokio Feature
Enable tokio to use the async adapter that implements tokio::io::AsyncRead and
tokio::io::AsyncWrite for VISA sessions.
[dependencies]
visa-rs = { version = "0.7.0-alpha.1", features = ["tokio"] }
This exposes InstrumentTokioAdapter, which wraps AsyncInstrument and provides
Tokio-compatible I/O traits.
Cross-compilation support
Due to some repr of enum depending on the target architecture, there is a explicit feature cross-compile. Check FEATURES.md for more details.
Feedback (Alpha)
This is an alpha release. If you run into issues, please share your runtime feedback and device/driver environment to help improve the next release.
License: MIT OR Apache-2.0
Dependencies
~3.5–5.5MB
~89K SLoC