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 gpib仪器控制_Python的扩展接口[0] - VISA仪器控制相关推荐

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

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

  2. python插件使用教程_Python常用扩展插件使用教程解析

    扩展插件 我下载的本版自带 pip下载工具 cmd-pip 下载插件 pip install HTMLParser 如果提示版本问题,更新PIP 别用开始里面的CMD 使用管理者权限 请注意差别 输入 ...

  3. python 测试用例管理 生成_python自动生成接口测试用例

    在python中Template可以将字符串的格式固定下来,重复利用. 同一套测试框架为了可以复用,所以我们可以将用例部分做参数化,然后运用到各个项目中. 代码如下: coding=utf-8 ''' ...

  4. python写入mysql数据库_python调用http接口,数据写入mysql数据库并下载录音文件

    写个脚本一共完成了三件事: 第一,python调用http接口, 第二,把调用到的数据写入mysql数据库, 第三,python调用wsdl接口,获取录音文件, import time import ...

  5. python短信平台_Python短信接口demo

    PHP代码示例 //接口类型:互亿无线触发短信接口,支持发送验证码短信.订单通知短信等. // 账户注册:请通过该地址开通账户http://user.ihuyi.com/register.html / ...

  6. python获取状态码_Python 如何获取接口返回的http状态码

    使用request 模块得到返回值,然后再利用status_code属性获取http响应的状态码. 示例代码: import requests import json url = 'http://de ...

  7. python创建数字列表_Python 生成一个从0到n个数字的列表4种方法小结

    Python 生成一个从0到n个数字的列表4种方法小结 我就废话不多说了,直接上代码吧! 第一种 def test1(): l = [] for i in range(1000): l = l + [ ...

  8. 第三章 虚拟仪器系统I/O接口软件——VISA

    第三章 虚拟仪器系统I/O接口软件--VISA VISA是虚拟仪器系统的I/O接口软件,为虚拟仪器系统的统一性和扩展性奠定了基础.本章介绍了VISA的概念和特点,论述了VISA的结构模型,重点分析了V ...

  9. Python VISA仪器控制

    1 VISA简介 / VISA Introduction VISA(Virtual Instrument Software Architecture,简称为VISA),即虚拟仪器软件结构,是VXI p ...

最新文章

  1. quickselect_QuickSelect:使用代码示例解释的快速选择算法
  2. django时间格式化加时区控制
  3. C++ 宽字符(wchar_t)与窄字符(char)的转换
  4. php取得文件的大小
  5. android 把assets 里面的图片文件输出到SD卡
  6. vector向量容器
  7. 按钮点击计数器存入mysql_按钮点击数统计计数器(PHP+MYSQL+JS)
  8. Mybatis_day4_Mybatis的延迟加载
  9. python怎么运行yaml配置文件_python的技巧和方法你了解多少?
  10. 网站移植到linux上后常犯的错误
  11. canvas-画图改进版
  12. ElasticSearch 查询最多10000条数据
  13. DOS命令窗口基本操作
  14. Visual Studio 调试时右侧诊断工具窗口如何显示
  15. ps粘贴图片模糊怎么破
  16. @inherited 注解详解
  17. 抢占氢能产业发展风口,上海重塑能源集团股份有限公司助推行业发展
  18. 注塑模具的温度对注塑工艺的影响到底有多大呢
  19. oracle数据库表空间如何清理,oracle数据库清理临时表空间
  20. [Codeforces266E]More Queries to Array...——线段树

热门文章

  1. Handler更新子线程数据
  2. 计算机要大牛 掌握的方法【上】写的很全面,收藏
  3. 毕业设计系统需求分析-“大楼要有高低层、单双号电梯,要抗7级地震”-04
  4. 关于Solidworks提示VBE6EXT.OLB不能加载
  5. Iphone5 图片适配
  6. 深度测试oppo软件,OPPO手机推深度测试:可解锁Bootloader,已支持Find X正式版
  7. error: no matching function for call QDebug:: QDebug
  8. 计算机辅助翻译翻译技术的译前应用,计算机辅助翻译技术在网络字幕组中的应用...
  9. Mac 软件推荐 用过的都说好
  10. Android-进阶教程-权限-安装时权限-签名权限-signature|privileged