View previous topic :: View next topic |
Author |
Message |
Macbeth n00b

Joined: 23 Jan 2004 Posts: 18
|
Posted: Fri Feb 03, 2006 7:17 pm Post subject: Kommunikatin über serielle Schnittstelle |
|
|
Hi zusammen,
ich habe hier ein Windowsprogramm, welches über die serielle Schnittstelle mit einem KFZ-Waageinterface verbunden ist. Soll heissen, dass man damit PKWs wiegen kann.
Allerdings ist die Windows-Software nicht wirklich toll und ich würde sowieso lieber Gentoo einsetzen. Nur gibt es für Linux keine Spftware für dieses Interface. Also will ich mir da selbst was schreiben, nur fehlen mir halt die Spezifikationen des Interfaces und das Wissen über den seriellen Port.
Ich habe einfach mal den Seriellen Port belauscht:
Request: 50 01 06 01 01 57 5D
Answer: A0 01 0B 01 80 00 00 00 00 0F 24 2F
Antwort entspricht 0kg
Request: 50 01 06 01 01 57 5D
Answer: A0 01 0B 01 80 41 A0 00 00 0F C5 D0
Antwort entspricht 20kg
Request: 50 01 06 01 01 57 5D
Answer: A0 01 0B 01 80 42 C8 00 00 0F AE B9
Antwort entspricht 100
Request:50 01 06 01 01 57 5D
Answer: A0 01 0B 01 80 45 9E C0 00 0F 3F 4A
Antwort entspricht 5000kg
Request: 50 01 06 01 01 57 5D
Answer: A0 01 0B 01 80 46 43 A0 00 0F 81 8C
Antwort entspricht 12520kg
Request wird vom PC gesendet, die Antwort kommt vom Interface. Soweit ich weiss, übermittelt das Interface die Gewichte immer auf 20kg genau. Die kleinste Einheit ist also nach 0kg 20kg
Ich habe nun jetzt leider keine Ahnung vom seriellen Port. Läuft dort die Kommunikation immer hex ab?
Der Request ist ja immer gleich, das könnte man also nachprogrammieren.
Aber die Antwort verstehe ich nicht ganz.
Die ersten 5 Pakete sind immer gleich, was könnte dies sein?
Ich rate mal, dass die folgenden 4 Pakete irgendwie das Gewicht verschlüsseln, da diese bei 0kg genau alle 0 sind.
dann folgt immer ein 0F, was könnte dies sein? Und was bedeuten die letzten beiden Pakete?
Kann man aus den hier geposteten Daten irgendwie Rückschlüsse auf das übermittelte Gewicht ziehen?
Ein Hexeditor hat mich da bisher nicht weitergebracht, der zeigt nicht wirklich brauchbare Daten an.
Wenn sich hier jemand mit der seriellen Schnittstelle auskennt, wäre ich für jeden Tip dankbar.
Viele Grüsse
Macbeth |
|
Back to top |
|
 |
Salathe n00b

Joined: 02 Jan 2006 Posts: 57 Location: Switzerland
|
Posted: Fri Feb 17, 2006 3:47 pm Post subject: |
|
|
Moin Moin
Ich hab vor einiger Zeit mal schnell drübergeschaut aber die Lösung nicht gleich gesehen. Da ich aber im moment nichts mehr zu Lesen habe, und ausserdem auf knifflige Aufgaben stehe, werde ich es nochmals versuchen.
Hoffentlich kannst du es noch brauchen. Vorausgesetzt, dass ich jehmals eine Antwort finden werde.
Gruss
Salathe |
|
Back to top |
|
 |
Macbeth n00b

Joined: 23 Jan 2004 Posts: 18
|
Posted: Fri Feb 17, 2006 3:56 pm Post subject: |
|
|
ja, ich könnte die Lösung noch brauchen, bin da selbst noch nicht wirklich weiter gekommen.
schonmal vielen Dank
Grüsse
Markus |
|
Back to top |
|
 |
Salathe n00b

Joined: 02 Jan 2006 Posts: 57 Location: Switzerland
|
Posted: Wed Feb 22, 2006 9:09 am Post subject: |
|
|
Moin Moin
Mal ein paar Fragen:
Sind die entsprechenden Kiloangaben das exakte Gewicht oder das, was das Gerät anzeigt??
Kannst noch was wägen, so etwa 40 Kilo oder so?
Im Moment bin ich noch unendlich weit von der Lösung entfernt. Die Hoffnung schwindet.
Gruss
Salathe |
|
Back to top |
|
 |
Macbeth n00b

