Wie verwende ich SCPI auf HP33120A über RS232?

9

Ich habe einen alten Hewlet Packard 33120A-Funktionsgenerator (er sollte vom selben Typ sein wie Agilent 33120A ) und möchte ihn mit der MCU (ATMega) steuern. Der Generator verfügt über RS232 und verwendet SCPI-Befehle.

Ich habe einen einfachen RS232-zu-TTL-Wandler mit MAX232 gemacht, nur mit RX- und TX-Leitungen. Gemäß Benutzerhandbuch (Kapitel 4, Abschnitt DTR / DSR-Handshake-Protokoll) habe ich den DSR an die Logik TRUE (negative Spannung) gebunden und DTR ist nicht angeschlossen. Diese Konfiguration sollte den Hardware-Handshake deaktivieren.

Jetzt kann ich den Konverter an die MCU oder an den Computer anschließen. Für mein erstes Experiment habe ich einen Computer und dieses Python-Skript verwendet:

import serial, sys, time

if __name__ == '__main__':
        if len(sys.argv) < 2:
                print 'Usage: %s <serial_port>' % sys.argv[0]
                sys.exit(1)

        s = serial.Serial(port=sys.argv[1], baudrate=2400, bytesize=8, parity='N', stopbits=2, timeout=None, xonxoff=0, rtscts=0)

        time.sleep(0.5)
        s.write('\n*CLS\n')
        time.sleep(0.5)
        s.write('SYST:REM\n')
        time.sleep(0.5)
        s.write('APPL:SIN 30E+3, 0.1\n')


        s.close()

Dies funktioniert problemlos. Der Generator hat seine Leistung wie erwartet auf 30 kHz eingestellt. Das Problem ist, wenn ich versuche, eine Antwort vom Generator zu lesen. Dies sollte beispielsweise den Gerätenamen zurückgeben:

        s.write('*IDN?\n')
        print s.realine()

Ich bin mir ziemlich sicher, dass die Antwort im Ausgangspuffer des Generators gespeichert ist, aber es werden tatsächlich keine Daten übertragen.

Gibt es einen Befehl zum Auslösen der Datenübertragung aus dem Puffer? Oder muss ich den Hardware-Handshake aktivieren?

Gibt es jemanden, der diesen Generator hat? Verwenden Sie es mit RS232 und SCPI?

vasco
quelle
Ich kann diese Frage nicht beantworten, aber ich bin an den Antworten interessiert, also hast du meine Stimme
Andy aka
Woher weißt du, dass es nicht sendet? Sie haben dort keinen Code zum Lesen. Haben Sie ein Terminalprogramm oder einen Monitor für die serielle Schnittstelle ausprobiert? Oder ein Oszilloskop?
Jeanne Pindar
Ich habe Saleae Logic Analyzer an RX / TX-Pins angeschlossen und im Python-Skript gibt es eine s.readline()Funktion (ich habe meine Frage bearbeitet, danke).
Vasco
Möglicherweise eine verwandte Frage: stackoverflow.com/questions/1093598/…
Szymon Bęczkowski
Deaktivieren Sie auf Ihrem Computer die serielle Pufferung und setzen Sie die Größe des seriellen Puffers auf Null. Blockiert die Readline auf unbestimmte Zeit? (Es sollte von dem sein, was Sie beschrieben haben)
David

Antworten:

3

Der einfachste Weg, SCPI über RS-232 zu debuggen, ist die Verwendung eines Terminalprogramms mit Ihrer vorhandenen seriellen Schnittstelle. Geben Sie einfach den Befehl ein und sehen Sie, was zurückkommt. Mit dem Terminal können Sie ziemlich einfach mit Baudraten-, Handshake-, Echo- und Beendigungszeichen herumspielen, ohne sich dazwischen auf eine unbekannte serielle Kommunikationsbibliothek verlassen zu müssen (was Sie eingeben, ist das, was Sie senden, was empfangen wird, wird angezeigt).

* IDN? benötigt keinen speziellen Auslöser oder eine Eingabeaufforderung. Wenn der Befehl unterstützt wird (laut Handbuch), wenn das Beendigungszeichen korrekt ist (was es zu sein scheint, da Ihre vorherige Python-Arbeit einige Erfolge hatte) und wenn das Handshake korrekt ist, sollte das Instrument sofort mit antworten die Identifikationszeichenfolge.

Sobald Sie genau herausgefunden haben, was das Instrument erwartet und zurückgibt, können Sie Ihr Python-Skript mühelos erstellen.

Adam Lawrence
quelle
1
Nützliche Infos für mich Herr Guruman +1. Was ist mit dem OP passiert?
Andy aka
1

Es ist später, aber ...

Versuchen Sie, DSR an positive Spannung zu binden. Mein 33120A reagiert nur, wenn ich dies anstelle einer negativen Spannung tue.

Ich verwende RealTerm mit einem FTDI USB-RS232-Konverter und schließe CTS (PC) an DSR (33120a) an, verwalte (und halte) jedoch die Spannung von CTS über RealTerm während der Kommunikation (es gibt eine Option, dies im Programm zu tun).

Grüße.

jm sc
quelle