Programmierer Tips

Programmierer-Tips

Diese einfache Einführung in die OBD2-Kommunikation soll Programmierern eigener Anwendungsprogramme zur Kfz-Diagnose lediglich einen ersten Überblick verschaffen. Auch für Nicht-Programmierer können die folgenden Internas interessant sein. Die Informationen erfolgen nach bestem Wissen ohne Gewähr für Richtigkeit oder Verwendbarkeit. Sie sind copyright-geschützt und nur zum Privat-Gebrauch. Zur ernsthaften Programm-Erstellung ist die Anwendung der entsprechenden Normen (siehe hier) und evtl. auch der Hersteller-spezifischen Zusatz-Dokumentationen unumgänglich.

Wie alle modernen Kommunikationsverfahren basiert auch OBD2 auf dem 7-schichtigen OSI-Referenzmodell. Die oberste Schicht 7 (auch Layer genannt) repräsentiert die Anwendungsebene wie sie z.B. in den Normen SAE J1979 und J2190 festgelegt ist, die untersten Layer 1 (Physical) und 2 (Data Link) repräsentieren die Hardware. Die dazwischen liegenden Layer 3 (Network) und 5 (Session) sind in ISO 15765-2 und ISO 15765-4 beschrieben. Von Interesse bei gegebener Hardware ist Layer 7.

Die Kommunikation zwischen dem oder den Steuergerät(en) des Fahrzeugs (Server) und dem angeschlossenen Tester (Client) erfolgt als Frage- und Antwortspiel. Frage und Antwort bestehen aus Datenpacketen mit Header-Bytes, Daten-Bytes und abschließendem Checksummen-Byte. Die eigentlichen Daten können 1 bis 7 und 63 oder 255 Byte umfassen, abhängig vom verwendeten Standard. Der Datenbus wurde vorrangig für die Kommunikation zwischen verschiedenen Steuergeräten (Knoten, Nodes) im Fahrzeug entwickelt, um die Verkabelung zwischen diesen Knoten (Motor-Kontroller, Getriebe-Kontroller, ABS-Kontroller, Komfort-Kontroller usw. usw.) kostengünstig gestalten zu können. Der evtl. angeschlossene Tester ist nur ein weiterer Knoten. Die Header-Bytes (1 bis 4 Bytes je nach Standard, bei CAN 11 oder 29 Bit) können u.a. bitcodierde Informationen über die Adressierung (Ziel und Quelle), Adressierungsart (funktional oder physisch), Länge der folgenden Datenbytes und Priorität des Datenpackets enthalten. Bei ISO9141 erfolgt die Adressierung bereits während der Initialisierung. Speziell für Tester entwickelte Chips wie die ELM-Chips übernehmen die Aufgabe, die Header und Checksumme zu interpretieren oder zu erzeugen, so daß sich der Programmierer eines Diagnose-Programms nur um das Datenfeld zu kümmern braucht. Auch die Initialisierung übernehmen diese Chips ebenso selbsttätig wie die Verwendung der richtigen Baudrate.

Im Allgemeinen verwendet OBD2/EOBD eine funktionale Adressierung, das heißt, die tatsächlichen Adressen des jeweiligen Steuergerätes müssen nicht (und können meist auch nicht) bekannt sein. Die im Folgenden beispielhaft gezeigten Funktionen (Mode, PID) werden von jedem OBD2/EOBD-fähigen Steuergerät verstanden. Es lassen sich somit universale Diagnosegeräte verwenden. Im Unterschied dazu gibt es die absolute Adressierung, wenn das Steuergerät und dazu die absoluten Speicheradressen bekannt sind. Herstellerspezifische Diagnosegeräte können daher oftmals eine absolute Adressierung verwenden.

Die Normen haben den Nodes folgende Bereiche hexadezimaler Adressen zugeordnet:

 