Joined: 23 Jan 2004 Posts: 18
|
Posted: Fri Feb 24, 2006 4:28 pm Post subject: |
|
|
Hi,
vielen Dank für Deine Mühen, ich bin da auch noch nicht weiter gekommen.
Hier mal noch ein paar Werte:
A0 01 0B 01 80 47 28 48 00 0D 01 0C (43100kg)
A0 01 0B 01 80 42 20 00 00 0F 46 51 (40kg)
A0 01 0B 01 80 46 08 40 00 0F 2A 35 (8720 kg)
A0 01 0B 01 80 C1 A0 00 00 0F 45 50 (-20kg)
A0 01 0B 01 80 C2 20 00 00 0F C6 D1 (-40kg)
Das sind die Antworten, die auf dem seriellen Port ankommen von dem Interface, das an die Waage angeschlossen ist.
Die Waage kann bis 60000kg wiegen, darüber würde sie durchbrechen )
Ich habe jetzzt nur 2 negative Werte, aber den negativen Werten sollen nach unten auch keine Grenzen gesetzt sein.
Die kg-Zahlen sind die Zahlen, die das Interface und die Software anzeigen. Also muss das Interface die kg-Zahl irgendwie in diesen Hex-Werten verschlüsseln und an die Software auf dem PC schicken. Dort wird sie dann wieder von der Software dekodiert und angezeigt.
Wenn man hier von Kodierung sprechen kann...
Was am Interface von der Waage ankommt, wissen wir noch nicht. Wir können auch noch nicht sagen, ob dsa Interface diese Hex-Werte erzeugt oder nur weiterreicht.
Die Kilogramm-Angaben sind die Angaben, die das Interface und die Software anzeigen. Das Interface zeigt bis auf 20kg genau an. In wie weit jetzt die Waage genauer wiegen kann oder es auch macht, wissen wir nicht.Kann gut sein, dass die Hex-Werte den genauen kg-Wert darstellen und nur vom Interface und der Software auf volle 20kg gerundet werden.
Viele Grüsse
Markus |
|
Back to top |
|
 |
slick Bodhisattva


Joined: 20 Apr 2003 Posts: 3495
|
Posted: Fri Feb 24, 2006 11:54 pm Post subject: |
|
|
Interessantes Rätzel :-)
Also ich kenne mich zwar nicht so sehr damit aus, aber letzendlich funktioniert jeder Sensor nach dem gleichen Prinzip. Widerstände ändern sich und somit der fliessende Strom. Wird dieser gemessen kann ich darauf auf die Änderung des Widerstandes und somit die Ursache schliessen.
D.h. bei den übergebenen Werten kann es sich entweder um die gemessenen Widerstand handeln oder eine Spannung aus dem Widerstand resultierend. Ich glaube nicht dass das Gerät die fertig berechneten Kilo-Werte übergibt, das wird es der Software überlassen.
Desweiteren halte ich es für wahrscheinlich das im Messbereich von 20-60000kg mehrere Widerstände (Sensoren) gemessen werden müssen, da jeder nur einen bestimmten Meßbereich abdenkt. (z.B. von 0-100Kg oder von 20000-40000kg)
Was also meines Erachtens als Erstes gemacht werden müßte irgendwie herrauszutüffteln mit wievielen "Einzelsensoren" (Widerständen) das Gerät bestückt ist.
Soweit dazu. Ok, analysieren wir mal etwas die bisherigen Ergebnisse...
Vergleichen wir mal die Werte. Ich nehme mal als Beispiel die 40 kg (A0 01 0B 01 80 42 20 00 00 0F 46 51)
Also die ersten 5 Paare (A0 01 0B 01 80) sind bei allen Messungen identisch, ich denke hier handelt es sich um eine Art "Beginn der Übertragung" oder "Alles ok"-Signal.
Bleiben also 42 20 00 00 0F 46 51 übrig. Auffällig ist das das mittelste Paar (00) bei allen Messungen gleich ist, d.h. evt. stellt dieses nur eine Art Trenner während der Übertragung dar, d.h. es könnte durchaus sein das nur die ersten und letzten 3 Paare den Wert übertragen. (42 20 00 und 0F 46 51)
Gehen wir mal davon aus wir haben nur diese 6 extrahierten Paare. Diese 6 Paare extrahieren wir mal aus allen anderen Messungen:
C2 20 00 0F C6 D1 (-40kg)
C1 A0 00 0F 45 50 (-20kg)
00 00 00 0F 24 2F - 0kg
41 A0 00 0F C5 D0 - 20kg
42 20 00 0F 46 51 - 40kg
42 C8 00 0F AE B9 - 100 kg
45 9E C0 0F 3F 4A - 5000Kg
46 08 40 0F 2A 35 - 8720 kg
46 43 A0 0F 81 8C - 12520kg
47 28 48 0D 01 0C - 43100kg
Hier fällt auf das das erste Paar (41 bei 20 kg) bei der Messung von 0 kg und 20 kg sprunghaft von 00 auf 42 steigt und dann relativ unverändert (bis 47) bleibt. D.h. rein gedanklich wäre es möglich dass das erste Paar den Wertebereich von um die 20kg erfasst. Werden es mehr wie 20 kg verändert sich der Widerstand des Sensors nurnoch unmerklich. D.h. hier wäre eine Test-Messung mit 5 oder 10 kg sicher interessant.
Das Zweite was auffällt ist das Paar 0D bei 43100 kg. Dieses kommt hier nur ein einziges Mal vor und ist bei den anderen Messungen immer 0F. Hier liegt die Vermutung nahe das dies der Sensor im Meßbereich für sehr große Massen ist.
Ok, das war alles rein spekulativ. Ich spekuliere daher mal bei der Messung von einem Gewicht von um die 50000kg wird das Ergebnis etwa so aussehen:
A0 01 0B 01 80 (47 oder 48) ?? ?? 00 0(D oder E) ?? ??
Wenn dem so ist sind wir schon etwas näher. Oder auch nicht, denn war ja alles nur reines Gedankenspiel eines Unwissenden ;-) |
|
Back to top |
|
 |
