CN / EN
CN / EN

写技术文章

PyVISA:使用 Python 控制您的仪器(一):如何连接仪器

无敌浩克

2023-09-07 15:27:52

PyVISA 是一个Python 包,使您能够独立于接口(例如GPIB、RS232、USB、以太网)控制各种测量设备。

详细的PyVISA介绍请参考:https://pyvisa.readthedocs.io/en/latest/index.html

总体概述

测量仪器的编程可能是痛苦的。有许多不同的协议,通过许多不同的接口和总线系统(例如 GPIB、RS232、USB、以太网)发送。对于您想要使用的每种编程语言,您必须找到支持您的设备及其总线系统的库。

为了缓解这种情况,虚拟仪器软件架构(VISA)规范在 90 年代中期被定义。VISA 是一种用于对包含 GPIB、VXI、PXI、串行、以太网和/或 USB 接口的仪器系统进行配置、编程和故障排除的标准。

NI-VISA用户手册请参考链接: https://www.ni.com/docs/zh-CN/bundle/ni-visa/page/user-manual-welcome.html

安装

PyVISA 是 VISA 库的前端。它在 Python 3.6+ 上运行。

您可以使用pip安装它:

$ pip install -U pyvisa

后端

为了让 PyVISA 工作,您需要有一个合适的后端。PyVISA 包含一个封装National Instruments 的 VISA库的后端。但是,您需要自己下载并安装该库(请参阅NI-VISA安装)。不同供应商有多种 VISA 实现。PyVISA 针对National Instruments 的 VISA Keysight IO Library Suite进行了测试,这两个套件都可以免费下载(您不需要开发环境,只需要驱动程序库)。

配置后端

目前有两种可用的后端:一种是 pyvisa 中包含的后端,它使用 IVI 库(包括 NI-VISA、Keysight VISA、R&S VISA、tekVISA 等),另一种是 pyvisa-py 提供的后端,这是一个纯 python 实现VISA 库。如果未指定后端,并且已安装IVI 库,则 pyvisa 将使用 IVI 后端。如果失败,它会使用 pyvisa-py 后端。

您还可以通过将参数传递给 ResourceManager 来选择所需的后端,如 pyvisa-py 所示:

pyvisa.ResourceManager('@py')

与您的仪器通信

我们以最为通用的‘NI-VISA’库来介绍如何与您的仪器通信(请参阅NI-VISA安装)。

1,1,运行‘NI-MAX’,会自动显示与您的电脑直接连接的可用VISA资源,如下图显示连接了UART口通用设备,USB设备和网络设备信息。

2,2,选择需要测试连接的设备,选择‘打开VISA测试面板’

点击‘Input/Output’,通过‘Basic I/O’发送标准SCPI指令‘*IDN?’询问仪器状态,若仪器正常成功连接,会回复相关信息,比如下图Agilent 33500B系列信号发生器回复如下:‘Agilent\sTechnologies,33521B,MY52700860,2.09-1.19-2.00-52-00’

3, 3,若需要连接本地或者远程网络设备,可以手动添加网络设备

点击‘添加网络设备’之后选择‘Manual Entry of LAB Instrument’,再点击‘下一步’

输入需要连接的仪器IP地址,注意若是本地网络设备,需要将您电脑的IP网段设置和仪器一致。然后点击‘完成’

如下是成功连接的CMW网络设备,可以选择‘打开VISA测试面板’测试与仪器的连接

如下成功连接的CMW仪器的回复信息:‘Rohde&Schwarz,CMW,1201.0002k75/102630,3.8.13’

在Python环境中查看VISA资源

依据之前‘NI-MAX’管理的VISA资源,可以在Python环境中查看是否能成功链接。

import pyvisa
rm = pyvisa.ResourceManager()
rm_address = rm.list_resources()
print(rm_address, type(rm_address))

在控制台查看print打印信息如下:

('USB0::0x0957::0x2B07::MY52700860::INSTR', 'TCPIP0::10.18.8.14::inst0::INSTR', 'TCPIP0::169.254.219.185::inst0::INSTR', 'TCPIP0::169.254.5.21::INSTR', 'TCPIP0::169.254.224.9::inst0::INSTR', 'ASRL12::INSTR', 'ASRL17::INSTR', 'ASRL80::INSTR') <class 'tuple'>

Pyvisa资源管理器会回复一个元组参数,里面包含所有可用的VISA资源。

常用的Pyvisa资源操作指令有如下两条:

写指令:write()

询问或者读指令:query()

具体指令内容请查阅对应仪器的编程指导。

SCPI指令也有很多通用的控制指令,比如获取仪器信息(*IDN?),复位仪器状态(*RST)等等。

列出所有的VISA资源之后,可以打开您需要连接的仪器,传入需要控制的仪器地址即可:

instrument_address='USB0::0x0957::0x2B07::MY52700860::INSTR'
my_instrument = rm.open_resource(instrument_address)
print(my_instrument.query('*IDN?'))
print(my_instrument SCPI version:', my_instrument.query(':SYSTem:VERSion?'))  
my_instrument.write('*RST')

控制台print打印如下信息:

Agilent Technologies,33521B,MY52700860,2.09-1.19-2.00-52-00
my_instrument SCPI version: 1994.0

这样您的仪器就可以通过Python控制了!

1收藏

5赞成

3条评论
您的评论
我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注