1. SCPI基础命令与高速接口仪器握手

SCPI基础命令与高速接口仪器握手 学习卡片

任务说明

本案例目标是通过pyvisa库连接一台基于VISA协议的仪器(如数字万用表、示波器或信号源),并读取仪器的识别信息(IDN响应),以验证通信链路是否正常。你将学习如何列出可用资源、打开会话、发送SCPI命令并解析返回结果。

实现方案

使用pyvisa库的ResourceManager枚举系统VISA资源,通过open_resource()建立会话,发送标准SCPI识别命令*IDN?并读取响应。代码兼容Windows(NI-VISA或Keysight VISA)与Linux(linux-gpib或ivi)后端,若未安装VISA后端会给出明确提示。

代码实现

import pyvisa

def list_instruments():
    """列出所有可用的VISA资源地址"""
    rm = pyvisa.ResourceManager()
    resources = rm.list_resources()
    if not resources:
        print("未检测到任何VISA仪器资源")
        return []
    print("检测到以下VISA资源:")
    for idx, res in enumerate(resources):
        print(f"  [{idx}] {res}")
    return resources

def query_idn(resource_address):
    """连接指定仪器并读取*IDN?响应"""
    rm = pyvisa.ResourceManager()
    try:
        instr = rm.open_resource(resource_address)
        # 设置超时(毫秒),避免无限等待
        instr.timeout = 3000
        # 发送*IDN?并读取响应
        idn_response = instr.query("*IDN?")
        # 清理返回字符串中的换行与回车
        idn_response = idn_response.strip()
        print(f"仪器识别信息: {idn_response}")
        instr.close()
        return idn_response
    except pyvisa.Error as e:
        print(f"连接或通信失败: {e}")
        return None
    finally:
        rm.close()

if __name__ == "__main__":
    # 第一步:列出资源
    available = list_instruments()
    if not available:
        print("请检查:")
        print("  1. 仪器已开机并通过USB/GPIB/LAN连接")
        print("  2. 已安装VISA后端(NI-VISA / Keysight VISA / linux-gpib)")
        print("  3. 使用 pip install pyvisa 安装库")
    else:
        # 第二步:默认连接第一个资源,也可手动指定地址
        target = available[0]
        print(f"\n正在连接: {target}")
        query_idn(target)

运行与验证

依赖安装:

pip install pyvisa

同时需安装VISA后端运行时(NI-VISA或Keysight VISA),否则ResourceManager()会抛出异常。

执行方式:

python visa_idn.py

验证判定标准:

  • 程序能列出至少一个VISA资源地址(如USB0::0x1AB1::0x0588::DS1ZA123456::INSTR);
  • 连接后输出以制造商、型号、序列号、固件版本组成的字符串,例如Keysight Technologies,DSOX1102G,CN12345678,02.43;
  • 若仪器不支持*IDN?(极少数老型号),会返回错误信息,此时可改用*IDN或查阅仪器手册确认识别命令。
pyvisa仪器识别流程 Python脚本 ResourceManager() list_resources() open_resource() query("*IDN?") close() VISA后端 NI-VISA / Keysight USB / GPIB / LAN 协议转换 会话管理 SCPI仪器 接收 *IDN? 解析命令 返回识别字符串 制造商,型号,序列号,版本 VISA API SCPI命令 IDN响应返回 验证要点:资源枚举成功 → 会话打开无异常 → *IDN?返回非空字符串 → 格式为"厂商,型号,序列号,固件版本"

常见问题排查

  • ResourceManager创建失败:未安装VISA后端,需安装NI-VISA或Keysight VISA并重启;
  • list_resources()为空:检查仪器驱动是否安装、USB线缆是否识别为VISA设备(Windows设备管理器查看是否有VISA USB设备);
  • open_resource超时:确认仪器IP地址/GPIB地址正确,或尝试更换USB端口;
  • query返回空:部分仪器需先发送*CLS清除状态,或增加instr.read_termination = '\n'设置终止符。