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用于仪器控制的基本使用方式,十分简单,详细的使用方式可以参考官方说明。

  1. 首先导入visa模块,定义一些基本信息,包括visadll的位置,以及仪器控制方式及其信息,如TCP/IP的IP地址,GPIB的端口号信息等,按照指定格式进行填充。
  2. 接着利用visadll文件创建一个visa的实例对象,有了这个实例对象就可以连接仪器。利用创建的visa对象生成连接实例,此处以GPIB和TCPIP为例。
  3. 利用连接实例就可以开始与仪器进行通信了,通信的接口函数主要有以下3种,write() /read() /query(),具体使用哪一种需要根据每种仪器的通信协议命令集查询命令的属性,为写/读/读写等。有了接口函数就可以利用对应的命令集进行命令的发送。而具体的命令则可以通过相应的仪器手册进行查询.

4 PyVISA应用实例

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

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

4.1 安捷伦E5071C (TCP/IP)

 1 import visa2 3 class E50X():4     def __init__(self, ip, visaDLL=None, *args):5         self.ip = ip6         self.visaDLL = 'c:/windows/system32/visa32.dll' if visaDLL is None else visaDLL7         self.address = 'TCPIP::%s::inst0::INSTR' % self.ip8         self.resourceManager = visa.ResourceManager(self.visaDLL)9
