Seite 1 von 1

PyVisa / Remote Steuerung Messgerät

Verfasst: Donnerstag 13. September 2018, 16:07
von Jaco
Hallo an alle,

ich möchte einen Funktionsgenerator (Rigol DG1022) über Python ansteuern.
Das sollte über PyVisa funktionieren.

In dem Programm wird aber ein Timout ausgegeben, sobald ich die log Funktion (visa.log_to_screen()) ausschalte.
Wenn die Funktion aktiviert ist funktioniert alles wunderbar.
Hat jemend hierfür eine Erklärung?

Grüße


# Ansteuerung Funktionsgenerator Rigol DG1022
#
# HS / Stand 2018-09-11
# USB0::0x0400::0x09C4::DG1D200300337::INSTR

import tkinter as tk
import visa
visa.log_to_screen()


rm = visa.ResourceManager('C:\\Windows\\SYSTEM32\\visa32.dll')
print (rm.list_resources())
DG1022 = rm.open_resource('USB0::0x0400::0x09C4::DG1D200300337::INSTR')
DG1022.timeout = 1000

print(DG1022.query('*IDN?')) # Query device information
# print(DG1022.write('SYST:LOC'))
print(DG1022.write('VOLT:UNIT VPP')) # Set voltage to peak-peak
print(DG1022.write('APPL:SIN 16000,2.5,0.5')) # set sinus
print(DG1022.write('OUTP ON')) # Turn output off / on
print(DG1022.write('SYST:RWL')) # Lock front buttons
DG1022.close()

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Donnerstag 13. September 2018, 18:22
von __blackjack__
@Jaco: Könnte es sein das Du auch Antworten lesen *musst* und das das durch das logging automatisch passiert? Ist jetzt nur geraten.

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Freitag 14. September 2018, 14:07
von Jaco
Hallo Blckjack,

guter Tipp; wenn ich die query Funktionen auskommentiere dann funktioniert es.
Vielen Dank

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Freitag 14. September 2018, 14:16
von Jaco
Alles zurück; hatte leider die falsche Zeile auskommentiert.
Funktioniert leider immer noch nicht.

Falls noch jemand eine Idee hatt ....

Grüße

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Freitag 14. September 2018, 15:05
von Jaco
Nochmal zur Klärung: es liegt definitv an den query oder read Befehlen; auch read_raw funktioniert nicht.
Die reinen write Befehele funktionieren auch ohne aktivierter Log-Funktion

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Freitag 14. September 2018, 16:24
von __deets__
Und warum kannst du die log-Funktion nicht einfach aktivieren? Oder ist die blockierend?

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Freitag 14. September 2018, 16:32
von __deets__
Also ich hab' mir die mal angeschaut:

https://github.com/pyvisa/pyvisa/blob/6 ... t__.py#L25

Abfragen tut das nix. Aber das logging verlangsamt ggf. das ganze System, und dadurch klappt dann das Query. Siehe hier:

https://github.com/pyvisa/pyvisa/blob/1 ... ed.py#L552

Da kann man augenscheinlich ein delay angeben. Probier das doch mal.

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Dienstag 18. September 2018, 12:36
von Jaco
Das ganze soll über eine GUI ein Messgerät steuern und Daten erfasssen, idealerweise ohne das IDLE Fenster. Daher würde ich das Logging gerne deaktivieren.

Hab schon Delay eingegeben, ebenso diverse Termination Characters - leider ohne ERflg.

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Dienstag 18. September 2018, 12:50
von __blackjack__
Ich würde das dann mal ohne IDE/IDLE probieren, und wenn das da genau so klappt/nicht klappt, je nachdem ob man `log_to_screen()` aufruft oder nicht, einen Bugreport absetzen.

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Dienstag 18. September 2018, 12:50
von __deets__
IDLE hat damit doch nix zu tun. Du kannst logging an haben, und trotzdem das Skript zb direkt in der Konsole ausführen. Oder über Doppelklick.

Aber zu deinem eigentlichen Problem: ich denke nicht, dass dir hier geholfen werden kann. Ohne Zugriff auf ein solches Gerät kann man selbst den Code nicht laufen lassen. Offensichtliche Anregungen wie die von BlackJack sind ausgeschlossen worden, uA durch Blick in den Code.

Ich würde versuchen mich an den Paketmaintainer zu wenden. Oder wen bezahlen, der das Problem vor Ort untersucht.

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Mittwoch 19. September 2018, 10:47
von Jaco
Habe jetzt die Lösung gefunden, Hurra. Scheint sich um ein Timing Problem zu handeln.
Nach Einfügen von time.sleep(0.3) nach jedem write Befehl funktioniert jetzt alles.
Die Log Funktion verlangsamt offensichtlich die Ausführung, so dass es damit ebenfalls funktioniert hat.

Vielen Dank für eure Hinweise.

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Mittwoch 19. September 2018, 11:01
von __deets__
Dann hast du das Delay nicht richtig benutzt. Denn das mach genau das ;)

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Mittwoch 19. September 2018, 11:24
von __blackjack__
@__deets__: Ich sehe da bei `write()` keine Möglichkeit. Nur bei den `query_*()`-Methoden gibt's dieses Argument bzw. das Attribut `query_delay`.

@Jaco: Ich würde noch *sicher* dafür sorgen das die entsprechenden `close()`-Methoden aufgerufen werden (ungetestet):

Code: Alles auswählen

from contextlib import closing
from time import sleep

from visa import ResourceManager

VISA_DLL_FILENAME = r'C:\Windows\SYSTEM32\visa32.dll'
DG1022_RESOURCE_NAME = 'USB0::0x0400::0x09C4::DG1D200300337::INSTR'
DELAY = 0.3

def main():
    with closing(ResourceManager(VISA_DLL_FILENAME)) as resource_manager:
        print(resource_manager.list_resources())
        with closing(rm.open_resource(DG1022_RESOURCE_NAME)) as dg1022:
            dg1022.timeout = 1000
            dg1022.query_delay = DELAY

            print(dg1022.query('*IDN?'))  # Query device information.
            sleep(DELAY)
            
            for command in [
                # 'SYST:LOC', 
                'VOLT:UNIT VPP',  # Set voltage to peak-peak.
                'APPL:SIN 16000,2.5,0.5',  # Set sinus.
                'OUTP ON',  # Turn output on.
                'SYST:RWL',  # Lock front buttons.
            ]:
                print(dg1022.write(command))
                sleep(DELAY)


if __name__ == '__main__':
    main()

Re: PyVisa / Remote Steuerung Messgerät

Verfasst: Donnerstag 20. September 2018, 11:19
von Jaco
@ Blackjack - danke für den Hinweis, werde ich noch einbauen.
@ Wie blackjack schreibt, ist das bei reinen write Kommandos ohne Effekt. Da muss man das "zu Fuß" machen. Wobei die Lösung von blackjack natürlich elegant ist :-)