Forum: Mikrocontroller und Digitale Elektronik Datenverbindung PeakTech 4090 Tischmultimeter


von Max M. (binarybear)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe mir ein neues Multimeter geleistet und bin gerade dabei mir 
dafür ein kleines Programm zu schreiben was die Messdaten direkt in mein 
Messprotokoll schreiben soll...
Ich konnte die Datenverbindung erfolgreich aufbauen und sehe auch, dass 
das Multimeter Daten sendet......doch leider entsprechen die nicht 
einmal annähernd der im 'PeakTech 4090 Interface Protokoll' (siehe 
Anhang) angegebenen Spezifikation???

Statt Einsen und Nullen gibt das Gerät lediglich folgendes Gedöhns aus:
105016;000:3105016;000:3105016;000:3105016;000:3105016;000:3105016;000:3 
105016;000:3105016;000:3105016;000:34905016;000:3105016;000:3105016;000: 
3105016;000:3

Könnte mir bitte jemand verraten wo mein Denkfehler liegt? ^^
Danke!

Mit freundlichen Grüßen
BB

: Bearbeitet durch User
von Thilo R. (harfner)


Lesenswert?

Dein Denkfehler liegt erst einmal in Deinem Ausgabeformat. Ich kann 
nicht sehen, wie 000:3105016 über den Draht gewandert ist, irgendetwas 
hast Du mit den Daten angestellt, aber was?
Stell mal die empfangenen Bytes als Hex rein, vieleicht sieht man dann 
etwas. Bis jetzt würde ich vermuten, Du siehst nur Speichermüll.

Edit: Du schreibst "Nullen und Einsen". Kann es sein, dass Du Dir 
vorstellst, da kommen wirklich Strings wie "01001011", also Ascii Nullen 
und Einsen?
Das natürlich nicht, das sind Bytes, die man z.B. als Hex-Zahl pro Byte 
ausgibt. Die letzten beiden Bytes sind nicht etwa "0001101 001010"
sondern 0x0D 0x0A bzw '\r' '\n' oder chr(13) chr(10). Du hast ja nicht 
einmal die Sprache angegeben.

: Bearbeitet durch User
von Max M. (binarybear)


Angehängte Dateien:

Lesenswert?

Glaub nicht das das nur Garbage ist. :(

Der markierte Text (siehe Bild) stellt die gemessene Spannung dar...
Folgende fnc hat diese Ausgabe generiert:

Sub Read()
  Me.Handshake = Handshake.None
  Me.ReadTimeout = 5000
  Me.DtrEnable = True
  Me.Open()
  Do
    Console.WriteLine(Me.ReadLine)
  Loop
End Sub

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Ach neee :-( Das wird wieder so ein stundenlanges Hin und Her mit Detail 
aus der Nase ziehen.

Zeichenfunktionen zum Schreiben von Binärdaten nehmen ist schon scheiße. 
Es nicht einsehen wollen ist noch schlechter.

Daneben tippe ich mal darauf, dass übersehen wurde dass die Übertragung 
mit  7O1, statt den beliebten 8N1, erfolgt. D.h. da ist wahrscheinlich 
noch jeweils das Odd-Parity Checkbit in die Daten gerutscht.

Damit bin ich dann aus raus. Viel Spaß mit der Salamitaktik.

von Thilo R. (harfner)


Lesenswert?

Ach Du großer Gott, stimmt, wer verwendet denn heutzutage 7o1?
Aber falls die 5012 stimmen, hat der TE Glück. Irgendwie hat er 7o1 
eingestellt, es funktioniert jedenfalls.

Ok, die "05012" sind digit 4 bis digit 0 aus dem Protokoll. Weil dieses 
Protokoll die Ziffern als ASCII verschickt, sind die tatsächlich lesbar. 
Die '1' davor ist 0x31, also die 2. Zeile der Range-Tabelle. Das ';' ist 
das Function-Byte ';'= 0x3B, also 1. Zeile der Function-Tabelle, also 
Voltage. Für Voltage ist die zweite Zeile der Range-Tabelle 22V.
Insgesamt 5,012V.

Nach dem ';' kommen Status und Option1 und 2, alle 0. Der ':' ist option 
3, 0x3A, also DC und auto. Die '3' ist option 4, 0x33 heißt Hold und LPF 
aktiv. Dann kommt "\r\n" und beendet die Zeile.

An den den TE: lerne, einzelne Bytes zu verarbeiten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.