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?
s.readline()
funkcja (edytowałem moje pytanie, dziękuję).