| 前言: |
了解什么是PyVISA |
简单来说:PyVISA 让你可以用 Python 代码控制万用表、电源、示波器、频谱仪、信号发生器等硬件设备。
理解 PyVISA 的关键在于区分 PyVISA 和 VISA:
VISA:
VISA 是一个标准,全称是 Virtual Instrument Software Architecture。
它由 IVI 基金会制定,定义了一套用于配置、编程和调试仪器系统的通用 API。
它本身不是软件,而是一个规范。仪器制造商(如 Keysight, Tektronix, NI)根据这个规范实现各自的 VISA 库。
PyVISA:
是 VISA 标准的一个 Python 封装。
它自身不直接与硬件通信。当你使用 PyVISA 的 write()或 query()函数时,PyVISA 会在后台调用你系统上安装的 VISA 库(例如 NI-VISA 或 Keysight IO Libraries Suite)来完成实际的通信。
它为不同的 VISA 后端提供了一个统一的、Pythonic 的接口。
接口无关性:无论是 GPIB、USB、LAN (TCP/IP)、RS-232 还是 PXI 接口的设备,PyVISA 都使用同一套语法(write, read, query)进行控制。你不需要为每种接口学习不同的编程方法。
厂商后端兼容:支持多种 VISA 实现作为后端,如 NI-VISA、Keysight VISA、Rohde & Schwarz VISA 等。
纯 Python:易于安装(pip install pyvisa),跨平台(Windows, Linux, macOS)。
语法简洁直观:符合 Python 的易读风格。
典型的 PyVISA 编程流程如下:
import pyvisa# 1. 创建资源管理器rm = pyvisa.ResourceManager()# 2. 列出所有连接的设备resources = rm.list_resources()print(f"找到的设备: {resources}")# 3. 通过资源地址打开特定设备# 地址格式示例:'GPIB0::15::INSTR'my_device = rm.open_resource('GPIB0::15::INSTR')# 4. (可选)设置通信参数,如超时、终止符my_device.timeout = 5000 # 毫秒my_device.read_termination = '\n' # 设置读取终止符# 5. 与设备通信 (需要了解仪表的SCPI命令)# 写入命令my_device.write("*IDN?") # 发送查询标识符的命令# 或使用 query 同时写入和读取idn_string = my_device.query("*IDN?")print(f"设备标识: {idn_string}")# 6. 关闭连接my_device.close()
ResourceManager: 入口点,用于发现和管理资源。
Resource: 代表一个具体的仪器连接。主要对象,拥有核心方法:
.write(command): 向设备发送命令(不期待回复)。
.read(): 从设备读取数据。
.query(command):先 .write(command),然后立即 .read()。最常用的方法。
.read_raw(): 读取原始字节数据(用于非文本数据,如图像、波形)。
list_resources(): 列出所有可用设备的资源地址字符串。
安装与设置
1. 安装 PyVISA:
pip install pyvisa
2. 安装一个 VISA 后端(必须):
从 National Instruments 官网下载并安装 NI-VISA 运行时库。
或者,如果你只有是德科技的设备,可以从Keysight官网下载安装 Keysight IO Libraries Suite。
了解什么是SCPI |
标准化:
由IVI基金会(Interchangeable Virtual Instruments)维护,旨在实现不同制造商仪器之间的命令兼容性。
使用统一的命令结构和语法,例如 *IDN?命令几乎在所有支持SCPI的仪器上都能用于查询制造商和型号信息。
分层树状结构:
MEASure:VOLTage:DC? 表示“测量直流电压”。
命令像文件系统的路径一样组织。例如:
使用冒号(:)分隔命令层级,使命令具有高度的可读性和逻辑性。
基于ASCII文本:
命令是人类可读的字符串,通常通过GPIB、USB、以太网(如VXI-11或Telnet)、串口(RS-232) 等接口发送。
仪器返回的查询结果通常也是文本格式(数字或字符串),易于解析。
可查询性:
大多数设置命令都有一个对应的查询形式(通常在命令后加问号?)。
例如,SOURce:VOLTage:LEVel?用于查询当前设置的电压,而SOURce:VOLTage:LEVel 10用于设置电压。
每个可远程控制的仪器都有一组记录的 SCPI 命令,允许用户使用编程接口而不是使用前面板控件或图形用户界面来控制仪器。在某些情况下,仪器的 SCPI 命令集包含在其用户手册中,但制造商通常会提供独立的程序员手册,其中记录了所有可用的命令。每个支持 SCPI 的仪器都提供一些标准命令,包括 *RST(重置/默认设置)、*ESR? (检查错误状态寄存器),*OPC? (操作完成查询)、*CLS(清除状态寄存器)和*IDN? (身份查询),但大多数命令是仪器特定的,我们也可以称之为FLEX Command。
| FLEX Command | SCPI Command | |
|---|---|---|
| 标准性质 | ||
| 设计目标 | 极致速度 | 通用性 |
| 控制层级 | ||
| 性能表现 | ||
| 命令复杂度 | ||
| 兼容性 | ||
| 典型应用 |
03
ICCAP中如何编写仪表驱动 |





04
总结 |
[1] IC-CAP Manual.
[2]《PyVISA Documentation》.
[3] scpi-99. 见于: 2025年12月29日. [在线]. 载于: https://www.ivifoundation.org/downloads/SCPI/scpi-99.pdf