Полученные кадры от автомобилей с несколькими чипами ECU

10

Я обычно не «автомобильный человек», поэтому, надеюсь, я смогу объяснить это достаточно хорошо, чтобы получить некоторую помощь здесь:

При отправке сообщений на устройство OBD-II я получаю один ответ на большинстве автомобилей, которые я тестировал. Однако с автомобилями, которые, очевидно, имеют более одного чипа ECU, я получаю ответ от каждого из них. Например, если я посылаю 01 0C команду PID на автомобиль с 3 чипами ECU, я получаю 3 ответа, которые, как правило, очень похожи, но все же различны.

Предполагается, что 01 00команда возвращает 4 байта, в которых указаны поддерживаемые PID транспортного средства, но это также возвращает 4 байта для каждого блока управления двигателем - один представляет собой полностью выделенные 4 байта с несколькими флагами вкл / выкл, в то время как другие, кажется, имеют только Включено несколько флагов (до сих пор эти флаги, похоже, всегда были флагами, которые включены в ответ 'main', но я не уверен, так ли это всегда).

Пример:

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

Последние две строки состоят из флагов, которые также отмечены в первой строке, но строка 3 имеет один дополнительный флаг, которого нет в строке 2.

Мне кажется, что, возможно, существует один ECU, который квалифицируется как «основной» чип, который я должен слушать при отправке команд, и (я думаю) я понимаю, что могу использовать маску / фильтр CAN ID для обращайте внимание только на те, которые мне нужны.

Вопрос в том, действительно ли существует «первичный ЭБУ», на который я должен обратить внимание, или все эти ответы одинаково важны? Если есть основной, на который мне нужно ориентироваться, есть ли команда, которую я могу отправить, чтобы определить, какой из них является «наиболее значимым»?

Транспортные средства, испытанные на:

2011 Chevy Cruze               [2 ECUs]
2015 BMW M5                    [3 ECUs]
2015 Range Rover Autobiography [3 ECUs]
Рейн С
источник
1
Может быть полезно сообщить нам, какую марку и модель вы на нем пробовали. Что я знаю, так это то, что автомобили с 3 ЭБУ, как правило, устанавливаются с двумя обычными ЭБУ (по одному на каждый блок двигателей) и одним «главным» ЭБУ, который управляет сигналами в / из (и, возможно, между?) Двух обычных ЭБУ. «Главный» ECU на самом деле не делает намного больше, поэтому, если установлен диагностический код неисправности, источником этого будет обычный ECU, а не «ведущий». Однако вам может потребоваться опросить мастер через интерфейс OBD-II, чтобы получить коды DTC. Я бы хотел помочь вам больше, чем это, но это все, что у меня есть сейчас.
Заид
1
Я инженер-программист, но не использовал OBD или CAN, но помогает ли эта страница вообще? Похоже, должен быть способ фильтровать сообщения.
JPhi1618
@Zaid Спасибо за дополнительную информацию. Я обновил свой вопрос машинами, на которых я его проверял, но это то, что мне нужно будет решить для любого количества автомобилей; это может не иметь значения, в зависимости от точного ответа, который я должен ожидать при отправке неподдерживаемых PID, но я просто хотел охватить все мои базы
Рейн S
@ JPhi1618 Это фактически тот же контекст, в котором я нуждался в этом. Это может быть путь, по которому я должен идти! Большое спасибо за ссылку, я углублюсь в нее немного глубже.
Рейн С
1
Если вы найдете что-то интересное, что, по вашему мнению, вы можете воплотить в «ответ», вернитесь и ответьте на свой вопрос. Это полностью разрешено.
JPhi1618

Ответы:

5

Если ваш автомобиль 2008 года или новее, он использует протокол can, вы можете использовать команду AT CR, чтобы выбрать, какой ECU вы хотите услышать.
Вот как:
отправить

AT H1

это включит заголовки, чтобы увидеть адреса ECU.
Отправить

0100

это команда OBD, чтобы показать, какие из пидов от 1 до 20 поддерживаются.
Ваш ответ должен быть таким:

7E8064100BE3EA813
7E906410098188013
>

это показывает, что у вас есть 2 ECU 7E8 (двигатель) 7E9 (коробка передач),
я видел 5 возвращенных ECU: 7E8,7E9,7EA, 7EB, 7EC.
Для получения ответа только от одного ECU вы выпускаете AT CRA xxx, где xxx - адрес ECU.
отправить следующее

AT CRA 7E8

тогда

0100

вернусь:

7E8064100BE3EA813

Отправить

AT H0

чтобы отключить заголовки, отправьте:

0100

и ты вернешься просто

4100BE3EA813

Если ваш автомобиль 29-битный, то резонанс 0100 будет выглядеть примерно так:

18DAF11806410088180013
18DAF110064100BE5FA813
>

это показывает 2 ЭБУ 18DAF118 (коробка передач) и 18DAF110 (двигатель).
Отправить

AT CRA 18DAF110

услышать только из двигателя.

Годзилла
источник
Привет !! Я работаю над прототипом системы диагностики транспортных средств. Я прошёл ваш ответ, но у меня есть несколько запросов ... 1) Есть ли AT-команда, чтобы проверить, сколько ECU доступно. 2) если заголовок выключен, то почему отображается только одна строка "4100BE3EA813", а не обе "410098188013"
Dev
4

CAN не работает, как вы думаете.

CAN не основан на модуле, он основан на сообщениях. Ни один модуль не говорит напрямую с любым другим модулем. В CAN модуль генерирует сообщение с адресом, который идентифицирует данные, которые будут содержаться в сообщении. Также адрес дает важность сообщения. Чем ниже адрес, тем выше приоритет.

Например, ABS будет передавать скорость автомобиля. Каждый другой модуль, которому нужны данные, будет читать их в.

Нет более важного модуля, чем любой другой, важен приоритет сообщений.

vini_i
источник
Просто для продолжения: если нет более важного модуля, чем другой, есть ли причина отфильтровывать ответы от нескольких ECU? Например, если я запрашиваю обороты для BMW M5, я получаю 3 ответа (в целом они похожи, но никогда не совпадают). Должен ли я просто «доверять» первому ответу как точному прочтению? Есть ли какая-то причина не просто идти с первым ответом на каждый запрос?
Рейн С
Если все ответы имеют одинаковый адрес, доверяйте первому. Если у них нет одного и того же адреса, доверяйте тому, который имеет самый высокий приоритет. Самый высокий приоритет имеет самый низкий адрес.
vini_i