Odebrano ramki z pojazdów z wieloma układami ECU

10

Zasadniczo nie jestem „samochodem”, więc mam nadzieję, że wyjaśnię to wystarczająco dobrze, aby uzyskać pomoc:

Wysyłając wiadomości do urządzenia OBD-II, otrzymuję jedną odpowiedź w większości testowanych samochodów. Jednak w przypadku samochodów, które najwyraźniej mają więcej niż jeden układ ECU, otrzymuję odpowiedź od każdego z nich. Na przykład, jeśli wyślę 01 0C polecenie PID do pojazdu z 3 układami ECU, otrzymam 3 odpowiedzi, które są na ogół bardzo podobne, ale wciąż różne.

01 00Komenda ma zwrócić 4 bajty, które stwierdza obsługiwane PID pojazdu, ale również zwraca 4 bajty dla każdego ECU - jedna jest w pełni uregulowana 4 bajty z kilkoma flagami z przerwami, podczas gdy inne wydają się mieć tylko garść flag włączonych (dotychczas te flagi wydają się zawsze flagami zawartymi w odpowiedzi „głównej”, ale nie jestem pewien, czy tak jest zawsze).

Przykład:

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

Ostatnie dwa wiersze składają się z flag, które są również oznaczone w pierwszej linii, ale linia 3 ma jedną dodatkową flagę, której nie ma linia 2.

Wydaje mi się, że być może istnieje jeden ECU, który kwalifikuje się jako „główny” układ, którego powinienem słuchać podczas wysyłania poleceń i (chyba) rozumiem, że mogę użyć maski / filtra CAN ID do zwracaj uwagę tylko na te, których potrzebuję.

Pytanie brzmi: czy naprawdę istnieje „podstawowy ECU”, na który powinienem zwrócić uwagę, czy też wszystkie te odpowiedzi są jednakowo ważne? Jeśli istnieje podstawowa, na którą muszę kierować, czy istnieje polecenie, które mogę wysłać, aby ustalić, które jest „najbardziej znaczące”?

Pojazdy testowane na:

2011 Chevy Cruze               [2 ECUs]
2015 BMW M5                    [3 ECUs]
2015 Range Rover Autobiography [3 ECUs]
Rein S.
źródło
1
Przydatne może być poinformowanie nas, na której marki i modelu wypróbowałeś to. Wiem, że samochody z 3 ECU mają tendencję do konfiguracji z dwoma zwykłymi ECU (po jednym dla każdego zespołu silników) i jednym „głównym” ECU, który zarządza sygnałami do / z (i ewentualnie pomiędzy?) Dwóch zwykłych ECU. „Główny” ECU nie robi nic więcej, więc jeśli ustawiony jest diagnostyczny kod usterki, źródłem tego będzie zwykły ECU, a nie „główny”. Jednak może być konieczne sondowanie urządzenia master przez interfejs OBD-II, aby uzyskać kody DTC. Chciałbym w czymś więcej pomóc, ale na razie to wszystko.
Zaid
1
Jestem inżynierem oprogramowania, ale nie korzystałem z OBD ani CAN, ale czy ta strona w ogóle pomaga? Wygląda na to, że powinien istnieć sposób na filtrowanie wiadomości.
JPhi1618,
@Zaid Dzięki za dodatkowe informacje. Zaktualizowałem moje pytanie o samochody, na których je testowałem, ale muszę się zdecydować na dowolną liczbę pojazdów; może to nie mieć znaczenia, w zależności od dokładnej odpowiedzi, której powinienem się spodziewać, wysyłając nieobsługiwane PID, ale chciałem tylko pokryć wszystkie moje bazy
Rein S
@ JPhi1618 Jest to właściwie ten sam kontekst, w którym tego potrzebowałem. Może to być ścieżka, którą muszę podążać! Wielkie dzięki za link, zanurzę się w nim trochę głębiej.
Rein S
1
Jeśli znajdziesz coś interesującego, co według ciebie może dać odpowiedź, wróć i odpowiedz na własne pytanie. To jest całkowicie dozwolone.
JPhi1618,

Odpowiedzi:

5

Jeśli twój pojazd ma wersję 2008 lub nowszą, korzysta z protokołu can, możesz użyć polecenia AT CR, aby wybrać, z którego ECU chcesz słyszeć.
Oto jak:
wyślij

AT H1

spowoduje to włączenie nagłówków, aby zobaczyć adresy ECU.
wysłać

0100

jest to polecenie OBD pokazujące, które z pidów od 1-20 są obsługiwane.
twoja odpowiedź powinna brzmieć:

7E8064100BE3EA813
7E906410098188013
>

pokazuje to, że masz 2 ECU 7E8 (silnik) 7E9 (skrzynia biegów),
widziałem 5 zwróconych ECU: 7E8,7E9,7EA, 7EB, 7EC.
Aby usłyszeć tylko jeden ECU, wydajesz AT CRA xxx, gdzie xxx to adres ECU.
wyślij następujące

AT CRA 7E8

następnie

0100

wróci:

7E8064100BE3EA813

wysłać

AT H0

aby wyłączyć nagłówki, a następnie wyślij:

0100

i wrócisz właśnie

4100BE3EA813

Jeśli twój pojazd ma 29 bitów, to odpowiedź 0100 będzie wyglądać mniej więcej tak:

18DAF11806410088180013
18DAF110064100BE5FA813
>

pokazuje to 2 ECU 18DAF118 (skrzynia biegów) i 18DAF110 (silnik).
wysłać

AT CRA 18DAF110

usłyszeć tylko z silnika.

godżilla
źródło
cześć !! pracuję nad prototypem systemu diagnostycznego pojazdu. Przejrzałem twoją odpowiedź, ale mam kilka zapytań ... 1) Czy jest jakieś polecenie AT, aby sprawdzić, ile ECU jest dostępnych. 2) gdy nagłówek jest wyłączony niż dlaczego tylko jeden łańcuch „4100BE3EA813” nie jest wyświetlana zarówno „410098188013”
Dev
4

CAN nie działa tak, jak myślisz.

CAN nie jest oparty na modułach, jest oparty na komunikatach. Żaden moduł nie mówi bezpośrednio do żadnego innego modułu. W CAN moduł generuje komunikat z adresem, który identyfikuje dane, które będą zawarte w komunikacie. Również adres określa ważność wiadomości. Im niższy adres, tym wyższy priorytet.

Na przykład ABS przekaże prędkość pojazdu. Każdy inny moduł, który potrzebuje danych, wczyta je.

Nie ma modułu ważniejszego niż jakikolwiek inny, ważny jest priorytet komunikatu.

vini_i
źródło
Aby to wyjaśnić: jeśli nie ma modułu ważniejszego od drugiego, czy istnieje jakiś powód, aby odfiltrowywać odpowiedzi z wielu ECU? Na przykład, jeśli poproszę RPM o BMW M5, dostaję 3 odpowiedzi (ogólnie są one podobne, ale nigdy dokładnie takie same). Czy powinienem „zaufać” pierwszej odpowiedzi jako dokładnemu odczytowi? Czy jest jakiś powód, aby nie wybierać pierwszej odpowiedzi dla każdego żądania?
Rein S,
Jeśli wszystkie odpowiedzi mają ten sam adres, zaufaj pierwszemu. Jeśli nie mają tego samego adresu, zaufaj temu, który ma najwyższy priorytet. Najwyższy priorytet ma najniższy adres.
vini_i