Blog der Heimetli Software AG

Multimeter Metex M4650CR seriell auslesen

Das gute alte Multimeter von Metex funktioniert immer noch, und kommt fast bei jeder Bastelei zum Zuge.

Heute habe ich das serielle Kabel wieder ausgegraben und das Gerät mit einem Linux-PC verbunden. Das Kabel ist sehr speziell und kann auch verkehrt herum eingesteckt werden. Das folgende Foto dokumentiert wie es bei meinem Gerät angeschlossen werden muss.

Serielles Kabel am Metex M4650CR

Anscheinend gibt es mehrere Multimeter die unter der Bezeichnung M4650 verkauft wurden, also schaut euch euer Gerät genau an.

Das Kabel hat eine optische Trennung eingebaut, und braucht dafür eine Spannung von der Schnittstelle. Diese Spannung wird von einem Handshake-Signal abgenommen, was bedeutet dass der Pegel der Leitung fest eingestellt werden muss.

Wer genau hinschaut, erkennt dass am anderen Ende des Verbindungskabels ein 25pliger Stecker ist. Mein Setup brauchte deshalb einen USB-Seriell Adapter, einen 9 auf 25 Umsetzer, und schlussendlich das Kabel des Gerätes...

Das Programm zum Auslesen

Die Schnittstelle ist ganz anders konfiguriert als das heute üblich ist. Geräte mit 1200 Baud gibt es kaum mehr, und 7 Bit mit 2 Stopbits sind ebenfalls ungewöhnlich. Beachten sie die Anweisungen für die Handshake-Signale. Wie oben erklärt, läuft gar nichts wenn sie nicht richtig stehen.

import time
import serial

ser = serial.Serial( port     = "/dev/ttyUSB0",
                     baudrate = 1200,
                     parity   = serial.PARITY_NONE,
                     stopbits = serial.STOPBITS_TWO,
                     bytesize = serial.SEVENBITS,
                     rtscts   = False )

ser.setDTR( 1 )
ser.setRTS( 0 )

buffer = bytearray()

ser.write( b"D\r" )

while True:
    if ser.inWaiting() > 0:
       ch = ser.read()

       if ch == b"\r":
           print( buffer.decode("ascii") )
           buffer.clear()
           ser.write( b"D\r" )
       else:
           buffer.extend( ch )

    time.sleep( 0.05 )

Das Multimeter schickt einen String fixer Länge, terminiert durch ein Carriage Return. Wenn es auf 20V Gleichspannung eingestellt ist sieht die Zeile so aus:

DC 00.695 V  
DC 00.701 V  
DC 00.706 V  
DC 00.718 V  
DC 00.702 V  
DC 00.710 V  
DC 00.704 V  
DC 00.701 V  
DC 00.689 V  
DC 00.690 V  
DC 00.693 V  
DC 00.693 V  
DC 00.690 V  

Hinter dem 'V' gibt es noch eine ganze Anzahl Spaces damit die Zeilen in allen Messbereichen gleich lang sind.