Sto cercando di controllare un generatore di forme d'onda arbitrarie Agilent 33120A usando pyvisa sotto Ubuntu 13.04 (Raring Ringtail). Ho installato e configurato tutto ciò che è necessario per comunicare con lo strumento utilizzando il nostro adattatore NI GPIB-USB-B da laboratorio. Il firmware dell'adattatore è caricato, così come i moduli del kernel da linux-gpib.
Posso fare con successo alcune uscite a secco, ad es. correndo # ibtest
(strumento da riga di comando), posso scrivere *IDN?
al dispositivo e ricevo l'ID del dispositivo: "HEWLETT-PACKARD,33120A,0,8.0-5.0-1.0"
. Ho anche testato con successo altri comandi, come l'impostazione di tensione e frequenza e così via. Funziona.
Il problema è che pyvisa lancia sempre a VisaIOError
... Non ho idea di come farlo funzionare. Corro python-2.7 come root, in modo che (per ora) non abbia a che fare con i privilegi di accesso. Questo è il codice e l'output:
import visa
>>> visa.vpp43.visa_library.load_library("/usr/lib/x86_64-linux-gnu/libvisa.so.0")
>>> visa.get_instruments_list()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/pyvisa/visa.py", line 254, in get_instruments_list
vpp43.find_resources(resource_manager.session, "?*::INSTR")
File "/usr/lib/python2.7/dist-packages/pyvisa/vpp43.py", line 583, in find_resources
instrument_description)
File "/usr/lib/python2.7/dist-packages/pyvisa/vpp43.py", line 398, in check_status
raise visa_exceptions.VisaIOError, status
pyvisa.visa_exceptions.VisaIOError: VI_ERROR_RSRC_NFOUND: Insufficient location information or the requested device or resource is not present in the system.
La libreria viene caricata correttamente. Non è nemmeno necessario, ma carico la libreria esplicitamente per essere sicuro. Ovviamente, pyvisa non trova nessuno strumento. Ho anche provato ad aprire esplicitamente il mio strumento board=0, pad=10, sad=0
usando uno di questi comandi:
visa.instrument("GPIB::10")
visa.instrument("GPIB0::10")
visa.instrument("GPIB::10::0")
visa.instrument("GPIB0::10::0")
Ma la stessa eccezione di cui sopra è generata.
In sostanza, tutto è impostato, ma pyvisa non vede nulla.
Versioni usate:
- pyvisa-1.4
- python-2.7
- linux-GPIB-3.2.20
- libvisa-0.0.20130812-1 (https://launchpad.net/ubuntu/trusty/amd64/libvisa0/) la più recente build per Ubuntu 14.04 (Trusty Tahr) in quanto questa libreria non si trova nei repository di Ubuntu 13.04)
Sto sperando in alcuni suggerimenti.
risposte:
2 per risposta № 1pyvisa
è un wrapper Python su NI-VISA. Per quanto ne so, non è possibile usarlo pyvisa
con linux-gpib
. Ma linux-gpib viene fornito con i suoi wrapper Python. Semplicemente import Gpib
e tu sei bravo ad andare, per esempio,
>>>import Gpib
>>>device = Gpib.Gpib(pad=10)
>>>device.write("*IDN?")
>>>device.read()
"HEWLETT-PACKARD,33120A,0,8.0-5.0-1.0"
Immagino che tu stia scrivendo una sorta di sceneggiatura di misura schiavo potrebbe essere utile per te (disclaimer: io sono l'autore di slave
). Cerca di semplificare la comunicazione del dispositivo. Inoltre viene fornito con i propri wrapper per linux-GPIB.