#instrument #control #visa #api-bindings

visa-rs

Safe rust bindings for VISA(Virtual Instrument Software Architecture) library

11 unstable releases

0.6.2 Aug 2, 2024
0.6.1 Mar 28, 2024
0.5.0 Sep 5, 2023
0.4.0 Sep 27, 2022
0.3.0 Jun 17, 2022

#5 in #instrument

Download history 63/week @ 2024-07-27 52/week @ 2024-08-03 21/week @ 2024-08-10 195/week @ 2024-08-17 20/week @ 2024-08-24 43/week @ 2024-08-31 25/week @ 2024-09-07 69/week @ 2024-09-14 60/week @ 2024-09-21 89/week @ 2024-09-28 160/week @ 2024-10-05 97/week @ 2024-10-12 93/week @ 2024-10-19 39/week @ 2024-10-26 55/week @ 2024-11-02

309 downloads per month
Used in 3 crates (2 directly)

MIT/Apache

205KB
2.5K SLoC

visa-rs

crates.io docs

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(())
}

License: MIT OR Apache-2.0

Dependencies

~2MB
~42K SLoC