当前位置: 首页 > news >正文

如何用 PyVISA 让 Python 自动操控 GPIB / USB / TCP/IP 测量仪器

如何用 PyVISA 让 Python 自动操控 GPIB / USB / TCP/IP 测量仪器

【免费下载链接】pyvisaA Python package with bindings to the "Virtual Instrument Software Architecture" VISA library, in order to control measurement devices and test equipment via GPIB, RS232, or USB.项目地址: https://gitcode.com/gh_mirrors/py/pyvisa

桌上摆着一台示波器、一台电源,你希望它们自己吐数据,而不是手动抄读数。VISA(虚拟仪器软件架构)是仪器通信的行业标准,GPIB、串口、USB、网口这些接口各有各的脾气。PyVISA 把 VISA 标准封装成一套 Python API:装好之后,一段代码就能同时驾驭不同接口、不同厂商的仪器,不需要硬件厂商驱动也能跑起来。

🔌 PyVISA 安装步骤:一条 pip 命令 + 选对后端

pip install pyvisa

PyVISA 本身只是一层壳,真正干活的是后端——底层驱动的实现包。选哪个,看你的机器现在有什么:

后端什么时候选它安装方式
ivi(NI-VISA)系统装了 VISA 驱动套件,功能最全、最稳无需额外安装,装好驱动即默认启用
py(pyvisa-py)没有任何驱动,想要跨平台的纯 Python 实现pip install pyvisa-py
serial(PySerial)只玩 RS232 串口,要一个轻量方案pip install pyserial

拿不准就先装pyvisa-py,后面可以无感切换。

📡 3 行代码列出全部设备,跑通第一次 *IDN? 查询

打开仪器前,先确认机器能看到它。*IDN?是 SCPI 里的身份命令,应答里带着厂商、型号、序列号,是验证连接最省事的一招:

import visa rm = visa.ResourceManager() # 创建资源管理器,自动挑默认后端 for name in rm.list_resources(): # 枚举全部可见仪器 box = rm.open_resource(name) # 打开其中一台 print(box.query("*IDN?")) # 身份查询 box.close()

列表为空别急着怀疑代码,先查线缆和驱动,后面有一节专门排这个错。

⚡ 读测量值、下指令:PyVISA 最常用的 3 个方法

读数值。思路:query()一次完成"发命令 + 等应答";返回的字符串想直接变数字,就用query_ascii_values一步转成数值列表,省掉手动 split:

meter.timeout = 2000 # 读数慢的设备,把等待从默认 5 秒放宽 sample = meter.query_ascii_values("MEAS:VOLT:DC?") # "3.291,3.294" -> [3.291, 3.294]

下指令。write()是单向发送,不需要应答;参数格式务必照手册抄,单位符号一个都别少:

gen.write("FREQ 10e6") # 让信号源输出 10 MHz

⏳ PyVISA 异步读取:长任务别把进程卡死

耗时几十秒的批量读数,同步调用会把整个程序挂起。思路:用read_asynchronously()把读取放到后台 job,主循环隔一会儿查一次缓冲区,非空即可取数:

meter.query("MEAS:VOLT:DC?") # 先发起测量 buf = meter.read_asynchronously() # 后台开始读,立即返回 while buf is None: # 轮询 job 状态 buf = meter.read_asynchronously() values = buf[:] # 拿到字节后转成数值

需要事件驱动而不是轮询时,再看wait_on_event(),那是进阶话题。

生态怎么搭:PyVISA 只管搬数据

PyVISA 只负责把字节搬进 Python,剩下各环节交给分工明确的库:

  • numpy:把读数变成数组,做均值、方差等数学运算
  • scipy:滤波、插值等信号处理
  • pandas:把多轮采集整理成表,落盘或出报表
  • matplotlib:画波形、出报告
  • pyserial:pyvisa-py / serial 后端处理串口的底层依赖

一条线串起来:采集 → 入库 → 画图。

新手常见卡点:资源、超时、后端 3 问

