Sieć CAN w aucie – szybki wstęp

Sieć CAN jest już praktycznie standardem we wszystkich autach osobowych. W europejskich modelach występuje system EOBD, który definiuje, że każdy samochód musi udostępniać ustandaryzowany sposób komunikacji. Co to oznacza dla nas? Możemy podłączyć się do pojazdu i odczytać kilka informacji związanych z emisją spalin (prędkość silnika, temperatura, ciśnienie doładowania itp).

Poniższy opis jest spojrzeniem na komunikację z wyższego poziomu abstrakcji – bez zagłębiania się w niższy poziom komunikacji – i celowo pomija niektóre aspekty.

Poniższe przykłady są podane w liczbach hexadecymalnych. 

Jak działa sieć komunikacja po sieci CAN?

Komunikacja odbywa się za pomocą tzw. ramek – każda z nich ma identyfikator nadawcy oraz dane. Przykładowy format ramki:

7DF [8] 02 01 0C 00 00 00 00 00

Gdzie:

  • 7DF – identyfikator nadawcy
  • [8] – długość danych (czyli dane będą zawierały 8 bajtów)
  • 02 – informacja, ile bajtów będzie zawierało dane (czyli 2 kolejne bajty będą zawierały istotne informacje)
  • 01 0C 00 00 00 00 00 – przesłane dane (7 bajtów). Widać, że tylko 2 bajty nie są zerami: 01 0C . Czyli zgodnie z uprzednią zapowiedzią.

7DF jest standardowo uznany za adres testera diagnostycznego, czyli urządzenia, które jest wpięte do złącza OBD w samochodzie.

Tester wysyła „w świat” żądanie (broadcast). Moduł, który rozpozna, że te żądanie jest do niego udzieli odpowiedzi. W sytuacji, gdy nie będzie w samochodzie odpowiedniego modułu (lub będzie złe żądanie) nie uzyskamy odpowiedzi.

Co możemy odczytać?

1 bajt danych określa tryb – czyli informację, co chcemy zrobić (tryb 1 – odczyt parametrów).

Następnie, wysyłany jest tzw. PID (parameter ID) – czyli informacja, jaki parametr chcemy odczytać (0C oznacza obroty silnika). Standard OBD2 definiuje podstawowe tryby pracy, oraz odpowiedające im PID’y, które można odczytać – ich rozpiska znajduje się między innymi tutaj: https://en.wikipedia.org/wiki/OBD-II_PIDs

Zatem, wracając do naszego przykładu:

7DF [8] 02 01 0C 00 00 00 00 00

widać, że tester diagnostyczny (7DF) wysyła żądanie odczytu bieżących parametrów (tryb 1) do PID o numerze 0C. Po pewnym czasie możemy uzyskać na sieci CAN odpowiedź typu:

7EF [8] 04 41 0C 11 22 00 00 00

Oznacza to, że moduł o identyfikatorze 7EF (sterownik silnika – przy czym nie zawsze jest to 7EF) zwrócił odpowiedź.

Odpowiedź zawiera 41 – jest to tryb, który wysłaliśmy (01) wraz z dodanym 40 (zawsze jest dodawane 40) – po tym możemy poznać, że jest to informacja dla nas.

Następna zwrócona wartość to żądany PID (0C), a następnie (11 22) prędkość silnika. Zgodnie z tabelką prędkość należy wszystko przeliczyć:

RPM = (256 * A + B) / 4

gdzie 256 DEC = 100HEX

RPM = (100 * 11  + 12) / 4 = 444 (HEX) = 1092 (DEC)