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.