现象原因处理
list_resources()返回空没插上、地址没对、驱动没装查线缆与 GPIB 地址;核对资源名写法,如GPIB0::5::INSTRASRL1::INSTRTCPIP::192.168.1.10::inst0::INSTR
读数据报VisaIOError超时默认等待只有 5 秒调大instrument.timeoutdel instrument.timeout设为无限等待(谨慎使用)
创建 ResourceManager 就报错,提示找不到后端既没装 NI-VISA 也没装 pyvisa-pypip install pyvisa-py,不动任何硬件驱动

还有一件顺手的事:python -m visa能进交互式命令行,直接listopenquery,比跑脚本更快定位问题。

下一步:官方文档与社区

  • 深入属性、事件、二进制块读取:docs/source/api/index.rst
  • 安装与资源命名等常见问题:docs/source/faq/faq.rst
  • 想看 ResourceManager 和 Resource 的实现:pyvisa/highlevel.py

仓库地址:https://gitcode.com/gh_mirrors/py/pyvisa,需要完整源码时 clone 下来即可。

【免费下载链接】pyvisaA Python package with bindings to the "Virtual Instrument Software Architecture" VISA library, in order to control measurement devices and test equipment via GPIB, RS232, or USB.项目地址: https://gitcode.com/gh_mirrors/py/pyvisa

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4160516.html

相关文章:

  • untrunc:不重新编码修复损坏 MP4/MOV 视频文件
  • LlamaIndex 系列【4】入门案例(阿里云百炼适配)
  • Java求职Day51:Spring Boot整合与JVM调优实战
  • Arcface-PyTorch 完整实操:5 步搞定人脸识别模型训练与 LFW 评估
  • OpenAI暂停Astra训练警示:AI前沿训练中的网络风险与安全实践
  • 贪心算法与组合编码实战:从双数极值配对到卡牌状态压缩
  • 容度升维方法论(CDEM)深化——与六种经典方法论的对比、哲学根基与未来演化
  • 基于SpringBoot的毕业设计选题系统:从需求到部署的全栈实战
  • CLion中Makefile项目自动化构建:编译前清理与编译后复制配置指南
  • 车载安卓Framework开发核心技术与面试指南
  • HsMod炉石插件快速上手指南:三步安装,讲透加速、皮肤与Web面板
  • 5分钟同步上云:Nextcloud桌面客户端新手配置指南
  • 2026年7月辽源市新房价格深度分析报告
  • 稳态耦合智能体:从内在驱动到亲社会行为的AI架构革新
  • AI编程助手ABTest:行为驱动测试框架构建与评估实践
  • 从零到一 | CV转多模态大模型 | week22 | 实战项目-DocuMind-VL:基于 OCR 与 Qwen-VL 的文档多模态问答系统(二)
  • AI Native 时代, IC 人的自我修养
  • 2026年Java面试核心考点与云原生趋势解析
  • 从零安装 lm-sensors 硬件监控的完整实战
  • future/promise并发模型:从内存布局到跨语言实践
  • Marketch:从Sketch设计稿直接量出间距和CSS尺寸的顺手工具
  • RAG 评测体系完整指南
  • 边缘AI时事:PTZ摄像机的边缘算力是怎么来的?
  • Vue3 Ant Design 中后台模板教程:5分钟跑通 vue3-antd-admin
  • 重试机制应用
  • Linux服务器CPU使用率100%排查:从top命令到jstack与perf的完整实战指南
  • 把 Kafka 当队列用,丢了 0.3% 的消息:Kafka 与 RocketMQ 在可靠性、顺序、事务上的 4 笔真实账
  • KMS_VL_ALL_AIO 本地KMS快速激活指南:从零到一,一个批处理搞定 Windows 和 Office 激活
  • ol-ext 上手实操手册:OpenLayers 地图扩展库核心能力拆解
  • `import fnmatch` 是 Python 中导入标准库模块 `fnmatch` 的语句