schmutzfinger Veteran


Joined: 26 Oct 2003 Posts: 1287 Location: Dresden/Germany
|
Posted: Sat Feb 25, 2006 1:47 pm Post subject: |
|
|
Ich würde Messungen auf jeden Fall mehrfach machen, um sicherzustellen das das Ergebniss auf jeden Fall mit dem Gewicht zu tun hat und keine anderen Daten wie Zeit etc übertragen werden. Das Gerät wird sicher genauer messen als 20kg aber die Software macht dann halt die 20kg draus. Messe deine Gewichte auf ner genaueren Waage nach, zumindest in dem Rahmen wo das möglich ist. Aber mit ner Personenwaage sollte man vielleicht bis 200kg kommen. In dem Bereich würde ich dann Messreihen in kg Schritten machen um rauszukriegen ab wann die Software ab-/aufrundet. Und bei welchem Gewicht welches Paar kippt. Ausserdem würde ich mir die Werte binär aufschreiben, ich denke da erkennt man eher ein Muster, du weisst ja nicht ob das big- oder little-endian ist.
Du brauchst die Waage nicht um rauszukriegen was die Software macht, installier die Software auf nem anderen Rechner und schliesse an dem über Serialport deinen Linux Rechner an. Dann kannst du beliebige Messergebnisse an die Software schicken und gucken was die draus macht. Problem ist das das Teil vielleicht nen Fehlerschutzcode nutzt, den du kennen musst um gültige Werte zu generieren.
Frage einfach den/die Hersteller, wenn der Hersteller der Software nichts sagt dann vielleicht der, der Waage. Der Hersteller der Waage wird wahrscheinlich die Sensoren nicht selber bauen also schraub die Kiste auf und gucke die die Chips an. |
|
Back to top |
|
 |
Salathe n00b

Joined: 02 Jan 2006 Posts: 57 Location: Switzerland
|
Posted: Mon Feb 27, 2006 9:50 am Post subject: |
|
|
Moin Moin
Interessante Ausfürung slick! Bin beeindruckt.
Leider giebt es da ein kleines Problem:
Die Werte werden nicht ständig grösser:
45 9E C0 0F 3F 4A - 5000Kg
46 08 40 0F 2A 35 - 8720 kg
Der Wert an der dritten Stelle müsste hier grösser werden.
Die Erklärung mit den Wiederstandswerten ist nicht schlecht. Da aber zur Übertragung nach seriellem Standard trotzdem ein IC benötigt wird, kann genau so gut der Kilowert übertragen werden. Ich würde es auf jeden Fall nicht ausschliessen.
Ich glaube ASCII kann man ausschliessen, da keine Zahlenwerte herauskommen (wäre ja auch zu einfach!)
Auch das Direkte umrechnen des sich ändernden Blocks bringt nichts, da die Werte nicht ständig grösser werden.
Die Idee von schmutzfinger mit dem Hersteller ist nicht schlecht. Musst einfach deinen Scharm einsetzten.
Mit dem Linuxrechner am Serialport könntest du eine Liste aller möglichen Werte erstellen. Dass sind 2177953337809371136, wovon aber nicht alle eine gültige Anzeige liefern werden. Du sollest etwa 3000-60000 Ausgaben erhalten. (je nach genauigkeit)
Gruss
Salathe |
|
Back to top |
|
 |
manuels Advocate


Joined: 22 Nov 2003 Posts: 2146 Location: Europe
|
Posted: Mon Feb 27, 2006 12:49 pm Post subject: |
|
|
Quote: | 45 9E C0 0F 3F 4A - 5000Kg
46 08 40 0F 2A 35 - 8720 kg
Der Wert an der dritten Stelle müsste hier grösser werden. |
naja, nicht unbedingt. könnte auch sein, dass das eine prüfsumme oder so ist.
wieviel kann die waage denn maximal wägen? _________________ Build your own live cd with catalyst 2.0! |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|