
Le Voltcraft VC670 connecté par son câble RS232 DB-25 d'origine, via un adaptateur DB-25/DE-9
Avec cet appareil, il faut en premier lieu activer la transmission vers l'ordinateur en maintenant la touche "HOLD" pendant une à deux secondes. Après le second bip, un symbole spécique apparait à l'écran pour indiquer que la transmission activée.

Bizarre comme symbole, non ?
DB-25 DE-9 Signal .-------. | |------ 3 2 RXD | |------ 20 4 DTR | |------ 4 7 RTS | | | |------ 2 3 TXD | |------ 1 - Shield ground | __/ \--/ | | | | | |

Extrait de la documentation technique du VC670, la liaison est (heureusement !) opto-isolée
Pour fonctionner, RTS doit être maintenu à une tension négative (pour le pull-down) et DTR à une tension positive (collecteur du photo-transistor). Il serait facile de couper le câble et de le brancher directement à un convertisseur USB-TTL série : il faudrait alors brancher RTS sur la masse, et DTR sur le +5V (via une résistance de par exemple 100Ω par sécurité pour limiter le courant en cas de court-circuit. Il n'y aurait alors plus besoin de s'embêter avec DTS et DTR.
Le manuel donne du code BASIC en exemple pour ouvrir le port série :
OPEN "COM1:4800,n,7,2,rs,cs,ds,cd" FOR RANDOM AS #1Ce qui est bien gentil, ça aurait très bien pu être du Cobol. Sous Linux, pour tester la liaison avec picocom on peut taper :
$ picocom --baud 4800 --raise-dtr --lower-rts --databits 7 --imap crcrlf /dev/ttyUSB0Comme on ne fait que recevoir et jamais transmettre, il est inutile de spécifier la durée de 2 bits de stop. En python, rapidement, on pourrait coder quelque chose comme ceci :
import serial with serial.Serial("/dev/ttyUSB0", 4800, bytesize=7) as ser: ser.rts = False ser.dtr = True while(True): string = ser.read_until(b'\r').decode('ascii').strip() if len(string) == 13: print(string)Ou alors, comme cela :
import serial with serial.Serial("/dev/ttyUSB0", 4800, bytesize=7) as ser: ser.rts = False ser.dtr = True string = "" ser.reset_input_buffer() while(True): b = ser.read() try: c = b.decode("ascii") if c != "\r": string+=c else: if len(string) == 13: print(string) # OK string = "" except: continueLes trames font toujours 14 caractères de long (13 sans le retour chariot), c'est spécifié dans le manuel. Voilà quelques trames obtenues en pressant un peu au hasard sur les boutons des différentes fonctions :
AC 0.001 V AC 0.001 V DC 000.1 mV DC -005.9 mV DC -012.0 mV DC -018.0 mV AC -02.14 mA AC 00.84 mA AC 00.70 mA AC 00.60 mA AC 0.052 V AC 0.023 V OH 00.20MOhm OH 40.00MOhm OH 40.00MOhm FR 0.065 KHz FR 2.545 KHz FR 0.660 KHz FR 0.066 KHz FR 0.066 KHz FR 0.068 KHz AC 0.019 V OH 00.18MOhm OH 40.00MOhm CA 4.000 nF CA 0.495 nF DI 0228 mV DI 0275 mV DI 4000 mV

Oui, cette image (faite avec une scanner car il n'y avait pas d'APN à l'époque) date du début des années 2000 :x