10     def open(self):
11         self.instance = self.resourceManager.open_resource(self.address)
12         self.instance.write('MMEM:STOR:SNP:FORM DB')
13
14     def close(self):
15         if self.instance is not None:
16             self.instance.close()
17             self.instance = None
18
19     def create_dir(self, path):
20         print('MMEM:MDIR "%s"' % path)
21         self.instance.write('MMEM:MDIR "%s"' % path)
22
23     def recall_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     def wind_act(self, wind):
30         self.instance.write('DISP:WIND%d:ACT' % wind)
31
32     def wind_max(self, wind):
33         self.instance.write('DISP:MAX %s' % wind)
34
35     def trigger(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     def save_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     def reset(self):
49         self.instance.write('*RST')
50
51     def read_idn(self):
52         idn = self.instance.query('*IDN?')
53         print(idn)
54         return idn
55
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         return eval(data)
60
61     def tran_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 import visa2 3 class A34X():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     def open(self):9         self.instance = resourceManager.open_resource(self.address)
10         self.idn = self.instance.query('*IDN?')
11         print(self.idn)
12
13     def reset(self):
14         self.instance.write('*RST')
15
16     def set_dc(self):
17         self.instance.write('CONF:CURR:DC AUTO, (@119, 120)')

4.3 CMW500  (GPIB)

import pyvisa

resManager =pyvisa.resourceManager()

#('ASRL1::INSTR','ASRL2::INSTR','GPIB0::12::INSTR')

init = resManager('GPIB0::12::INSTR')

控制CMW500

通过SCPI指令, 可以控制仪器,进行配置环境和返回状态值等操作。

Function

SCPI Command

Set MCC

CONFigure:LTE:SIGN:CELL:MCC

Enable LTE Cell

SOURce:LTE:SIGN:CELL:STATe ON

MT SMS from Instrument

CONFigure:DATA:CONTrol:IMS2:VIRTualsub1:MTSMs:SEND

Get IMS General Info

SENSe:DATA:CONTrol:IMS2:GINFo?

Clear IMS General Info

CONFigure:DATA:CONTrol:IMS2:CLEan:GENeral:INFO

Set IMS Private User ID

CONF:DATA:CONTrol:IMS2:SUBScriber1:PRIVateid

Set Address of Confer Call

CONFigure:DATA:CONTrol:IMS2:CONFerence:FACTory:ADD

参考连接:Python VISA仪器控制_bluewhu的博客-CSDN博客_python visa

Python VISA仪器控制相关推荐

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

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

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

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

  3. 浅谈仪器控制【1.Python与Labview/Labwindows】

    (一) Python Python是一种易于学习的脚本语言,开发周期短.它有专门控制仪器的库函数Pyvisa,代码简洁且支持各种科学计算.一般情况下,我们可以使用SCPI命令控制仪器,也可以加载仪器函 ...

  4. LabVIEW串口仪器控制

    最近在学习使用LabVIEW与传感器通讯,但是传感器还没到,为了熟悉串口通讯过程,想到了使用虚拟串口和串口调试助手先练练. 本文学习参考了  串口仪器控制(下篇)--利用虚拟串口模拟仪器_霍小七的博客 ...

  5. YK01 仪器控制的三个核心

    前言 以YK开头的系列,是对仪器控制的个人总结.我将实例化主要基于MATLAB的控制,也会涉及到LabView以及Python的控制. 这里所说的仪器控制,是指用户根据某个测量原理,控制测量仪器,采集 ...

  6. 使用python控制仪器【控制苏州联讯源表SMU】

    文章目录 使用python控制仪器[控制苏州联讯源表SMU] 搭建环境 1.安装python 2.安装PyCharm 3.使用PyCharm创建项目 4.添加VISA资源 5.安装PyVisa 连接设 ...

  7. Python之流程控制

    Python之流程控制 if语句 条件判断语句 if a == b:pass # 满足条件再执行 if a == b:pass else:pass # 满足条件执行第一种语句,不满足条件则执行第二种语 ...

  8. python语音在线编辑-Python实时语音识别控制

    Python实时语音识别控制 概述 本文中的语音识别功能采用 百度语音识别库 ,首先利用 PyAudio 库录制语音指令,保存为受支持的 wav 音频文件,然后利用 百度语音识别库 提供的方法实现语音 ...

  9. python微控制器编程从零开始-单片机可以使用Python语言来控制了!

    告诉广大Python爱好者一个好消息,单片机可以使用Python语言来控制了. Arudino虽然在开源硬件领域非常流行,但是对于不懂C/C++编程语言的玩家来说,还是需要一段学习时间. Damien ...

最新文章

  1. 推荐:介绍一个UndoFramework
  2. Php基础正则表达式篇
  3. WWW 2021 | Radflow: 可进行数十万节点的多变量时序预测模型
  4. java list 获取索引_java – 获取arrayList中元素的索引
  5. 《区块链原理、设计与应用》一3.8 本章小结
  6. 【转】几个颇有创意的网站推广方法
  7. 计算机等级考试oracle,用spt更新ORACLE
  8. 如何打开.hdx文件
  9. GX Works2快捷键
  10. python3.6从入门到精通mobi_Python 3.6零基础入门与实战epub
  11. Android模拟器的判定
  12. BugKu ——WP(MISC[二])
  13. EventBus Vuex?
  14. 如何用手机打印文件?手机中存储的文档怎么打印
  15. 病毒式推广最终可能会走到尽头
  16. pageoffice使用笔记
  17. 计算机维修中拆机工具有哪些,秒变专业拆机维修达人,这款工具套装你值得拥有...
  18. pdf.worker.js找不到的错误
  19. JavaScript中string与number
  20. 读书笔记-干法-人生难免有失败的时候

热门文章

  1. 如何使用C#实现QQ号码的申请
  2. C# SolidWorks 二次开发 API---提高草图绘制效率
  3. SolrCloud简介——solr 名词解释
  4. java——计算一元二次方程的根
  5. 10月7日 c语言 函数的递归调用 有5个学生坐在一起,问第五个学生多少岁,比第四个大2岁……最后问第一个学生,他说是10岁
  6. 授人以鱼不如授人以渔,今天手把手教你怎么从微软官方下载Windos10正版镜像
  7. Python爬虫实战:模拟登录淘宝网站
  8. Smart Package Robot,高级安装记录器和 RPA 脚本系统
  9. fsck修复以及在lost+found找丢失的文件
  10. 高速数据采集卡10bit 5GSPS