J'ai un ancien générateur de fonctions Hewlet Packard 33120A (il devrait être du même type que Agilent 33120A ) et je voudrais le contrôler avec MCU (ATMega). Le générateur a RS232 et utilise des commandes SCPI.
J'ai fait un simple convertisseur RS232 en TTL avec MAX232, juste avec des lignes RX et TX. Selon le guide de l'utilisateur (chapitre 4, section Protocole de prise de contact DTR / DSR), j'ai lié le DSR à la logique TRUE (tension négative) et le DTR n'est pas connecté. Cette configuration devrait désactiver la négociation matérielle.
Maintenant, je peux connecter le convertisseur au MCU ou à l'ordinateur. Pour ma première expérience, j'ai utilisé un ordinateur et ce 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()
Cela fonctionne sans aucun problème. Le générateur a réglé sa sortie à 30 kHz comme prévu. Le problème est, quand j'essaye de lire une réponse du générateur. Par exemple, cela devrait retourner le nom du périphérique:
s.write('*IDN?\n')
print s.realine()
Je suis presque sûr que la réponse est stockée dans le tampon de sortie du générateur mais aucune donnée n'est réellement transmise.
Existe-t-il une commande pour déclencher la transmission de données à partir du tampon? Ou dois-je activer la négociation matérielle?
Y a-t-il quelqu'un qui a ce générateur? L'utilisez-vous avec RS232 et SCPI?
la source
s.readline()
fonction (j'ai édité ma question, merci).Réponses:
La façon la plus simple de déboguer SCPI sur RS-232 est d'utiliser un programme de terminal avec votre interface série existante. Tapez simplement la commande et voyez ce qui revient. Le terminal vous permet de manipuler assez facilement le débit en bauds, la poignée de main, l'écho et les caractères de terminaison sans compter sur une bibliothèque de communication série inconnue entre les deux (ce que vous tapez est ce que vous envoyez, ce qui est reçu est ce qui est affiché).
* IDN? n'a pas besoin de déclencheur spécial ni d'invite de réponse. Si la commande est prise en charge (selon le manuel, elle l'est), si le caractère de terminaison est correct (ce qu'il semble être, puisque votre travail Python précédent a eu un certain succès) et si la négociation est correcte, l'instrument devrait répondre immédiatement avec la chaîne d'identification.
Une fois que vous avez compris exactement ce que l'instrument attend et renvoie, vous pouvez ensuite créer facilement votre script Python.
la source
C'est plus tard mais ...
Essayez de lier le DSR à une tension positive. Mon 33120A ne répond que si je le fais à la place d'une tension négative.
J'utilise RealTerm avec un convertisseur FTDI USB-RS232 et attache CTS (PC) à DSR (33120a) mais gère (et maintient) la tension de CTS via RealTerm pendant les communications (il y a une option pour le faire dans le programme).
Cordialement.
la source