PyVISA 是一个 Python 软件包,可用来控制各种测量设备,而不受接口(如 GPIB、RS232、USB、以太网)的限制。例如,从 GPIB 编号为 12 的 Keithley 万用表读取IDN信息只需三行 Python 代码:
import pyvisa
rm = pyvisa.ResourceManager()
rm.list_resources()
('ASRL1::INSTR', 'ASRL2::INSTR', 'GPIB0::12::INSTR')
inst = rm.open_resource('GPIB0::12::INSTR')
print(inst.query("*IDN?"))
(这就是整个程序,really!)它可在 Windows、Linux 和 Mac 上运行,并可使用任意适配器(如 National Instruments、Agilent、Tektronix、Stanford Research Systems)。
PyVISA
PyVISA 是VISA 库的前端。它可在 Python 3.6+ 上运行。VISA 的全称是虚拟仪器软件架构 (Virtual Instrument Software Architecture)。VISA 是一种标准,用于配置、编程和故障诊断包含 GPIB、VXI、PXI、串行、以太网和/或 USB 接口的仪器系统。PyVISA 可以通过pip命令安装。
$ pip install -U pyvisa
VISA Specification 与 Visual Basic、C 和 G(LabVIEW 的图形语言)有明确的绑定。Python 可用于调用 VISA 共享库(.dll、.so、.dylib)中的函数,从而直接运用标准实现。此外,Python 还可用于直接访问仪器使用的大多数总线系统,因此可以设想直接在 Python 中实现 VISA 标准(参见 PyVISA-Py 项目)。
需要注意的是 PyVISA 既是 VISA 共享库的 Python 封装器(wrapper),也可作为其他 VISA 实现的前端,如 PyVISA-Py。
PyVISA Backend
PyVISA 后端是实现 PyVISA 与仪器之间通信协议的模块。PyVISA 包含一个封装了NI公司 VISA 库的后台。不过,需要自行下载并安装该库(参见 NI-VISA 安装)。不同供应商有多种 VISA 实现。PyVISA 针对NI VISA 和 Keysight IO 库套件进行了测试,这两种库都可以免费下载(不需要开发环境,只需要驱动库)。
PyVISA 适用于 32 位和 64 位 Python,无需额外配置即可处理 32 位和 64 位 VISA 库。但是需要确保 Python 和 VISA 库的位数相同。
一个例子是PyVISA-py, 它是一个纯 Python 后端,使用跨平台库进行串行/USB/GPIB/以太网通信。如下使用 pip 进行安装。
$ pip install -U pyvisa-py
通过 添加 @py 到VISA资源管理器,运行代码如下:
import pyvisa
rm = pyvisa.ResourceManager('@py')
但目前,PyVISA-Py 只实现了 VISA 标准的有限子集,并不支持所有总线系统上的所有协议。
测试 PyVISA 安装成否
可以启动 python 并创建一个 ResourceManager 来检查 PyVISA 是否已正确安装:
import pyvisa
rm = pyvisa.ResourceManager()
print(rm.list_resources())
您可以直接从 GitHub 安装最新的开发版本(风险自担):
$ pip install -U git+https://github.com/pyvisa/pyvisa.git
配置 Backend
目前有两个Backends可用: pyvisa 包含的Backend,其使用 IVI 库(包括 NI-VISA、Keysight VISA、R&S VISA、tekVISA 等)和 pyvisa-py 提供的Backend(它通过VISA 库的纯 python 实现)。如果没有指定Backend,pyvisa 会在安装了 IVI 库的情况下使用 IVI 后端。如果没有,则使用 pyvisa-py 后端。
可以通过向 ResourceManager 传递参数来选择所需的Backend,如添加 @py 到VISA资源管理器可选择到pyvisa-py 后端。也可以通过设置环境变量 PYVISA_LIBRARY 来选择。它的取值与 ResourceManager 构造函数相同。
配置 IVI backend
IVI 后端要求首先安装 IVI-VISA 库。例如,可以使用 NI-VISA 或合适的其他库。在多数情况下,PyVISA 能够找到共享VISA库的位置。如果不行,或想用另一个库,则要在ResourceManager 构造函数提供库路径:
rm = ResourceManager('Path to library')