Я обычно не «автомобильный человек», поэтому, надеюсь, я смогу объяснить это достаточно хорошо, чтобы получить некоторую помощь здесь:
При отправке сообщений на устройство 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]
Ответы:
Если ваш автомобиль 2008 года или новее, он использует протокол can, вы можете использовать команду AT CR, чтобы выбрать, какой ECU вы хотите услышать.
Вот как:
отправить
это включит заголовки, чтобы увидеть адреса ECU.
Отправить
это команда OBD, чтобы показать, какие из пидов от 1 до 20 поддерживаются.
Ваш ответ должен быть таким:
это показывает, что у вас есть 2 ECU 7E8 (двигатель) 7E9 (коробка передач),
я видел 5 возвращенных ECU: 7E8,7E9,7EA, 7EB, 7EC.
Для получения ответа только от одного ECU вы выпускаете AT CRA xxx, где xxx - адрес ECU.
отправить следующее
тогда
вернусь:
Отправить
чтобы отключить заголовки, отправьте:
и ты вернешься просто
Если ваш автомобиль 29-битный, то резонанс 0100 будет выглядеть примерно так:
это показывает 2 ЭБУ 18DAF118 (коробка передач) и 18DAF110 (двигатель).
Отправить
услышать только из двигателя.
источник
CAN не работает, как вы думаете.
CAN не основан на модуле, он основан на сообщениях. Ни один модуль не говорит напрямую с любым другим модулем. В CAN модуль генерирует сообщение с адресом, который идентифицирует данные, которые будут содержаться в сообщении. Также адрес дает важность сообщения. Чем ниже адрес, тем выше приоритет.
Например, ABS будет передавать скорость автомобиля. Каждый другой модуль, которому нужны данные, будет читать их в.
Нет более важного модуля, чем любой другой, важен приоритет сообщений.
источник