Hex-Adr.Bezeichnung
10-17 Motor-Steuergeräte
18-1F Getriebe-Steuergeräte
20-27 Hersteller-spezifische Erweiterung für Fahrwerk
28-2F Bremsen-Steuergeräte
30-37 Lenkungs-Steuergeräte
38-3F Federungs-Steueräte
40-57 Hersteller-spezifische Erweiterung für Karosserie
58-5F Gurtanschnall-Systeme
60-6F Fahrer-Informationssysteme
70-7F Beleuchtung
80-8F Unterhaltung/Audio
90-97 Persönliche Kommunikation
98-9F Klima-Automatik
0A-BF Komfort (Türen, Sitze, Fenster etc.)
C0-C7 Sicherheits-Systeme
C8 Zubehör-Anschluß-Dienste
C9 Wechselspannungswandler
CA Wechsel-/Gleichspannungswandler
CB Energiespeicher-Management
CC-CF reserviert für künftige Erweiterungen
D0-EF reserviert für Hersteller-spezifische Aufgaben
F0-FD externe Tester / Diagnose-Geräte
Damit sind - wie bei fast allen Festlegungen in den Normen - auch zukunftsweisende Anwendungen berücksichtigt worden. Auch Fahrzeuge, die es heute noch gar nicht gibt, können also abgedeckt werden.

Die Standards haben zur Diagnose mit OBD2 eine genormte Adressierung festgelegt, die einheitlich für die verwendeten Protokolle gilt. Die Funktionen sind in Funktionsgruppen ( genannt Mode) klassifiziert und innerhalb dieser Modes bezeichnet eine Parameter-Identifikation (kurz PID) eine bestimmte Funktion. Einige Modes besitzen jedoch keine PIDs, andere sog. TIDs (Test-Identifikationen). Die Normen kennen folgende Modes, die ebenfalls in hexadezimaler Schreibweise bezeichnet sind:

 

ModeBezeichnung der Abfrage
01 Aktuelle Daten
02 Freeze Frame Daten
03 Diagnose Fehlercodes
04 Löschung Fehlercodes u. gespeicherter Werte
05 Testergebnisse, z.B. Lambdasonde
06 Testergebnisse nicht kontinuierlich überwachter Systeme
07 Testergebnisse kontinuierlich überwachter Systeme
08 besonderer Kontrollmodus
09 Fahrzeug-Informationen, z.B. VIN
Darüber hinaus definiert SAE J2190 weitere Diagnose-Test-Modes im Bereich von Hex 10 bis Hex 7F. Der Bereich 80 - FF ist reserviert für zukünftige Erweiterungen und Hersteller-spezifische Verwendung. Der in der SAE J2190 spezifizierte erweiterte (enhanced) Diagnose-Umfang umfaßt auch nicht-abgasrelevante Bereiche der Kfz-Elektronik. Das hierzulande oft gehörte Statement, OBD2/EOBD betreffe nur die Emissionsüberwachung ist unzutreffend.

 

ModeBezeichnung der Abfrage
10 Initiierung der Diagnose-Funktion
11 Modul Reset
12 Freeze Frame Daten
13 Diagnose Fehlercodes
14 Löschung Fehlercodes
17 Abfrage Status der Fehlercodes
18 Abfrage Fehlercodes nach Status
20 Rückkehr in Normalbetrieb des Moduls
21 Diagnosedaten nach Offset-Adresse
22 Diagnosedaten nach PID-Adresse
23 Diagnosedaten nach Speicher-Adresse
24 Abfrage Skalierung und Offset oder PID
25 Datenübertragung Stop
26 Einstellung Datenübertragung
27 Geschützter Zugriff
28 Abschaltung normaler Nachrichtenübertragung
29 Einschaltung normaler Nachrichtenübertragung
2A Abfrage Diagnose-Datenpackete
2B Definition Datenpackete nach Offset
2C Definition Datenpackete
2F Ein-/Ausgangkontrolle nach PID
30 Ein-/Ausgangkontrolle nach Datenwert ID
31 Start Diagnoseroutine nach Testnummer
32 Stop Diagnoseroutine nach Testnummer
33 Diagnoseroutine Ergebnisse nach Testnummer
34 Anforderung Download
35 Anforderung Upload
36 Datenübertragung
37 Stop Datenübertragung
38 Start Diagnoseroutine nach Adresse
39 Stop Diagnoseroutine nach Adresse
3A Diagnoseroutine Ergebnisse nach Adresse
3B Datenblock schreiben
3C Datenblock lesen
3F Tester angeschlossen
Üblicherweise bieten nur höherwertige Diagnosesysteme wie Vehikel-Erkunder oder AMX diese erweiterten Modes und deren Funktionen.

