PyVisa教程-用Python控制仪器【9,开发PyVisa后台】

10 篇文章 68 订阅

起初,PyVISA是一个是VISA库的Python容器,更准确的说是NI-VISA库的ctypes容器。这种配置运行很好,但是无法控制NI-VISA。不支持的仪器。用户需要使用采用不同的API的其他包来更改他们的程序。

从1.6开始,PyVISA变成了VISA库的前端,提供了有好的,Python式的API,并能连接不同的位置。每个初始化实现低等级通讯的VisaLibraryBase派生类。基于NI-VISA库的ctypes容器做为替换初始(命名:ni),以便便捷性被PyVISA绑定。

可以利用@标记符初始化资源管理器的方法自定义定义。记住ni是替换的。

>>> import visa

>>> rm = visa.ResourceManager()

等同于

>>> import visa

>>> rm = visa.ResourceManager('@ni')

如果需要,亦可以提供文件路径

>>> import visa

>>> rm = visa.ResourceManager('/path/to/lib@ni')

ResourceManager看起来像是请求预先的VISA库实现。

PyVISA通过名称载入一级。如果这样做:

>>> import visa

>>> rm = visa.ResourceManager('@somename')

PyVISA将加载名称为pyvisa-somename的包/模块,当然这必须已经安装在系统中。这是一个简易的松设置。PyVISA在实际使用之前,不需要知道任何后台信息。

可以通过以下命令列出已经安装的后台信息:

python -m visa info

开发一款新后台

一个最小化的后台非常简单:

from pyvisa.highlevel import VisaLibraryBase

 

class MyLibrary(VisaLibraryBase):

    pass

 

WRAPPER_CLASS = MyLibrary

此外,可以提供get_debug_info的静态方法,这在调用“ python -m visa info”或“ pyvisa-info”时打印词典类型的调试信息。

这是因为任何包含pyvisa名称的设置工具产生的脚步,被命名为“ pyvisa-*-script”,而并非不是后台。 pyvisa-shell”和“ pyvisa-info”脚本。

开发后台需要知道VisaLibraryBase实现了什么,哪些API需要开放。

完整的VISA库实现,需要很多函数(基本上所有架构章节介绍的中等级函数,本节最后有详细的列表)。然而,可工作的实现完全没有实现。

非常简易的实现需要:

  • open_default_resouce_manager:返回默认的ResourceManager设备中断
  • 打开:打开设定设备例程
  • close:关闭设定的设备清单,事件或查找列表
  • list_resources:返回所有匹配查询的设备元组

只是这样,无法获得任何有用信息。通常还需要:

  • get_attribute:返回设备的配置信息
  • set_attribute:设置或配置设备

需要传输数据给基于消息类型的仪器,还需要:

  • 阅读:从设备或接口读取数据
  • 写:向设备或接口传输数据

对于设备的其他应用,需要实现其他的函数。这必然你和你的需要。

这些函数将产生“ pyvisa.errors.VisaIOError”或“ pyvisa.errors.VisaIOWarning”。

所需实现中等级函数的清单:

def read_memory(self, session, space, offset, width, extended=False):

def write_memory(self, session, space, offset, data, width, extended=False):

def move_in(self, session, space, offset, length, width, extended=False):

def move_out(self, session, space, offset, length, data, width, extended=False):

def peek(self, session, address, width):

def poke(self, session, address, width, data):

def assert_interrupt_signal(self, session, mode, status_id):

def assert_trigger(self, session, protocol):

def assert_utility_signal(self, session, line):

def buffer_read(self, session, count):

def buffer_write(self, session, data):

def clear(self, session):

def close(self, session):

def disable_event(self, session, event_type, mechanism):

def discard_events(self, session, event_type, mechanism):

def enable_event(self, session, event_type, mechanism, context=None):

def flush(self, session, mask):

def get_attribute(self, session, attribute):

def gpib_command(self, session, data):

def gpib_control_atn(self, session, mode):

def gpib_control_ren(self, session, mode):

def gpib_pass_control(self, session, primary_address, secondary_address):

def gpib_send_ifc(self, session):

def in_8(self, session, space, offset, extended=False):

def in_16(self, session, space, offset, extended=False):

def in_32(self, session, space, offset, extended=False):

def in_64(self, session, space, offset, extended=False):

def install_handler(self, session, event_type, handler, user_handle):

def list_resources(self, session, query='?*::INSTR'):

def lock(self, session, lock_type, timeout, requested_key=None):

def map_address(self, session, map_space, map_base, map_size,

def map_trigger(self, session, trigger_source, trigger_destination, mode):

def memory_allocation(self, session, size, extended=False):

def memory_free(self, session, offset, extended=False):

def move(self, session, source_space, source_offset, source_width, destination_space,

def move_asynchronously(self, session, source_space, source_offset, source_width,

def move_in_8(self, session, space, offset, length, extended=False):

def move_in_16(self, session, space, offset, length, extended=False):

def move_in_32(self, session, space, offset, length, extended=False):

def move_in_64(self, session, space, offset, length, extended=False):

def move_out_8(self, session, space, offset, length, data, extended=False):

def move_out_16(self, session, space, offset, length, data, extended=False):

def move_out_32(self, session, space, offset, length, data, extended=False):

def move_out_64(self, session, space, offset, length, data, extended=False):

def open(self, session, resource_name,

def open_default_resource_manager(self):

def out_8(self, session, space, offset, data, extended=False):

def out_16(self, session, space, offset, data, extended=False):

def out_32(self, session, space, offset, data, extended=False):

def out_64(self, session, space, offset, data, extended=False):

def parse_resource(self, session, resource_name):

def parse_resource_extended(self, session, resource_name):

def peek_8(self, session, address):

def peek_16(self, session, address):

def peek_32(self, session, address):

def peek_64(self, session, address):

def poke_8(self, session, address, data):

def poke_16(self, session, address, data):

def poke_32(self, session, address, data):

def poke_64(self, session, address, data):

def read(self, session, count):

def read_asynchronously(self, session, count):

def read_stb(self, session):

def read_to_file(self, session, filename, count):

def set_attribute(self, session, attribute, attribute_state):

def set_buffer(self, session, mask, size):

def status_description(self, session, status):

def terminate(self, session, degree, job_id):

def uninstall_handler(self, session, event_type, handler, user_handle=None):

def unlock(self, session):

def unmap_address(self, session):

def unmap_trigger(self, session, trigger_source, trigger_destination):

def usb_control_in(self, session, request_type_bitmap_field, request_id, request_value,

def usb_control_out(self, session, request_type_bitmap_field, request_id, request_value,

def vxi_command_query(self, session, mode, command):

def wait_on_event(self, session, in_event_type, timeout):

def write(self, session, data):

def write_asynchronously(self, session, data):

def write_from_file(self, session, filename, count):

 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值