Frame ricevuti da veicoli con più chip ECU


10

In genere non sono una "persona di macchina", quindi spero di poterlo spiegare abbastanza bene per ottenere un aiuto qui:

Quando invio messaggi a un dispositivo OBD-II, ricevo una risposta nella maggior parte delle auto che ho provato. Tuttavia, con le auto che apparentemente hanno più di un chip ECU, ottengo una risposta da ciascuno di essi. Ad esempio, se invio un 01 0C comando PID a un veicolo con 3 chip ECU, ricevo 3 risposte che sono generalmente molto simili ma comunque diverse.

Un 01 00comando dovrebbe restituire 4 byte che indicano i PID supportati del veicolo, ma questo restituisce anche 4 byte per ogni ECU - uno è un 4 byte completamente arricchito con diverse bandiere accese e spente, mentre gli altri sembrano avere solo una manciata di flag attivati ​​(tali flag sembrano essere sempre flag inclusi nella risposta "principale", ma non sono sicuro che sia sempre così).

Esempio:

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

Le ultime due righe sono costituite da flag contrassegnati anche nella prima riga, ma la riga 3 ha un flag aggiuntivo rispetto alla riga 2.

Mi sembra che forse esiste una singola ECU che si qualifica come il chip "primario" che dovrei ascoltare quando invio comandi e (penso) capisco che posso usare una maschera / filtro CAN ID per presta attenzione solo a quelli di cui ho bisogno.

La domanda è: esiste davvero una "ECU primaria" a cui dovrei prestare attenzione o tutte queste risposte sono ugualmente importanti? Se ce n'è uno primario che devo scegliere come target, esiste un comando che posso inviare per determinare quale sia il "più significativo"?

Veicoli testati su:

2011 Chevy Cruze               [2 ECUs]
2015 BMW M5                    [3 ECUs]
2015 Range Rover Autobiography [3 ECUs]

1
Potrebbe essere utile dirci su quale marca e modello hai provato questo. Quello che so è che le auto con 3 ECU tendono ad essere installate con due ECU regolari (una per ogni banco motore) e una ECU "master" che gestisce i segnali da / e (forse tra?) Le due ECU normali. La centralina "master" non fa molto di più, quindi se viene impostato un codice di errore diagnostico, la fonte di tale centralina sarà la normale ECU, non il "master". Tuttavia, potrebbe essere necessario eseguire il polling del master tramite l'interfaccia OBD-II per ottenere i DTC. Vorrei poterti aiutare più di così, ma per ora è tutto ciò che ho.
Zaid

1
Sono un ingegnere del software, ma non ho usato OBD o CAN, ma questa pagina è d' aiuto? Sembra che ci dovrebbe essere un modo per filtrare i messaggi.
JPhi1618,

@Zaid Grazie per le informazioni extra. Ho aggiornato la mia domanda con le auto su cui l'ho provata, ma questo è qualcosa che dovrò decidere su qualsiasi numero di veicoli; potrebbe non avere importanza, a seconda della risposta esatta che dovrei aspettarmi quando invio PID non supportati, ma volevo solo coprire tutte le mie basi
Rein S

@ JPhi1618 In realtà questo è praticamente lo stesso contesto in cui ne avevo bisogno. Questo potrebbe benissimo essere il percorso che devo seguire! Grazie mille per il link, ci approfondirò un po 'più a fondo.
Rein S

1
Se trovi qualcosa di interessante che pensi di poter trasformare in una "risposta", torna indietro e rispondi alla tua domanda. È totalmente permesso.
JPhi1618,

Risposte:


5

Se il tuo veicolo è del 2008 o più recente, utilizza il protocollo can, puoi utilizzare il comando AT CR per selezionare da quale ECU vuoi ascoltare.
Ecco come:
invia

AT H1

questo attiverà le intestazioni per vedere gli indirizzi delle centraline.
Spedire

0100

questo è un comando OBD per mostrare quali dei pid da 1-20 sono supportati.
la tua risposta dovrebbe essere come:

7E8064100BE3EA813
7E906410098188013
>

questo dimostra che hai 2 ECU 7E8 (motore) 7E9 (trasmissione),
ho visto 5 ECU restituiti: 7E8,7E9,7EA, 7EB, 7EC.
Per ascoltare da una sola ECU emetti AT CRA xxx dove xxx è l'indirizzo ECU.
invia quanto segue

AT CRA 7E8

poi

0100

tornerà:

7E8064100BE3EA813

Spedire

AT H0

per disattivare le intestazioni, quindi inviare:

0100

e tornerai indietro

4100BE3EA813

Se il tuo veicolo è a 29 bit, la risposta 0100 sarà simile a:

18DAF11806410088180013
18DAF110064100BE5FA813
>

questo mostra 2 ECU 18DAF118 (trasmissione) e 18DAF110 (motore).
Spedire

AT CRA 18DAF110

sentire solo dal motore.


Ciao !! sto lavorando a un prototipo per il sistema diagnostico del veicolo. Ho esaminato la tua risposta ma ho poche domande ... 1) c'è qualche comando AT per verificare quante ECU sono disponibili. 2) quando l'intestazione è disattivata rispetto al motivo per cui viene visualizzata solo una stringa "4100BE3EA813" non entrambe "410098188013"
Dev

4

CAN non funziona come pensi.

CAN non è basato sul modulo, è basato sui messaggi. Nessun modulo parla direttamente a nessun altro modulo. In CAN un modulo genera un messaggio con un indirizzo, che identifica i dati che saranno contenuti nel messaggio. Inoltre l'indirizzo dà l'importanza del messaggio. Più basso è l'indirizzo, maggiore è la priorità.

Ad esempio l'ABS trasmetterà la velocità del veicolo. Ogni altro modulo che necessita dei dati li leggerà.

Non esiste un modulo più importante di qualsiasi altro, è la priorità del messaggio che è importante.


Solo per dare seguito a questo: se non esiste un modulo più importante dell'altro, c'è qualche motivo per filtrare le risposte da più centraline? Ad esempio, se richiedo RPM per la BMW M5, ottengo 3 risposte (sono generalmente simili, ma mai esattamente le stesse). Dovrei semplicemente "fidarmi" della prima risposta come una lettura accurata? Qualche motivo per non andare solo con la prima risposta per ogni richiesta?
Rein S,

Se tutte le risposte hanno lo stesso indirizzo, affidati al primo. Se non hanno lo stesso indirizzo, fidati di quello con la massima priorità. La priorità più alta ha l'indirizzo più basso.
vini_i
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.