PyVisa教程-用Python控制仪器【7,PyVISA结构】

10 篇文章 68 订阅

PyVISA在三个层次上实现了方便的Pythonic编程。

1. 低级别:一个包含visa库接口的容器。

该容器定义了每个函数的参数类型和返回值类型,打通了Python类和外部接口类型。

一般不需要直接调用这些函数。这么做就意味着需要提升Layer 2的封装与定义了。

所有level 1的函数均为VisaLibraryBase的静态方法。

并不是所有低级别的函数在所有后台上都实现了。为了更好地兼容性,不要使用Layer 1.所有的功能均在Layer 2中实现了。

2. 中间级:visa库的所有函数的Python实现。

这些函数调用低级别函数,增加了处理类型转换代码。这些函数拥有详细的,友好的Python类型文档。

如果没有对应的设备类,可以直接调用此级别的函数,控制VISA库特定的接口。

所有level 2的函数均为VisaLibraryBase中的封装函数。

3. 高级别:ResourceManager或Resource的基于对象的层。

ResourceManager实现了控制所连接设备的方法。可以应用此对象打开对应Resource派生类的各种设备。

Resource类和派生类实现了获取设备参数和控制设备的Pythonic方式。

大部分情况下,只需访问ResourceManager。对一个给定的设备,用open_resource()方法来实现该对象的访问。如果需要,可以使用visalib的参数访问VisaLibrary对象。

VisaLibraryBase类实现低级别的调用。对于默认的NI后台,level 1和level 2均在pyvisa.ctwrapper包中。该包包含在PyVISA中。

其他的后台只需将@符号和后台名称做为参数传递给ResourceManager即可。更多信息详见A frontend for multiple backends.

调用中级别和低级别函数

首先,访问ResourceManager:

>>> import visa

>>> rm = visa.ResourceManager()

然后,可以访问visalib下的VisaLibrary实体。

例如,VISA函数viMapAddress。在低级别layer中为viMapAddress,在中级别中为map_address。

可以通过名称区分低级别和中级别函数。低级别函数和共享库中的方法具有相同的名称,并被冠以前缀vi。中级别函数具有更Python化但可识别的名称。一般,首字母大写并以vi为前缀的名称变为下划线间隔的小写字母的名称。在API章节有对此级别函数的详细介绍。

低级别

可以用静态方法直接访问低级别函数,例如:

>>> rm.visalib.viMapAddress(<here goes the arguments>)

调用这些函数需要了解函数声明和对应python接口。避免这些,可以用VisaLibrary对象的中级别函数。

中级别

VisaLiability对象实现了外部库一一对应的封装函数。

每一个中级别函数封装了一个低级别函数。例如:

>>> rm.visalib.map_address(<here goes the arguments>)

封装库解决了调用约定和类型转换。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用pyvisa 1.13.0版本 visa1.0.0在安捷伦33120A和EG&G 7265 DSP Lock-in Amplifier扫描音叉谐振子频率并绘图的Python代码: ```python import pyvisa as visa import numpy as np import matplotlib.pyplot as plt # 打开仪器 rm = visa.ResourceManager() sig_gen = rm.open_resource('GPIB0::10::INSTR') # 安捷伦33120A信号发生器 lockin = rm.open_resource('GPIB0::11::INSTR') # EG&G 7265 DSP Lock-in放大器 # 设置安捷伦33120A信号发生器并输出连续方波 sig_gen.write(':SOUR:FREQ:MODE CW') sig_gen.write(':SOUR:FUNC SQU') sig_gen.write(':SOUR:SQU:DCYC 50') sig_gen.write(':SOUR:SQU:PER 0.1') # 方波周期0.1秒 sig_gen.write(':OUTP:LOAD 50') sig_gen.write(':OUTP ON') # 设置EG&G 7265 DSP Lock-in放大器 lockin.write('REST') # 恢复出厂设置 # 扫描音叉频率并测量信号 freq_list = np.arange(10, 100, 1) # 扫描频率范围10Hz到100Hz signal_list = [] for freq in freq_list: sig_gen.write(f':SOUR:FREQ {freq}') signal = lockin.query_ascii_values('SNAP?1,2,3') # 测量X, Y, R signal_list.append(signal[2]) # 只记录R # 绘制结果图像 plt.plot(freq_list, signal_list) plt.xlabel('Frequency (Hz)') plt.ylabel('Lock-in R') plt.show() # 关闭仪器 sig_gen.write(':OUTP OFF') sig_gen.close() lockin.close() ``` 首先,我们使用`pyvisa`库的`ResourceManager`类打开安捷伦33120A信号发生器和EG&G 7265 DSP Lock-in放大器。然后,我们分别使用`write()`方法设置安捷伦33120A信号发生器的输出方波和EG&G 7265 DSP Lock-in放大器的参数。接下来,我们使用`numpy`库的`arange()`函数生成扫描频率列表,并使用`query_ascii_values()`方法从EG&G 7265 DSP Lock-in放大器测量信号。最后,我们使用`matplotlib`库的`plot()`函数绘制结果图像。 请注意,以上代码只是演示如何使用`pyvisa`库与仪器进行通信。实际使用时,您需要根据您的具体仪器和测量需求进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值