Empfangene Rahmen von Fahrzeugen mit mehreren ECU-Chips

10

Ich bin im Allgemeinen kein "Auto-Mensch", also kann ich das hoffentlich gut genug erklären, um hier Hilfe zu bekommen:

Beim Senden von Nachrichten an ein OBD-II-Gerät erhalte ich in den meisten von mir getesteten Fahrzeugen eine Antwort. Bei Autos, die anscheinend mehr als einen ECU-Chip haben, bekomme ich jedoch eine Antwort von jedem von ihnen. Wenn ich beispielsweise einen 01 0C PID-Befehl an ein Fahrzeug mit 3 ECU-Chips sende , erhalte ich 3 Antworten, die im Allgemeinen sehr ähnlich, aber immer noch unterschiedlich sind.

Ein 01 00Befehl soll 4 Bytes zurückgeben, die die unterstützten PIDs des Fahrzeugs angeben, aber dies gibt auch 4 Bytes für jede ECU zurück - eines sind vollständig ausgearbeitete 4 Bytes mit mehreren Flags ein und aus, während die anderen nur zu haben scheinen eine Handvoll Flags aktiviert (diese Flags scheinen bisher immer Flags zu sein, die in der 'Haupt'-Antwort enthalten sind, aber ich bin mir nicht sicher, ob dies immer der Fall ist).

Beispiel:

SENT: 01 00

RECEIVED:

00 BF BF AC D3 - This response has the most binary flags turned on
00 98 18 80 11 - 8 flags on here
00 98 18 80 13 - 9 flags on here

Die letzten beiden Zeilen bestehen aus Flags, die auch in der ersten Zeile markiert sind, aber die Zeile 3 hat ein zusätzliches Flag, das Zeile 2 nicht hat.

Es scheint mir, dass es vielleicht ein einzelnes Steuergerät gibt, das sich als der "primäre" Chip qualifiziert, den ich beim Senden von Befehlen hören sollte, und (ich denke) ich verstehe, dass ich eine CAN-ID-Maske / einen CAN-ID-Filter verwenden kann achte nur auf die, die ich brauche.

Die Frage ist: Gibt es wirklich ein „primäres Steuergerät“, auf das ich achten sollte, oder sind alle diese Antworten gleich wichtig? Wenn es einen primären gibt, auf den ich zielen muss, gibt es einen Befehl, den ich senden kann, um zu bestimmen, welcher der "wichtigsten" ist?

Fahrzeuge getestet an:

2011 Chevy Cruze               [2 ECUs]
2015 BMW M5                    [3 ECUs]
2015 Range Rover Autobiography [3 ECUs]
Rein S.
quelle
1
Es kann nützlich sein, uns mitzuteilen, welche Marke und welches Modell Sie anprobiert haben. Was ich weiß ist, dass die Autos mit 3 ECUs in der Regel mit zwei regulären ECUs (eines für jede Motorbank) und einem "Master" -ECU ausgestattet sind, das Signale zu / von (und möglicherweise zwischen?) Den beiden regulären ECUs verwaltet. Die "Master" -EKU macht nicht wirklich viel mehr als das. Wenn also ein Diagnosefehlercode festgelegt ist, ist die Quelle dafür die reguläre ECU, nicht die "Master". Möglicherweise müssen Sie den Master jedoch über die OBD-II-Schnittstelle abfragen, um die DTCs zu erhalten. Ich wünschte, ich könnte dir mehr als das helfen, aber das ist alles, was ich jetzt habe.
Zaid
1
Ich bin Softwareentwickler, habe aber noch kein OBD oder CAN verwendet, aber hilft diese Seite überhaupt? Es sieht so aus, als ob es eine Möglichkeit geben sollte, Nachrichten zu filtern.
JPhi1618
@Zaid Danke für die zusätzlichen Informationen. Ich habe meine Frage mit den Autos aktualisiert, an denen ich sie getestet habe, aber dies ist etwas, das ich für eine beliebige Anzahl bestimmter Fahrzeuge entscheiden muss. Abhängig von der genauen Antwort, die ich beim Senden nicht unterstützter PIDs erwarten sollte, spielt dies möglicherweise keine Rolle, aber ich wollte nur alle meine Basen abdecken
Rein S
@ JPhi1618 Dies ist eigentlich so ziemlich der gleiche Kontext, in dem ich das gebraucht habe. Dies könnte sehr wohl der Weg sein, dem ich folgen muss! Vielen Dank für den Link, ich werde etwas tiefer darauf eingehen.
Rein S
1
Wenn Sie etwas Interessantes finden, von dem Sie glauben, dass Sie es in eine "Antwort" umwandeln können, kommen Sie zurück und beantworten Sie Ihre eigene Frage. Das ist absolut erlaubt.
JPhi1618