Nach dem Initialisierungsprozeß, der bei ISO/KWP, CAN, PWM und VPW unterschiedlich abläuft, sendet der angeschlossene Tester üblicherweise eine Frage und wartet auf die Antwort. Die Initialisierung kann im übrigen auch beinhalten, daß die an den Datenbus angeschlossenen Steuergeräte (Nodes) um Ruhe gebeten werden, um den Datenbus für den Datenverkehr mit dem angeschlosenen Tester möglichst freizuhalten. Die abgesandte Frage des Testers besteht aus einem Mode-Teil und einem PID- oder TID-Teil. An dieser Stelle kann nur ein Auszug der möglichen PIDs und TIDs wieder gegeben werden. Da nicht alle PIDs von jedem Steuergerät unterstützt werden, ist PID hexadezimal 00 immer reserviert für die Abfrage der möglichen PIDs je Mode. Ebenso werden nicht alle Modes immer von jedem Steuergerät unterstützt. Für Mode 01 und 02 sind also die möglichen PIDs:

 

PIDBezeichnungMinMaxUmrechnung
00 unterstützte PIDs, Bereich 01 - 20 Bit-codiert
01 MIL-Status, Anzahl Fehlercodes, Überwachungsstatus 4 Bytes, Bit-codiert
02 Fehlercode, der Freeze Frame Daten gesetzt hat 2 Byte
03 Status Einspritzsystem 2 Bytes, Bit-codiert offener, geschlossener Loop etc.
04 berechneter Lastwert 0 % 100 % 100/255 %
05 Motor-Kühlwassertemperatur -40 °C +215 °C 1 °C mit -40 °C Offset
06 Kurzzeit Einspritztrimm Bank 1 -100 % (mager) +99,22 % (fett) 100/128 %
07 Langzeit Einspritztrimm Bank 1 -100 % (mager) +99,22 % (fett) 100/128 %
08 Kurzzeit Einspritztrimm Bank 2 -100 % (mager) +99,22 % (fett) 100/128 %
09 Langzeit Einspritztrimm Bank 2 -100 % (mager) +99,22 % (fett) 100/128 %
0A Kraftstoffdruck 0 kPa 765 kPa 3 kPa pro Bit
0B Absolutdruck Einlaßkanal 0 kPa (absolut) 255 kPa (absolut) 1 kPa pro Bit
0C Motor-Umdrehungen 0 min-1 16383,75 min-1 0,25 U/min pro Bit
0D Geschwindigkeit 0 km/h 255 km/h 1 km/h pro Bit
0E Zündvoreilung -64 ° 63,5 ° 0,5 ° mit 0 ° bei 128
0F Einlaß-Lufttemperatur -40 °C +215 °C 1 °C mit -40 °C Offset
10 Luftdurchfluß 0 g/s 655,35 g/s 0,01 g/s
11 Absolute Drosselklappenstellung 0 % 100 % 100/255 %
12 Zusatzluftstatus Bit-codiert
13 Einbauort Lambdasonden Bit-codiert
14 Ausgangsspannung Lambdasonde Bank 1, Sensor 1 0 V 1,275 V 0,005 V
Kurzzeit Einspritztrimm Bank 1, Sensor 1 -100 % (mager) +99,22 % (fett) 100/128 %
15 Ausgangsspannung Lambdasonde Bank 1, Sensor 2 0 V 1,275 V 0,005 V
Kurzzeit Einspritztrimm Bank 1, Sensor 2 -100 % (mager) +99,22 % (fett) 100/128 %
16 Ausgangsspannung Lambdasonde Bank 1, Sensor 3 0 V 1,275 V 0,005 V
Kurzzeit Einspritztrimm Bank 1, Sensor 3 -100 % (mager) +99,22 % (fett) 100/128 %
17 Ausgangsspannung Lambdasonde Bank 1, Sensor 4 0 V 1,275 V 0,005 V
Kurzzeit Einspritztrimm Bank 1, Sensor 4 -100 % (mager) +99,22 % (fett) 100/128 %
18 Ausgangsspannung Lambdasonde Bank 2, Sensor 1 0 V 1,275 V 0,005 V
Kurzzeit Einspritztrimm Bank 2, Sensor 1 -100 % (mager) +99,22 % (fett) 100/128 %
19 Ausgangsspannung Lambdasonde Bank 2, Sensor 2 0 V 1,275 V 0,005 V
Kurzzeit Einspritztrimm Bank 2, Sensor 2 -100 % (mager) +99,22 % (fett) 100/128 %
1A Ausgangsspannung Lambdasonde Bank 2, Sensor 3 0 V 1,275 V 0,005 V
Kurzzeit Einspritztrimm Bank 2, Sensor 3 -100 % (mager) +99,22 % (fett) 100/128 %
1B Ausgangsspannung Lambdasonde Bank 2, Sensor 4 0 V 1,275 V 0,005 V
Kurzzeit Einspritztrimm Bank 2, Sensor 4 -100 % (mager) +99,22 % (fett) 100/128 %
1C OBD Kompatibilität 1 Byte, Hexwert: 04=OBD1, 01=OBD2(CARB), 06=EOBD, 05=kein OBD etc.
1D Einbauorte Lambdasonden Bit-codiert, nur wenn PID 13 nicht vorhanden
1E Status Hilfseingang
Power Take Off (PTO) Status
Bit-codiert
1F Zeit seit Motorstart 0 Sek. 65.535 Sek. 2 Byte, 1 Sek./Bit
20 unterstützte PIDs, Bereich 21 - 40 Bit-codiert
21 Fahrtstrecke seit MIL gesetzt 0 km 65.535 km 2 Byte, 1 km/Bit
22 Kraftstoffdruck relativ zu Einlaßvakuum 0 kPa 5177,27 kPa 0,079 kPa pro Bit
23 Kraftstoffdruck 0 kPa 655.350 kPa 10 kPa pro Bit, nur PID 0A, 22 oder 23 erlaubt
24 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 1 0 1,999 0,0000305
Ausgangsspannung 0 V 7,999 V 0,000122 V
25 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 2 0 1,999 0,0000305
Ausgangsspannung 0 V 7,999 V 0,000122 V
26 Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 1 0 1,999 0,0000305
Ausgangsspannung 0 V 7,999 V 0,000122 V
27 Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 2 0 1,999 0,0000305
Ausgangsspannung 0 V 7,999 V 0,000122 V
28 Äquivalenz-Verhältnis Lambdasonde Bank 3, Sensor 1 0 1,999 0,0000305
Ausgangsspannung 0 V 7,999 V 0,000122 V
29 Äquivalenz-Verhältnis Lambdasonde Bank 3, Sensor 2 0 1,999 0,0000305
Ausgangsspannung 0 V 7,999 V 0,000122 V
2A Äquivalenz-Verhältnis Lambdasonde Bank 4, Sensor 1 0 1,999 0,0000305
Ausgangsspannung 0 V 7,999 V 0,000122 V
2B Äquivalenz-Verhältnis Lambdasonde Bank 4, Sensor 2 0 1,999 0,0000305
Ausgangsspannung 0 V 7,999 V 0,000122 V
2C Anforderung Abgasrückführsystem 0 % (kein Durchfluß) 100 % (max. Durchfluß) 100/255 %
2D Verhältnis angeforderte zu aktuelle Abgasrückführung -100 % (weniger als angefordert) +99,22 % (mehr als angefordert) 100/128 % (0 % bei 128)
2E Anforderung Entgasungsmenge 0 % (kein Fluß) 100% (max. Fluß) 100/255 %
2F Kraftstofftank-Inhalt 0 % (leer) 100 % (voll) 100/255 %
30 Anzahl Warmlaufzyklen seit Fehlercode-Löschung 0 255 1 Zyklus je Zähler
31 Distanz seit Fehlercode-Löschung 0 km 65.535 km 1 km je Zähler
32 Entgasungsdampfdruck -8192 Pa +8192 Pa 0,25 Pa pro Bit
33 barometrischer Druck 0 kPa (absolute) 255 kPa (absolut) 1 kPa pro Bit
34 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 1 0 1,999 0,0000305
Ausgangsstrom (PID 34 nur, wenn PID 13 unterstützt) -128 mA 127,996 mA 0,00390625 mA
35 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 2 0 1,999 0,0000305
Ausgangsstrom (PID 35 nur, wenn PID 13 unterstützt) -128 mA 127,996 mA 0,00390625 mA
36 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 3 0 1,999 0,0000305
Ausgangsstrom (PID 36 nur, wenn PID 13 unterstützt) -128 mA 127,996 mA 0,00390625 mA
37 Äquivalenz-Verhältnis Lambdasonde Bank 1, Sensor 4 0 1,999 0,0000305
Ausgangsstrom (PID 37 nur, wenn PID 13 unterstützt) -128 mA 127,996 mA 0,00390625 mA
38 Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 1 0 1,999 0,0000305
Ausgangsstrom (PID 38 nur, wenn PID 13 unterstützt) -128 mA 127,996 mA 0,00390625 mA
39 Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 2 0 1,999 0,0000305
Ausgangsstrom (PID 39 nur, wenn PID 13 unterstützt) -128 mA 127,996 mA 0,00390625 mA
3A Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 3 0 1,999 0,0000305
Ausgangsstrom (PID 3A nur, wenn PID 13 unterstützt) -128 mA 127,996 mA 0,00390625 mA
3B Äquivalenz-Verhältnis Lambdasonde Bank 2, Sensor 4 0 1,999 0,0000305
Ausgangsstrom (PID 3B nur, wenn PID 13 unterstützt) -128 mA 127,996 mA 0,00390625 mA
3C Kat-Substrat Temperatur Bank 1, Sensor 1 -40 °C +6513,5 °C 0,1 °C/Bit mit -40 °C Offset
3D Kat-Substrat Temperatur Bank 1, Sensor 2 -40 °C +6513,5 °C 0,1 °C/Bit mit -40 °C Offset
3E Kat-Substrat Temperatur Bank 2, Sensor 1 -40 °C +6513,5 °C 0,1 °C/Bit mit -40 °C Offset
3F Kat-Substrat Temperatur Bank 2, Sensor 2 -40 °C +6513,5 °C 0,1 °C/Bit mit -40 °C Offset
40 unterstützte PIDs, Bereich größer 40 Bit-codiert
41 Überwachungsstatus Fahrzyklus Bit-codiert für kontinuierliche u. nicht-kontin. Überwachungen
42 Eingangsspannung Steuergerät 0 V 65,535 V 0,001 V pro Bit
43 absoluter Lastwert 0 % 25700 % 100/255 %
44 angefordertes Äquivalenz-Verhältnis 0 1,999 0,0000305
45 relative Drosselklappenstellung 0 % 100 % 100/255 %
46 Umgebungstemperatur -40 °C +215 °C 1 °C mit -40 °C Offset
47 absolute Drosselklappenstellung B 0 % 100 % 100/255 %
48 absolute Drosselklappenstellung C 0 % 100 % 100/255 %
49 Gaspedalstellung D 0 % 100 % 100/255 %
4A Gaspedalstellung E 0 % 100 % 100/255 %
4B Gaspedalstellung F 0 % 100 % 100/255 %
4C angeforderte Drosselklappen-Stellkontrolle 0 % (geschlossen) 100 % (weit offen) 100/255 %
4D Motorbetrieb seit Entritt Fehlercode 0 Minuten 65535 Minuten 1 Minute pro Zähler
4E Zeit seit Fehlercode-Löschung 0 Minuten 65535 Minuten 1 Minute pro Zähler
4F bis FF reserviert für Erweiterungen
Weitere Tabellen hier aufzulisten oder auch weitere Erklärungen zu o.g. PIDs würde den Rahmen hier sprengen. Nur soviel noch, da die angezeigten Werte oft Mißverständnis hervorrufen:
Der berechnete Lastwerte (PID 04) ist eine fiktive, berechnete Größe, die absolut nichts mit der tatsächlichen aktuellen Leistung eines Motors zu tun hat. Das Motorsteuergerät berechnet sie aus:
aktueller Luftdurchfluß geteilt durch maximaler Luftdurchfluß bei weit geöffneter Drosselklappe bei Standard Temperatur und Druck mal barometrischer Druck geteilt durch 29,92 mal Quadratwurzel aus 298 geteilt durch Umgebungslufttemperatur plus 273.
Nicht alle Modes haben jedoch derart viele PIDs. Mode 03 gibt die gespeicherten Fehlercodes (siehe hier)mit 3 Codes je Antwort zurück. Die Dekodierung zeigt das Beispiel:
0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1
P 0 1 4 3

