Come utilizzare SCPI su HP33120A tramite RS232?


9

Ho un vecchio generatore di funzioni Hewlet Packard 33120A (dovrebbe essere dello stesso tipo di Agilent 33120A ) e vorrei controllarlo con MCU (ATMega). Il generatore ha RS232 e usa i comandi SCPI.

Ho realizzato un semplice convertitore da RS232 a TTL con MAX232, solo con linee RX e TX. Secondo la Guida dell'utente (capitolo 4, sezione DTR / DSR Handshake Protocol) ho collegato il DSR alla logica TRUE (tensione negativa) e il DTR non è collegato. Questa configurazione dovrebbe disabilitare l'handshake hardware.

Ora posso collegare il convertitore all'MCU o al computer. Per il mio primo esperimento ho usato il computer e questo script 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()

Funziona senza problemi. Il generatore ha impostato la sua uscita su 30kHz come previsto. Il problema è, quando provo a leggere qualche risposta dal generatore. Ad esempio, questo dovrebbe restituire il nome del dispositivo:

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

Sono abbastanza sicuro che la risposta sia memorizzata nel buffer di output del generatore ma in realtà non vengono trasmessi dati.

Esiste un comando per attivare la trasmissione di dati dal buffer? O devo abilitare l'handshake hardware?

C'è qualcuno che ha questo generatore? Lo usi con RS232 e SCPI?


Non posso rispondere a questa domanda ma sono interessato alle risposte, quindi hai il mio voto positivo
Andy aka

Come fai a sapere che non sta trasmettendo? Non hai alcun codice lì per leggerlo. Hai provato un programma terminale o un monitor della porta seriale? O un oscilloscopio?
Jeanne Pindar,

Ho un analizzatore logico Saleae collegato ai pin RX / TX e nello script Python, c'è una s.readline()funzione (ho modificato la mia domanda, grazie).
Vasco,


Sul computer, disattivare il buffering seriale e impostare la dimensione del buffer seriale su zero. Il readline si blocca indefinitamente? (dovrebbe essere quello che hai descritto)
David,

Risposte:


3

Il modo più semplice per eseguire il debug di SCPI su RS-232 è utilizzare un programma terminale con l'interfaccia seriale esistente. Basta digitare il comando e vedere cosa ritorna. Il terminale ti permette di armeggiare abbastanza facilmente con i caratteri di baud rate, handshaking, eco e terminazione senza fare affidamento su una libreria di comunicazione seriale sconosciuta nel mezzo (ciò che digiti è ciò che invii, ciò che viene ricevuto è ciò che viene mostrato).

* IDN? non richiede alcun trigger speciale o richiesta di risposta. Se il comando è supportato (secondo il manuale, lo è), se il carattere di terminazione è corretto (cosa che sembra essere, poiché il tuo precedente lavoro Python ha avuto un certo successo) e se l'handshaking è corretto, lo strumento dovrebbe rispondere immediatamente con la stringa di identificazione.

Una volta che hai capito esattamente cosa si aspetta e ritorna lo strumento, puoi creare facilmente il tuo script Python.


1
Informazioni utili per me mister guruman +1. Che cosa è successo all'OP?
Andy aka l'

1

È più tardi ma ...

Prova a collegare il DSR alla tensione positiva. Il mio 33120A risponde solo se lo faccio al posto di una tensione negativa.

Uso RealTerm con un convertitore FTDI USB-RS232 e collego CTS (PC) a DSR (33120a) ma gestendo (e mantenendo) la tensione di CTS tramite RealTerm durante le comunicazioni (c'è un'opzione per farlo nel programma).

Saluti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.