Jak korzystać z SCPI na HP33120A przez RS232?


9

Mam stary generator funkcji Hewlet Packard 33120A (powinien być tego samego typu co Agilent 33120A ) i chciałbym nim sterować za pomocą MCU (ATMega). Generator ma RS232 i używa poleceń SCPI.

Zrobiłem prosty konwerter RS232 na TTL z MAX232, tylko z liniami RX i TX. Zgodnie z instrukcją obsługi (rozdział 4, sekcja Protokół uzgadniania DTR / DSR) podłączyłem DSR do logicznej wartości PRAWDA (napięcie ujemne) i DTR nie jest podłączony. Ta konfiguracja powinna wyłączyć sprzętowy uścisk dłoni.

Teraz mogę podłączyć konwerter do MCU lub komputera. Do pierwszego eksperymentu użyłem komputera i tego skryptu Python:

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()

Działa to bez problemu. Generator ustawił swoją moc wyjściową na 30 kHz zgodnie z oczekiwaniami. Problem polega na tym, że próbuję odczytać odpowiedź generatora. Na przykład powinno to zwrócić nazwę urządzenia:

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

Jestem prawie pewien, że odpowiedź jest przechowywana w buforze wyjściowym generatora, ale w rzeczywistości żadne dane nie są przesyłane.

Czy jest jakieś polecenie wyzwalające przesyłanie danych z bufora? Czy potrzebuję włączyć sprzętowy uścisk dłoni?

Czy jest ktoś, kto ma ten generator? Czy używasz go z RS232 i SCPI?


Nie mogę odpowiedzieć na to pytanie, ale interesują mnie odpowiedzi, więc masz moje głosowanie
Andy aka

Skąd wiesz, że to nie nadaje? Nie masz tam kodu, aby go przeczytać. Czy próbowałeś programu terminalowego lub monitora portu szeregowego? A może oscyloskop?
Jeanne Pindar

Mam analizator logiki Saleae podłączony do pinów RX / TX, aw skrypcie Python jest s.readline()funkcja (edytowałem moje pytanie, dziękuję).
vasco


Na komputerze wyłącz buforowanie szeregowe i ustaw rozmiar bufora szeregowego na zero. Czy linia readline blokuje się na czas nieokreślony? (powinno pochodzić z tego, co opisałeś)
David

Odpowiedzi:


3

Najłatwiejszym sposobem debugowania SCPI przez RS-232 jest użycie programu terminalowego z istniejącym interfejsem szeregowym. Wystarczy wpisać polecenie i zobaczyć, co wróci. Terminal pozwala dość łatwo manipulować szybkością transmisji, uzgadnianiem, echo i znakami zakończenia bez polegania na jakiejś nieznanej szeregowej bibliotece komunikacyjnej pomiędzy nimi (to, co wpisujesz, to, co wysyłasz, co jest odbierane, co jest pokazywane).

* IDN? nie potrzebuje żadnego specjalnego wyzwalacza ani monitu o odpowiedź. Jeśli polecenie jest obsługiwane (zgodnie z instrukcją), jeśli znak zakończenia jest poprawny (wydaje się, że tak, ponieważ poprzednia praca w Pythonie zakończyła się pewnym sukcesem) i jeśli uzgadnianie jest prawidłowe, instrument powinien natychmiast odpowiedzieć ciąg identyfikacyjny.

Kiedy dokładnie dowiesz się, czego instrument oczekuje i powróci, możesz z łatwością stworzyć skrypt w języku Python.


1
Przydatne informacje dla mnie, panie guruman +1. Co się stało z PO?
Andy alias

1

Jest później, ale ...

Spróbuj powiązać DSR z dodatnim napięciem. Mój 33120A reaguje tylko wtedy, gdy robię to zamiast powiązanego z napięciem ujemnym.

Używam RealTerm z konwerterem FTDI USB-RS232 i podłączam CTS (PC) do DSR (33120a), ale zarządzam (i utrzymuję) napięcie CTS przez RealTerm podczas komunikacji (Istnieje taka możliwość w programie).

Pozdrowienia.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.