VISA仪器控制/ VISA Instrument Control

1 VISA简介/ VISA Introduction

VISA(Virtual Instrument Software Architecture,简称为VISA),即虚拟仪器软件结构,是VXI plug&play联盟制定的I/O接口软件标准及其规范的总称。VISA提供用于仪器编程的标准I/O函数库,称为VISA库。VISA函数库驻留在计算机系统内,是计算机与仪器的标准软件通信接口,计算机通过它来控制仪器。

作为通用I/O标准,VISA提供了统一的设备资源管理、操作和使用机制,它独立于硬件设备、接口、操作系统和编程语言,具有与硬件结构无关的特点。VISA的这一特性使之适用于各种仪器接口,无论仪器使用的串口还是其他任何一种总线,诸如GPIB、VXI、PXI和LXI等,都具有相同的操作函数,从而实现了控制操作上的统一。Visa基于自底向上的结构模型,创造了一个统一形式的I/O控制函数集。一方面,对初学者或是简单任务的设计者来说,Visa提供了简单易用的控制函数集,在应用形式上相当简单;另一方面,对复杂系统的组建者来说,Visa提供了非常强大的仪器控制功能与资源管理。

2 PyVISA库/ PyVISA Library

PyVISA是Python的一个包,使Python能够独立于接口(如GPIB,RS232,USB,Ethernet)控制各种测量设备。PyVISA极大的简化了对仪器的控制方式,仅仅需要几行代码即可以实现对仪器的操作。

2 PyVISA环境搭建

需要利用Python实现对仪器的控制,首先需要对环境进行相应的配置,基本在于以下几点,

1. 确保系统中有visa32.dll文件的存在;

2. 安装相应的仪器驱动软件;

3. 安装pyvisa包。

其中,visa32.dll文件一般存放的位置在c:/windows/system32/visa32.dll,而仪器的驱动可到相应官网进行下载,而pyvisa包则可以使用pip进行安装,

pip install pyvsia

3 PyVISA基本用法

下面介绍一下pyvisa用于仪器控制的基本使用方式,十分简单,详细的使用方式可以参考官方说明。

首先导入visa模块,定义一些基本信息,包括visadll的位置,以及仪器控制方式及其信息,如TCP/IP的IP地址,GPIB的端口号信息等,按照指定格式进行填充。

接着利用visadll文件创建一个visa的实例对象,有了这个实例对象就可以连接仪器。利用创建的visa对象生成连接实例,此处以GPIB和TCPIP为例。

利用连接实例就可以开始与仪器进行通信了,通信的接口函数主要有以下3种,write() /read() /query(),具体使用哪一种需要根据每种仪器的通信协议命令集查询命令的属性,为写/读/读写等。有了接口函数就可以利用对应的命令集进行命令的发送。而具体的命令则可以通过相应的仪器手册进行查询。

1 importvisa2

3 visa_dll = 'c:/windows/system32/visa32.dll'

4 tcp_addr = 'TCPIP::192.168.1.1::inst0::INSTR'

5 gpib_addr = 'GPIB0::12::INSTR'

6

7 #Create an object of visa_dll

8 rm =visa.ResourceManager(visa_dll)9

10 #Create an instance of certain interface(GPIB and TCPIP)

11 tcp_inst =rm.open_resource(tcp_addr)12 gpib_inst =rm.open_resource(gpib_addr)13

14 #Command '*IDN?' can fetch instrument info

15 #Using write()/read()/query() function to make communication with device

16 #according to the command type

17 print(tcp_inst.query('*IDN?'))18 print(gpib_inst.query('*IDN?'))

4PyVISA应用实例

下面是一些在使用pyvisa进行仪器控制时编写的基本使用实例,可作为使用参考。

Note: 实例中仅仅是实现了一部分需求,若需要完成更多的命令需求,可以参考手册文件。

4.1安捷伦E5071C (TCP/IP)

1 importvisa2

