Anleitungen
Volkswagen MEB OBD2
Die folgende OBD2 Liste ist für Volkswagen Modelle mit dem MEB z.B. Software Version 3.8 geignet.
- ID3
- ID4
- ID5
Steuergeräte
Folgende Steuergeräte gibt es
- Kombi / Dash
- BMS (Battery Management System)
- BMS-2 (Battery Management System 2)
- DC/DC-Wandler
- GPS
- Charger
- Infotament / Klima
- 12V-Batterie / Bordnetz
OBD2 Liste
Die Berechnung wurde mit C++ durchgeführt. Codesnippet sind teilweise weiter unten aufgeführt.
Kombi / Dash [CAN-Bus-Kanal: 0x17 Empfangs-ID: 0x17FC0076 Sende-ID: 0x17FE0076]
Die Ganganzeige funktioniert vermutlich nicht oder ist falsch.
| DID/PID-Nummer | Bezeichnung | Einheit | Berechnung |
|---|---|---|---|
| 0xF802 | VIN / Fahrgestellnummer | String | findVin(hexToAscii(p)) |
| 0xF190 | VIN / Fahrgestellnummer | String | findVin(hexToAscii(p)) |
| 0x210E | Gang / Gear | String | hexVal(p, 2, 2) |
| 0x295A | Kilometerstand | km | hexVal(p, 0, 6) |
| 0x0364 | HV-Nebenverbraucher | kW | hexVal(p, 0, 4) / 10.0 |
| 0x0346 | Lenkradeinschlagswinkel | Grad | hexVal(p, 0, 4) / 10.0 |
| 0x035E | Hochvolbatteriestrom | A | static_cast<double>(static_cast<int16_t>(hexVal(p, 0, 4))) / 10.0; |
| 0x0360 | zusätzliche Hochvoltverbraucher, Gesamtstrom | A | hexVal(p, 0, 4) / 100.0 |
| 0x2055 | Kühlerlüfter Auslastung | % | hexVal(p, 0, 4) / 100.0 |
| 0x276D | Auslastung | % | hexVal(p, 0, 4) / 100.0 |
| 0x3DEF | Batterieladestand normiert | % | hexVal(p, 0, 4) / 100.0 |
| 0x4675 | Leistungselektronik: Spannung im Fahrbetrieb | V | hexVal(p, 0, 4) / 10.0 |
| 0x29D4 | Unbekannt | - | - |
| 0x3DF8 | Unbekannt | - | - |
| 0x0335 | Unbekannt | - | - |
| 0x033B | Unbekannt | - | - |
| 0x0343 | Unbekannt | - | - |
| 0x0344 | Unbekannt | - | - |
| 0x43B8 | Unbekannt | - | - |
| 0x4539 | Unbekannt | - | - |
| 0xF817 | Unbekannt | - | - |
| 0x2005 | Unbekannt | - | - |
BMS (Battery Management System) [CAN-Bus-Kanal: 0x17 Empfangs-ID: 0x17FC007B Sende-ID: 0x17FE007B]
| DID/PID-Nummer | Bezeichnung | Einheit | Berechnung |
|---|---|---|---|
| 0x0500 | Batterieserialnummer | String | hexToAscii(p) |
| 0x028C | Ladezustand / SOC | % | hexVal(p, 0, 2) / 2.5; |
| 0x02BD | Kilometerstand BMS | km | hexVal(p, 4, 4) |
| 0x7448 | Zustand / Charge State | String | hexVal(p, 0, 2) |
| 0x1620 | PTC Strom | A | hexVal(p, 0, 2) / 4.0 |
| 0x1621 | PTC Spannung | V | hexVal(p, 0, 2) / 10.0 |
| 0x1622 | ECU Temperatur | °C | hexVal(p, 0, 2) - 50.0 |
| 0x1623 | PTC Medium Temperatur 1 | °C | hexVal(p, 0, 2) - 50.0 |
| 0x1624 | PTC Medium Temperatur 2 | °C | hexVal(p, 0, 2) - 50.0 |
| 0x743B | Hochvoltbatterie Umwälzpumpe Vorlauf | % | hexVal(p, 0, 2 |
| 0x189D | Kühlmittel / Temperaturen | °C | Eingang hexVal(p, 0, 4) / 64.0 Ausgang hexVal(p, 4, 4) / 64.0 |
| 0x1E0E | Maximale Temperatur | °C / ID | Wert hexVal(p, 0, 4) / 64.0 Sensor-ID hexVal(p, 6, 2) |
| 0x1E0F | Minimale Temperatur | °C / ID | Wert hexVal(p, 0, 4) / 64.0 Sensor-ID hexVal(p, 6, 2) |
| 0x1E1B | Dynamische Ladegrenze | A | hexVal(p, 0, 4) / 5.0 |
| 0x1E1C | Dynamische Entladegrenze | A | hexVal(p, 0, 4) / 5.0 |
| 0x1E2C | Maximaler Ladezustand / SOC Max | % / ID | Wert hexVal(p, 0, 4) / 100.0 Zelle hexVal(p, 6, 2) |
| 0x1E2D | Minimaler Ladezustand / SOC Min | % / ID | Wert hexVal(p, 0, 4) / 100.0 Zelle hexVal(p, 6, 2) |
| 0x1E32 | Gesamtenergie | - | Ladung Ah s32(0) / 549.3164 Entladung Ah s32(8) / 549.3164 Ladung kWh s32(16) / 8583.0712 Entladung kWh s32(24) / 8583.0712 |
| 0x1E33 | Zelle max | V | Nummer hexVal(p, 6, 2) Spannung hexVal(p, 0, 4) / 4096.0 |
| 0x1E34 | Zelle min | V | Nummer hexVal(p, 6, 2) Spannung hexVal(p, 0, 4) / 4096.0 |
| 0x1E36 | HV vor Schütz | V | hexVal(p, 0, 4) / 32.0 |
| 0x1E38 | HV nach Schütz | V | hexVal(p, 0, 4) / 32.0 |
| 0x1E3B | HV Spannung | V | hexVal(p, 0, 4) * 0.25 |
| 0x1E3C | Summe der Zellspannungen | V | hexVal(p, 0, 8) / 4096.0 |
| 0x1E3E | Batteriestrom | A | (150000LL - hexVal(p, 0, 8)) / 100.0 |
| 0x1E3D | Batteriestrom 2 | A | (hexVal(p, 0, 8) - 150000LL) / 100.0 |
| 0x1E40 - 0x1EAB | Zellspannungen | V | raw > 0x0F00 ? NaN : raw * 0.001 + 1.0 |
| 0x1EAE - 0x1EBD | Zelltemperaturen | °C | raw > 0x0FF0 ? NaN : raw * 0.125 - 40.0 |
| 0x7425 - 0x742C | Zelltemperaturen | °C | raw > 0x0FF0 ? NaN : raw * 0.125 - 40.0 |
| 0x5170 | Minimale Entladespannung | V | hexVal(p, 0, 4) |
| 0x5171 | Maximale Ladespannung | V | hexVal(p, 0, 4) |
| 0x5867 | Tageszaehler 2 | km | hexVal(p, 4, 4) * 10 |
| 0xF40C | Motordrehzahl | rpm | hexVal(p, 0, 4) / 4.0 |
| 0xF40D | Fahrzeuggeschwindigkeit | km/h | hexVal(p, 0, 2) |
| 0x2A0B | Haupstemperatur | °C | hexVal(p, 0, 2) / 2.0 - 40.0 |
| 0x1EAF | Unbekannt | - | - |
| 0x1EB0 | Unbekannt | - | - |
| 0x1EB1 | Unbekannt | - | - |
| 0x1EB2 | Unbekannt | - | - |
| 0x1EB3 | Unbekannt | - | - |
| 0x1EB4 | Unbekannt | - | - |
| 0x1EB5 | Unbekannt | - | - |
| 0x1EB6 | Unbekannt | - | - |
| 0x1EB7 | Unbekannt | - | - |
| 0x1EB8 | Unbekannt | - | - |
| 0x1EB9 | Unbekannt | - | - |
| 0x1EBA | Unbekannt | - | - |
| 0x1EBB | Unbekannt | - | - |
| 0x1EBC | Unbekannt | - | - |
| 0x1EBD | Unbekannt | - | - |
| 0x7425 | Unbekannt | - | - |
| 0x7426 | Unbekannt | - | - |
| 0x7427 | Unbekannt | - | - |
| 0x7428 | Unbekannt | - | - |
| 0x7429 | Unbekannt | - | - |
| 0x742A | Unbekannt | - | - |
| 0x742B | Unbekannt | - | - |
| 0x742C | Unbekannt | - | - |
| 0x189B | Unbekannt | - | - |
| 0x1E39 | Statusanzeige 0 / 1 | - | - |
BMS-2 (Battery Management System 2) [CAN-Bus-Kanal: 0x17 Empfangs-ID: 0x17FC007C Sende-ID: 0x17FE007C]
| DID/PID-Nummer | Bezeichnung | Einheit | Berechnung |
|---|---|---|---|
| 0x3E93 | Zwischenkreisspannung | V | hexVal(p, 0, 8) |
| 0x43B9 | Zwischenkreisspannungreserve | V | hexVal(p, 0, 8) |
| 0x3EE7 | Maximaler Motorstrom | A | hexVal(p, 0, 8) |
| 0x3EE8 | Motormindeststrom | A | hexVal(p, 0, 8) |
| 0x086D | Kilometerstand | km | hexVal(p, 10, 4) |
| 0x1042 | Unbekannt | - | - |
| 0x1041 | Unbekannt | - | - |
| 0x1040 | Unbekannt | - | - |
| 0x0308 | Unbekannt | - | - |
| 0x2CCC | Rotortemperaturmodell | - | - |
| 0x4FAE | Kühlmittelzulauftemperatur Elektroantrieb | - | - |
| 0x0805 | Motorsteuergerät Temperatur 1 | - | - |
| 0x0806 | Motorsteuergerät Temperatur 2 | - | - |
| 0x4672 | Statortemperatur | - | - |
| 0x40C8 | Unbekannt | - | - |
| 0x4657 | Unbekannt | - | - |
| 0x100A | Unbekannt | - | - |
| 0x1008 | Unbekannt | - | - |
| 0x1009 | Unbekannt | - | - |
| 0x1007 | Unbekannt | - | - |
| 0x3EED | Unbekannt | - | - |
| 0x3E98 | Unbekannt | - | - |
| 0x3EEB | Unbekannt | - | - |
| 0x3EEA | Unbekannt | - | - |
| 0x58E1 | Unbekannt | - | - |
| 0x3EE9 | Unbekannt | - | - |
DC/DC-Wandler [CAN-Bus-Kanal: 0x17 Empfangs-ID: 0x17FC00B9 Sende-ID: 0x17FE00B9]
| DID/PID-Nummer | Bezeichnung | Einheit | Berechnung |
|---|---|---|---|
| 0x465B | DC/DC Strom | A | hexVal(p, 0, 4) / 16.0 |
| 0x465D | DC/DC Spannung | V | hexVal(p, 0, 4) / 512.0 |
GPS [CAN-Bus-Kanal: 0x17 Empfangs-ID: 0x000007D1 Sende-ID: 0x000007D9]
| DID/PID-Nummer | Bezeichnung | Einheit | Berechnung |
|---|---|---|---|
| 0x2431 | Sattelieten | Anzahl | Visible hexVal(p, 0, 2) Tracked hexVal(p, 2, 2) |
Charger [CAN-Bus-Kanal: 0x00 Empfangs-ID: 0x000007A6 Sende-ID: 0x000007AE]
| DID/PID-Nummer | Bezeichnung | Einheit | Berechnung |
|---|---|---|---|
| 0x1DDA | Buchse A: Temperatursensor | °C | hexVal(p, 0, 1) - 40.0 |
| 0x1525 | Buchse A: Spannung PP-Kontakt | mV | hexVal(p, 0, 4) / 1000.0 |
| 0x1DA7 | Hochspannungsausgang | V | hexVal(p, 0, 4) / 10.0 |
| 0x103E | Unbekannt | - | - |
| 0x103D | Unbekannt | - | - |
Codesnippet
uint32_t hexVal(const std::string& p, size_t off, size_t len) {
return static_cast<uint32_t>(std::strtoul(p.substr(off, len).c_str(), nullptr, 16));
}
std::string hexToAscii(const std::string& hex) {
std::string out;
for (size_t i = 0; i + 1 < hex.size(); i += 2) {
int c = static_cast<int>(hexVal(hex, i, 2));
if (c >= 0x20 && c <= 0x7E) out += static_cast<char>(c);
}
size_t a = out.find_first_not_of(' ');
size_t b = out.find_last_not_of(' ');
return a == std::string::npos ? "" : out.substr(a, b - a + 1);
}
std::string findVin(const std::string& text) {
auto valid = [](char c) {
return (std::isdigit(static_cast<unsigned char>(c)) || (c >= 'A' && c <= 'Z')) && c != 'I' && c != 'O' && c != 'Q';
};
for (size_t i = 0; i + 17 <= text.size(); i++) {
bool ok = true;
for (size_t k = 0; k < 17 && ok; k++) ok = valid(text[i + k]);
if (ok) return text.substr(i, 17);
}
return "";
}