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?
źródło
s.readline()
funkcja (edytowałem moje pytanie, dziękuję).Odpowiedzi:
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.
źródło
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.
źródło