3 classE50X():4 def __init__(self, ip, visaDLL=None, *args):5 self.ip =ip6 self.visaDLL = 'c:/windows/system32/visa32.dll' if visaDLL is None elsevisaDLL7 self.address = 'TCPIP::%s::inst0::INSTR' %self.ip8 self.resourceManager =visa.ResourceManager(self.visaDLL)9

10 defopen(self):11 self.instance =self.resourceManager.open_resource(self.address)12 self.instance.write('MMEM:STOR:SNP:FORM DB')13

14 defclose(self):15 if self.instance is notNone:16 self.instance.close()17 self.instance =None18

19 defcreate_dir(self, path):20 print('MMEM:MDIR "%s"' %path)21 self.instance.write('MMEM:MDIR "%s"' %path)22

23 defrecall_sta(self, filename):24 print('MMEM:LOAD "%s"' %filename)25 self.instance.write('MMEM:LOAD "%s"' %filename)26 #Time sleep in case of sta load uncompleted

27 time.sleep(0.5)28

29 defwind_act(self, wind):30 self.instance.write('DISP:WIND%d:ACT' %wind)31

32 defwind_max(self, wind):33 self.instance.write('DISP:MAX %s' %wind)34

35 deftrigger(self, status):36 cmdList = {'hold': 'OFF', 'continuous': 'ON'}37 self.instance.write('INIT1:CONT %s' %cmdList[status])38

39 def save_snp(self, name, n=2):40 print('MMEM:STOR:SNP "%s.s%dp"' %(name, n))41 self.instance.write('MMEM:STOR:SNP "%s.s%dp"' %(name, n))42

43 defsave_image(self, imagname, fmt):44 assert fmt in ['jpg', 'png'], 'Invalid postfix of image'

45 print('MMEM:STOR:IMAG "%s.%s"' %(imagname, fmt))46 self.instance.write('MMEM:STOR:IMAG "%s.%s"' %(imagname, fmt))47

48 defreset(self):49 self.instance.write('*RST')50

51 defread_idn(self):52 idn = self.instance.query('*IDN?')53 print(idn)54 returnidn55

56 def read_data(self, wind=1, trac=1, axis='x'):57 posi = {'x': 'XAX?', 'y': 'FDAT?'}58 data = self.instance.query('CALC%d:TRAC%d:DATA:%s' %(wind, trac, posi[axis]))59 returneval(data)60

61 deftran_file(self):62 re = self.instance.query(":MMEM:TRAN? 'D:\\22.S2P'")63 with open("x.S2P", 'w') as f:64 f.write(re)65 print(type(re))66

67 if __name__ == '__main__':68 e50 = E50X('192.168.1.17')69 e50.open()70 e50.read_idn()71 e50.tran_file()72 e50.close()

4.2安捷伦C34970A (GPIB)

1 importvisa2

3 classA34X():4 def __init__(self):5 self.address = 'GPIB0::8::INSTR'

6 self.visaDll = 'c:/windows/system32/visa32.dll'

7 self.resourceManager =visa.resourceManager(self.visaDll)8 defopen(self):9 self.instance =resourceManager.open_resource(self.address)10 self.idn = self.instance.query('*IDN?')11 print(self.idn)12

13 defreset(self):14 self.instance.write('*RST')15

16 defset_dc(self):17 self.instance.write('CONF:CURR:DC AUTO, (@119, 120)')

参考链接

