【问题标题】:Cannot connect to a specific Ethernet port using Python and PyVisa无法使用 Python 和 PyVisa 连接到特定的以太网端口
【发布时间】:2012-07-17 11:28:02
【问题描述】:

我正在尝试使用 Python 中的 pyVisa 通过以太网连接连接到温度室。该设备仅允许通过端口 2049 进行连接。我通过PuTTYHyperTerminal 连接到它没有问题,但是当我在 Python 中尝试此命令时

import visa
chamber = visa.instrument("TCPIP::10.2.17.130::2049")

我收到此错误:

VI_ERROR_RSRC_NFOUND:位置信息不足或系统中不存在请求的设备或资源

我知道该设备在那里,因为我可以在 PuTTY 中通过它进行对话,但我似乎无法让 Python 代码工作。有什么提示吗? pyvisa是否默认使用SSH

【问题讨论】:

    标签: python visa


    【解决方案1】:

    访问 VISA 资源 的最简单方法(恕我直言)仍然是使用 VISA 设备检测,这将通过:

    • visa.ResourceManager().list_resources(),如果您使用的是pyVisa
    • viFindRsrc()viFindNext(),如果您使用visa32.dll 库。

    现在默认情况下,LAN 连接使用任一方法检测。这让您有两个选择:

    • 如果您安装了 NI-MAXNational InstrumentsMeasurement & Automation Explorer 是一个免费下载),进入'Devices & Interfaces',右击'Network Devices',选择'Create New VISA TCP/IP Resource...' 并按照说明进行操作。 NI-MAX 将自动检测您的仪器并提供其 VISA 资源名称。 注意现在这个资源将同时被list_resources()viFindRsrc()/viFindNext()列出
    • 如果没有,您必须向 VISA 提供 正确的 资源名称。如果您使用 VISA 护照(例如,VICP 用于 LeCroy 示波器),那么您应该适当地更改 VISA 标头(替换 TCPIP em> 与 VICP)。然后,语法如下:[visa-header]::[instrument-ip]::INSTR[visa-header]::[instrument-ip]::[instrument -port]::INSTR

    实际上,并不总是INSTR,具体取决于资源类(参见http://zone.ni.com/reference/en-XX/help/371361J-01/lvinstio/visa_resource_name_generic/)。

    一定要向仪器发送byte字符串(尤其是使用Python 3+时),否则会出现以下错误:

    VI_ERROR_RSRC_NFOUND:位置信息不足或系统中不存在请求的设备或资源

    也可以通过0xBFFF0011 或返回值-1073807343 来识别。

    【讨论】:

    • 更新:之前的答案不再完全准确。 list_resources() 采用值为 ?*::INSTR 的默认参数,因此它将仅显示其中包含 INSTR 的资源。要显示所有资源,您可以使用visa.ResourceManager().list_resources(query='?*'),或者如果您只想显示TCP 资源visa.ResourceManager().list_resources(query='TCP?*')
    【解决方案2】:

    您确定温度室支持 LAN 仪器协议吗?

    如果不确定,请尝试使用原始套接字,即

    chamber = visa.instrument("TCPIP::10.2.17.130::2049::SOCKET")
    

    (pyvisa默认不使用SSH)

    【讨论】:

      【解决方案3】:

      试试这个:

      import socket
      HOST = "10.2.17.130"    # The remote host
      PORT = 2049             # The same port as used by the server
      
          s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
          s.connect((HOST, PORT))
      

      【讨论】:

        猜你喜欢
        • 2018-12-26
        • 1970-01-01
        • 2020-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-29
        • 2021-12-14
        相关资源
        最近更新 更多