Das Programm eines angeschlossenen Testers fragt sinnvollerweise zuerst mit Mode 01 und PID 01 die Anzahl der evtl. vorhandenen Fehlercodes ab und erhält als Antwort im Datenfeld eine Bytefolge zurück beginnend mit 41 (Mode-Antwort zu 01), dann 01 (PID) und darauf die 4 Daten-Bytes, aus denen dann die Anzahl zu dekodieren ist. Dieses Antwortschema ist übrigens immer gleich, d.h. bei einer Abfrage von z.B. Mode 07 wird 47 zurückgegeben mit den dann folgenden Daten. Ist die Anzahl gespeicherter Fehlercodes größer 0, kann das Programm dann die eigentlichen Fehlercodes mit Mode 03 abfragen. Mode 03 kennt keine PIDs. Eine Antwort könnte sein: 43 01 43 01 96 02 34, also somit Fehlercodes P0143, P0196 und P0234.

Mode 04 (ohne weitere PID) löscht folgende Daten oder setzt sie zurück:
  • Anzahl Fehlercodes (Mode 01 PID 01)
  • Fehlercodes (Mode 03)
  • Fehlercode für Freeze Frame Daten (Mode 02 PID 02)
  • Freeze Frame Daten (Mode 02)
  • Lambdasonden Testdaten (Mode 05)
  • Status der System-Überwachungstests (Mode 01 PID 01)
  • On-board Überwachungs-Testergebnisse (Modes 06 und 07)
  • Zurückgelegte Fahrtstrecke mit aktivierter MIL (Mode 01 PID 21)
  • Anzahl Warmlaufzyklen seit gelöschten Fehlercodes (Mode 01 PID 30)
  • zurückgelegte Fahrtstrecke seit gelöschten Fehlercodes (Mode 01 PID 31)
  • Motorbetrieb seit aktivierter MIL (Mode 01 PID 4D)
  • Zeit seit gelöschten Fehlercodes (Mode 01 PID 4E)
Im Erfolgsfall wird 44 zurückgegeben, schlägt der Befehl fehl, wird 7F 04 22 zurückgegeben. Letzteres kann z.B. erfolgen bei unzutreffenden Konditionen. Der Mode 04 Befehl soll bei Zündung ein und Motor aus gegeben werden. Ein Testerprogramm prüft also sinnvollerweise auf den Rückgabewert und teilt dem Anwender mit, daß er gegebenenfalls Zündung ein und Motor aus machen soll. Da bei Löschung mit Mode 04 auch andere Daten gelöscht werden, ist eine vorherige Sicherheitsabfrage an den Anwender vorgeschrieben.

Wie anfangs ausgeführt, ist dies nur ein kleiner Einblick. Nicht alle Modes und alle PIDs werden von einem Steuergerät unterstützt. Eine Diagnose-Software kann daher immer nur die Daten liefern, die ein Fahrzeug auch zur Verfügung stellt.