Antworten:

5

Wenn Ihr Fahrzeug 2008 oder neuer ist und das Dosenprotokoll verwendet, können Sie mit dem Befehl AT CR auswählen, von welchem ​​Steuergerät Sie hören möchten.
So geht's:
senden

AT H1

Dadurch werden die Header aktiviert, um die Adressen der Steuergeräte anzuzeigen.
senden

0100

Dies ist ein OBD-Befehl, um anzuzeigen, welche der Pids von 1 bis 20 unterstützt werden.
Ihre Antwort sollte lauten:

7E8064100BE3EA813
7E906410098188013
>

Dies zeigt, dass Sie 2 ECUs 7E8 (Motor) 7E9 (Getriebe) haben.
Ich habe 5 zurückgegebene ECUs gesehen: 7E8,7E9,7EA, 7EB, 7EC.
Um von nur einem Steuergerät zu hören, geben Sie AT CRA xxx aus, wobei xxx die Steuergeräteadresse ist.
Senden Sie Folgendes

AT CRA 7E8

dann

0100

wird zurückkehren:

7E8064100BE3EA813

senden

AT H0

um Header auszuschalten und dann zu senden:

0100

und du wirst gerade zurückkommen

4100BE3EA813

Wenn Ihr Fahrzeug eine 29-Bit-Dose ist, sieht die 0100-Antwort ungefähr so ​​aus:

18DAF11806410088180013
18DAF110064100BE5FA813
>

Dies zeigt 2 ECUs 18DAF118 (Getriebe) und 18DAF110 (Motor).
senden

AT CRA 18DAF110

nur vom Motor zu hören.

Godzilla
quelle
Hallo !! Ich arbeite an einem Prototyp für ein Fahrzeugdiagnosesystem. Ich habe Ihre Antwort durchgesehen, aber ich habe nur wenige Fragen ... 1) Gibt es einen AT-Befehl, um zu überprüfen, wie viele Steuergeräte verfügbar sind? 2) Wenn der Header deaktiviert ist, wird nur eine Zeichenfolge "4100BE3EA813" angezeigt, nicht beide "410098188013"
Dev
4

CAN funktioniert nicht so wie Sie denken.

CAN ist nicht modulbasiert, sondern nachrichtenbasiert. Kein Modul spricht direkt mit einem anderen Modul. In CAN generiert ein Modul eine Nachricht mit einer Adresse. Diese Adresse identifiziert die Daten, die in der Nachricht enthalten sein werden. Auch die Adresse gibt die Wichtigkeit der Nachricht an. Je niedriger die Adresse, desto höher die Priorität.

Zum Beispiel überträgt das ABS die Fahrzeuggeschwindigkeit. Jedes andere Modul, das die Daten benötigt, liest sie ein.

Es gibt kein Modul, das wichtiger ist als jedes andere. Es ist die Nachrichtenpriorität, die wichtig ist.

vini_i
quelle
Nur um dem nachzugehen: Wenn es kein Modul gibt, das wichtiger ist als das andere, gibt es einen Grund, Antworten von mehreren Steuergeräten herauszufiltern? Wenn ich beispielsweise eine Drehzahl für den BMW M5 anfordere, erhalte ich drei Antworten (diese sind im Allgemeinen ähnlich, aber niemals genau gleich). Sollte ich der ersten Antwort nur als genaue Lesung "vertrauen"? Gibt es einen Grund, nicht bei jeder Anfrage mit der ersten Antwort zu beginnen?
Rein S
Wenn alle Antworten dieselbe Adresse haben, vertrauen Sie der ersten. Wenn sie nicht dieselbe Adresse haben, vertrauen Sie der Adresse mit der höchsten Priorität. Die höchste Priorität hat die niedrigste Adresse.
vini_i