7

I am trying to connect to a temperature chamber via an Ethernet connection using pyVisa in Python. The device only allows connections through port 2049. I have no problems connecting to it via PuTTY or HyperTerminal, but when I try this command in Python

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

I get this error:

VI_ERROR_RSRC_NFOUND: Insufficient location information or the requested device or resource is not present in the system

I know the device is there because I can talk through it in PuTTY, but I cannot seem to get the Python code to work. Any hints? Does pyvisa use SSH by default?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
KMB
  • 113
  • 1
  • 2
  • 5

3 Answers3

7

The simplest way (IMHO) to access a VISA resource is still by using the VISA device detection which would be through:

  • visa.ResourceManager().list_resources(), if you're using pyVisa
  • or viFindRsrc() and viFindNext() if you use the visa32.dll library.

Now by default, LAN connections are not detected using either method. This leaves you with two choices:

  • If you have installed NI-MAX (the Measurement & Automation Explorer from National Instruments is a free download), go under 'Devices & Interfaces', right-click on 'Network Devices', select 'Create New VISA TCP/IP Resource...' and follow the instructions. NI-MAX will auto detect your instrument and provide its VISA resource name. Note that now this resource will be listed by both list_resources() and viFindRsrc()/viFindNext()
  • If not, you will have to provide VISA with the right resource name. If you use a VISA passport (e.g. VICP for LeCroy oscilloscopes) then you should change the VISA header appropriately (replace TCPIP with VICP). Then, the syntax is the following: [visa-header]::[instrument-ip]::INSTR or [visa-header]::[instrument-ip]::[instrument-port]::INSTR

Actually, it's not always INSTR, depending on the resource class (see http://zone.ni.com/reference/en-XX/help/371361J-01/lvinstio/visa_resource_name_generic/).

Be sure to send byte strings to the instrument (especially if using Python 3+), otherwise you will get the following error:

VI_ERROR_RSRC_NFOUND: Insufficient location information or the requested device or resource is not present in the system

which can also be identified by 0xBFFF0011 or a return value of -1073807343.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Tonio
  • 414
  • 5
  • 17
  • 1
    Update: The previous answer is not totally accurate anymore. The *list_resources()* takes a default parameter with value _?*::INSTR_, so it will show only resources with _INSTR_ in it. To show all resources, you can use ```visa.ResourceManager().list_resources(query='?*')```, or if you want to show only the _TCP_ resources ```visa.ResourceManager().list_resources(query='TCP?*')``` – vincedjango Jun 18 '19 at 22:33
4

Are you sure the temp chamber supports the LAN instrument protocol?

If unsure, try using raw socket instead, i.e.

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

(pyvisa does not use SSH by default)

Qiau
  • 5,976
  • 3
  • 29
  • 40
1

Try this:

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))
Vito Gentile
  • 13,336
  • 9
  • 61
  • 96
Joseph
  • 19
  • 3