【问题标题】:PyVISA: cannot connect via VICP to LeCroy scopePyVISA:无法通过 VICP 连接到 LeCroy 示波器
【发布时间】:2015-07-23 12:38:28
【问题描述】:

我正在尝试通过他们的 VICP VISA 通行证 (TCP/IP) 在 Windows7/32bit 和 NI-VISA 5.4.1 下使用 PyVISA 1.7 连接到 LeCroy Wavesurfer 400 系列:

import visa
rm = visa.ResourceManager()
scope = rm.open_resource("VICP::169.254.201.2::INSTR")
print(scope.query("*IDN?"))

我收到以下错误:

警告(来自警告模块): 文件“C:\Python27\lib\site-packages\pyvisa\ctwrapper\functions.py”,第 1378 行 alias_if_exists)

VisaIOWarning: VI_WARN_EXT_FUNC_NIMPL (1073676457): 操作成功,但较低级别的驱动程序没有实现扩展功能。

Traceback(最近一次调用最后一次): 文件 "C:\path\scopeTest.py", 第 4 行,范围 = rm.open_resource("VICP::169.254.201.2::INSTR")

文件 "C:\Python27\lib\site-packages\pyvisa\highlevel.py", 第 1614 行,在 >open_resource 中 info = self.resource_info(resource_name)

文件 "C:\Python27\lib\site-packages\pyvisa\highlevel.py", 第 1584 行,在 >resource_info

raise ValueError('Could not parse resource: %s (error code %s)' % >(resource_name, ret))

ValueError:无法解析资源:VICP::169.254.201.2::INSTR(错误代码无)

在 LabVIEW 下,与此 VICP 地址下的设备的连接和通信工作正常。此外,当在open_resource() 中使用TCPIP:: 而不是VICP:: 时,连接建立时没有警告和错误,print(scope.ask("*IDN?")) 有效,但其他设备命令如scope.write("C1:VDIV .02") 不起作用

print(scope.query("C1:VDIV .02"))
WARNING : CURRENT REMOTE CONTROL INTERFACE IS TCPI

得出结论,为了正确控制设备,必须使用 VICP 通行证。 当使用 PyVISA 1.5 但其他配置相同并尝试通过以下方式连接时:

scope = visa.instrument("VICP::169.254.201.2::INSTR")   

给予:

警告(来自警告模块): 文件“C:\Python27\lib\site-packages\pyvisa-1.5-py2.7.egg\pyvisa\ctwrapper\functions.py”,第 1208 行 alias_if_exists)

VisaIOWarning: VI_WARN_EXT_FUNC_NIMPL (1073676457): 操作成功,但较低级别的驱动程序没有实现扩展功能。

警告(来自警告模块):
文件“C:\Python27\lib\site-packages\pyvisa-1.5-py2.7.egg\pyvisa\highlevel.py”,第 315 行 return Instrument(resource_name, resource_manager=self, **kwargs)

用户警告:给定资源不是 INSTR,而是未知

对于 PyVISA 的早期版本,这是针对仪器的空字符串返回进行讨论的:

http://osdir.com/ml/python.pyvisa.devel/2007-07/msg00003.html

http://sourceforge.net/p/pyvisa/bugs/5/

我怀疑问题是 C:\Python27\lib\site-packages\pyvisa\constants.py 中的 InterfaceType 对于 VICP 连接协议不存在在 PyVISA 中。当resource_info(),在C:\Python27\lib\site-packages\pyvisa\highlevel.py中抛出错误的那一行被调用

def resource_info(self, resource_name):  
       """Get the extended information of a particular resource

      :param resource_name: Unique symbolic name of a resource.

      :rtype: :class:`pyvisa.highlevel.ResourceInfo`
      """
      ret, err = self.visalib.parse_resource_extended(self.session, resource_name)
      if err == constants.StatusCode.success:
          return ret
      raise ValueError('Could not parse resource: %s (error code %s)' %(resource_name, ret))

似乎导致与 interface_type 不匹配,或者可能是 resource_class 的问题以及与旧版本 PyVISA 一样的返回问题?

【问题讨论】:

    标签: python visa


    【解决方案1】:

    根据https://github.com/hgrecco/pyvisa/issues/168,显然 OP 最终解决了这个问题。在这个线程中,hgrecco (Hernan Grecco) 说“我已经实现了一种强制使用资源 python 类的方法。”

    那里给出的解决方案似乎对我有用:

    import visa
    from pyvisa.resources import MessageBasedResource
    rm = visa.ResourceManager()
    scope = rm.open_resource('VICP::192.168.1.109::INSTR', resource_pyclass=MessageBasedResource)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多