Вопрос

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

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



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



Команда 01 00 должна возвращать 4 байта с информацией о поддерживаемых PID-кодах транспортного средства, но она также возвращает по 4 байта для каждого ЭБУ. Один из них представляет собой полностью заполненные 4 байта с несколькими включёнными и выключенными флагами, в то время как в других, похоже, включено лишь несколько флагов (пока что эти флаги всегда включены в «основной» ответ, но я не уверен, что так будет всегда).



Пример:



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


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



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



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



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



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


Перевод вопроса с Mechanics Stack Exchange
Лицензия: CC BY-SA (2.5–4.0)
Оригинальный вопрос: https://mechanics.stackexchange.com/questions/22982/received-frames-from-vehicles-with-multiple-ecu-chips

12 Комментариев

  1. Если ваш автомобиль выпущен в 2008 году или позже и использует CAN-протокол, вы можете использовать команду
    AT CR, чтобы выбрать, с каким ЭБУ вы хотите взаимодействовать.

    Вот как это работает:

    Отправить



    AT H1


    Это позволит включить заголовки для просмотра адресов ЭБУ.

    Отправить



    0100


    Это команда OBD, которая показывает, какие PID-коды от 1 до 20 поддерживаются.

    Ваш ответ должен быть таким:



    7E8064100BE3EA813
    7E906410098188013
    >


    Это означает, что у вас есть 2 блока управления: 7E8 (двигатель) и 7E9 (трансмиссия).
    Я видел 5 возвращённых блоков управления: 7E8, 7E9, 7EA, 7EB, 7EC.

    Чтобы получить данные только с одного ЭБУ, введите AT CRA xxx, где xxx — адрес ЭБУ.

    отправьте следующее



    AT CRA 7E8


    тогда



    0100


    вернется:



    7E8064100BE3EA813


    Отправить



    AT H0


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



    0100


    и ты вернёшься только



    4100BE3EA813


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



    18DAF11806410088180013
    18DAF110064100BE5FA813
    >


    На изображении показаны 2 блока управления: 18DAF118 (трансмиссия) и 18DAF110 (двигатель).

    Отправить



    AT CRA 18DAF110


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


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



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



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



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


  1. Как узнать название компонента ЭБУ по адресу, например: 7E8 — это двигатель, а 7E9 — трансмиссия? Какие команды используются?
  1. привет !! я работаю над прототипом системы диагностики автомобилей. Я ознакомился с вашим ответом, но у меня есть несколько вопросов... 1) есть ли какая-нибудь AT-команда для проверки количества доступных электронных блоков управления? 2) почему при отключённом заголовке отображается только одна строка «4100BE3EA813», а не обе «410098188013»?
  1. Если у всех ответов один и тот же адрес, то доверяйте первому. Если адреса разные, то доверяйте тому, у которого самый высокий приоритет. У самого высокого приоритета самый низкий адрес.
  1. Удалось ли вам когда-нибудь выяснить, сколько доступных электронных блоков управления? С наилучшими пожеланиями
  1. Если вы найдёте что-то интересное, что, по вашему мнению, можно развить в «ответ», вернитесь и ответьте на свой вопрос. Это совершенно нормально.
  1. @JPhi1618 На самом деле это практически тот же контекст, в котором мне это было нужно. Возможно, мне стоит пойти по этому пути! Большое спасибо за ссылку, я изучу её подробнее.
  1. @Zaid Спасибо за дополнительную информацию. Я дополнил свой вопрос информацией об автомобилях, на которых я это тестировал, но мне нужно будет решить этот вопрос для любого количества транспортных средств. Возможно, это не будет иметь значения, в зависимости от того, какой именно ответ я должен получить при отправке неподдерживаемых идентификаторов PID, но я просто хотел учесть все возможные варианты
  1. Я инженер-программист, но не работал с OBD или CAN. Поможет ли эта страница? Похоже, что должен быть способ фильтрации сообщений.
  1. Просто чтобы прояснить ситуацию: если нет модуля, который был бы важнее других, есть ли смысл отфильтровывать ответы от нескольких электронных блоков управления? Например, если я запрошу частоту вращения двигателя BMW M5, я получу три ответа (они в целом похожи, но никогда не бывают абсолютно одинаковыми). Стоит ли мне просто «довериться» первому ответу как достоверному? Есть ли смысл в том, чтобы не использовать первый ответ для каждого запроса?
  1. Возможно, будет полезно сообщить нам, на какой марке и модели автомобиля вы это опробовали. Я знаю, что в автомобилях с тремя ЭБУ обычно используются два обычных ЭБУ (по одному на каждый блок цилиндров) и один «главный» ЭБУ, который управляет сигналами, поступающими на два обычных ЭБУ (и, возможно, между ними?) «Главный» ЭБУ на самом деле не делает ничего сверх этого, поэтому, если установлен диагностический код неисправности, его источником будет обычный ЭБУ, а не «главный». Однако вам может потребоваться опросить «главный» ЭБУ через интерфейс OBD-II, чтобы получить коды DTC. Я бы хотел помочь вам больше, но пока это всё, что я могу сделать.
Вы уже ответили на этот вопрос