Antwortformate¶
Nach dem Bereinigen (Kommunikation mit dem ELM327) bleibt Hex-Text. Wie er zu lesen ist, hängt davon
ab, ob Header an sind, ob das Fahrzeug CAN spricht und ob die Antwort in einen
CAN-Frame passt. Alle Beispiele auf dieser Seite prüft
tests/unit/test_docs_examples.py gegen den Code.
Ohne Header (Normalfall, ATH0)¶
Einteilige Antwort¶
Jede Zeile ist die vollständige Antwort eines Steuergeräts. Antworten zwei Steuergeräte (Motor und Getriebe), stehen zwei Zeilen da.
410C1AF8
Bytes |
Bedeutung |
|---|---|
|
positive Antwort auf Mode 01 (Mode + |
|
PID 0C, Motordrehzahl |
|
Daten A, B: (256 · 26 + 248) / 4 = 1726 1/min |
Mehrteilige CAN-Antwort (ISO-TP)¶
Passt eine Antwort nicht in einen CAN-Frame (mehr als 7 Bytes), setzt der ELM327 sie selbst zusammen und schreibt sie so (Datenblatt S. 42 ff., „Multiline Responses“):
00A
0: 430404200133
1: 0300C100
Zeile |
Bedeutung |
|---|---|
|
Länge der Nutzdaten: 10 Bytes (hex) |
|
Frame 0: Mode-Byte |
|
Frame 1: zwei weitere Codes; ein aufgefüllter Rest würde auf die Länge gekürzt |
Ergebnis: vier gespeicherte Codes P0420, P0133, P0300, U0100. Die Frame-Nummern
laufen 0 bis F und dann wieder 0. Fehlt ein Frame oder stimmt die Reihenfolge nicht,
meldet split_messages einen FrameSequenceError, statt falsche Daten zu liefern.
Mit Header (ATH1)¶
Senden zwei Steuergeräte gleichzeitig mehrteilige Antworten, mischt der ELM327 ohne
Header deren Frames (Datenblatt S. 45, Beispiel 09 04); eine Zuordnung ist dann
unmöglich. obd-diag erkennt das an Lücken in der Nummerierung oder unvollständigen
Nachrichten und wiederholt die lesende Anfrage einmal mit Headern. Danach wird wieder
ATH0 gesetzt; gelingt das nicht, bricht die Sitzung ab, damit niemand weiter falsch
liest.
Mit Header trägt jede Zeile ihren Absender, und die Frames werden je Steuergerät nach ISO 15765-2 zusammengesetzt:
7E8 10 0A 43 04 04 20 01 33
7E9 04 43 01 01 71
7E8 21 03 00 C1 00 00 00 00
Teil |
Bedeutung |
|---|---|
|
CAN-ID (11 Bit) des antwortenden Steuergeräts: Motor bzw. Getriebe |
|
PCI erster Frame: Typ 1, Länge 0x00A = 10 Bytes; dann 6 Datenbytes |
|
PCI Folge-Frame Nummer 1; bis zu 7 Datenbytes, Füllbytes am Ende werden abgeschnitten |
|
PCI Einzel-Frame mit 4 Datenbytes |
Ergebnis, nach Steuergeräte-Adresse geordnet: 7E8 meldet P0420, P0133, P0300,
U0100; 7E9 meldet P0171.
Format |
Beispiel |
Header |
|---|---|---|
CAN 11 Bit |
|
3 Hex-Ziffern CAN-ID |
CAN 29 Bit |
|
4 Bytes, OBD-Antworten |
J1850, ISO 9141, KWP |
|
3 Header-Bytes (Priorität, Ziel, Quelle), am Ende 1 Prüfbyte |
Das Prüfbyte älterer Protokolle wird entfernt, aber nicht geprüft; der ELM327 verwirft
fehlerhafte Nachrichten selbst bzw. meldet <DATA ERROR.
Fehlercodes: das Zählbyte bei CAN¶
Bei CAN folgt auf das Mode-Byte immer ein Zählbyte (SAE J1979), danach je Code zwei
Bytes. Bytes nach den gezählten Codes sind Füllbytes und werden ignoriert; sind es zu
wenige, ist die Antwort kaputt (ValueError). Ältere Protokolle haben kein Zählbyte
und füllen jede Zeile mit 00 00 auf drei Codes auf.
Protokoll |
Antwort auf |
Codes |
|---|---|---|
CAN |
|
Zählbyte |
CAN, keine Codes |
|
Zählbyte |
J1850/ISO 9141/KWP |
|
P0420, P0133; |
Ob CAN, kommt aus ATDPN (Kommunikation mit dem ELM327). Eine Antwort ohne Zählbyte bei CAN wird
bewusst nicht toleriert. Der ELM327-emulator lässt das Zählbyte weg; das korrigieren
die Tests, nicht der Produktcode (Testen ohne Auto).
Ablehnungen (7F)¶
Ein Steuergerät kann eine Anfrage mit 7F <Mode> <Grund> ablehnen (Codes nach
ISO 14229-1 / ISO 15031-5).
Antwort |
Bedeutung |
obd-diag |
|---|---|---|
|
Mode nicht unterstützt |
„keine Codes dieser Art von diesem Steuergerät“ |
|
beschäftigt, später wiederholen |
Fehler, nie „keine Codes“ |
|
Bedingungen nicht erfüllt (z. B. Motor läuft) |
Löschen bricht ab, Sicherung bleibt |
|
Antwort folgt |
bis 5 s weiterlesen, ohne erneut zu senden; jede spätere positive Antwort zählt als die angekündigte |