python visa库 仪器控制_Python的扩展接口[0] - VISA仪器控制相关推荐

  1. python gpib仪器控制_Python的扩展接口[0] - VISA仪器控制

    VISA仪器控制/ VISA Instrument Control 1 VISA简介/ VISA Introduction VISA(Virtual Instrument Software Archi ...

  2. python爬虫库的功能_Python学习爬虫掌握的库资料大全和框架的选择的分析

    学Python,想必大家都是从爬虫开始的吧.毕竟网上类似的资源很丰富,开源项目也非常多. Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 当我们在浏览器中输入一个url后回车,后台会发生 ...

  3. python random库怎么用_Python || Random库的使用

    点击上方蓝字关注"程序员Bob"呀~ 每日一句,送给最珍贵的你: 人们内心的恐惧,有部分来自于过去事实所造成的伤害,但另一部分,却是源自我们对恐惧的想像和无限放大. 在C语言我们可 ...

  4. python海龟库如何导入_Python 中的海龟绘图turtle函数库的详细使用方法

    Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...

  5. python标准库怎么用_Python常用标准库使用(一)

    自学python一段时间,之前总是学习基本语法,对Python标准库没怎么接触,所以计划从常用的标准库开始,大体了解一遍,下面是学习过程中的笔记. 一.OS模块 主要对目录.或者文件操作.常用方法如下 ...

  6. python第三方库文件传输_Python第三方库在Excel文件读写中的应用

    Python第三方库在Excel文件读写中的应用 文/刘卫华1 史婷婷2 许学添1 [摘 要]摘 要 [期刊名称]<电子技术与软件工程> [年(卷),期]2019(000)016 [总页数 ...

  7. python标准库模块教程_Python标准库之Sys模块使用详解

    sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. 使用sy ...

  8. python文件拓展名是_python文件扩展名是什么

    与Python相关的只有.py..pyc..pyd这三个扩展名,下面是Python相关所有的扩展名文件以及对应的功能. .py - 常规脚本 .py3 - Python3脚本(Python3脚本通常以 ...

  9. 不属于python标准库的是_python标准库和扩展库

    Tkinter ---- Python 默认的图形界面接口. Tkinter 是一个和 Tk 接口的模块, Tkinter 库提供 了对 Tk API 的接口,它属于 Tcl/Tk 的 GUI 工具组 ...

最新文章

  1. Java学习笔记07--日期操作类
  2. Spark学习(四) -- Spark作业提交
  3. Bootstrap学习遇到的role属性--- 无障碍网页应用属性
  4. dota2比分网_红黑电竞比分横空出世 LPL夏季赛火热进行
  5. Base64加密---加密学习笔记(一)
  6. 嵌入式linux应用程序实例,嵌入式Linux应用程序访问物理地址的实例
  7. C++中两个常用的控制语句格式的函数(width和precision函数)
  8. 这一路,信念很简单,把书念下去,然后走出去,不枉活一世
  9. 计算机板报设计简单,计算机板报制作
  10. mxnet 训练--如何生成rec 数据 +自己在本机测试的结果
  11. java打印tomcat内存溢出_tomcat内存溢出问题监控工具
  12. ggthemes包:丰富ggplot2的表现力
  13. python机器学习-乳腺癌细胞挖掘(基于真实美国临床数据)
  14. php mocking,测试模拟器 Mocking
  15. 什么是敏捷开发Scrum
  16. KernelGAN论文详解分享
  17. 力学专业做cae需要学c语言吗,CAE工程师是需要掌握力学知识到何种程度_
  18. 【杂烩】各种MarkDown 符号
  19. Codeforces 545 C Woodcutters(贪心/DP)
  20. spring的maven依赖

热门文章

  1. 【经典推荐】教育大数据分析师系列丛书(培训教材)
  2. ionic2 tab切换控制
  3. 【Java WEB】MyBatis详解
  4. 《安富莱嵌入式周报》第311期:300V可调节全隔离USB PD电源,开源交流负载分析仪,CANFD Trace,6位半多斜率精密ADC设计,开源数学库
  5. PHP中使用mpdf 导出PDF文件的实现方法
  6. 机器学习总结(lecture 20)算法库:sk-learn
  7. 技术赋能水务数字化转型,上海市水旱灾害防御技术中心领导一行调研上海控安
  8. ipad pro python xcode_从命令行启动Xcode模拟器
  9. 安装MSDE2000数据库教程
  10. oppo计算机记录怎么保存,OPPO云服务智能储存功能 记录你和萌宠美好时光