Вопрос

Как OBD2 работает с CAN?

Я понимаю, как работает CAN (как мне кажется). Здесь есть полезная информация, если вам интересно: Разница между OBDII и CAN


Если вкратце, то существует несколько модулей, и каждый из них отправляет интересные данные по проводам. Каждый модуль получает данные, а затем решает, интересны ли они для этого модуля. Если да, то они сохраняются, если нет — игнорируются. (Я понимаю, что это очень краткое описание и в нём не учитываются приоритеты при одновременной отправке нескольких сообщений и т. д., но нам не нужно об этом беспокоиться)


Я использую Bluetooth-сканер ELM327 OBD2 и Arduino/ESP32 для считывания данных с моего автомобиля.


Я читал, что в некоторых автомобилях нельзя проводить опрос быстрее, чем с частотой 10 Гц, так как это может привести к внутренним проблемам. Именно здесь я запутался.


Итак, допустим, всё, что мне нужно, — это частота вращения двигателя, которую показывает ELM327.


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


Насколько я понимаю, CAN-шина в ELM327 представляет собой модуль, который сохраняет данные о частоте вращения двигателя каждый раз, когда они передаются. Затем он просто возвращает мне сохранённые данные о частоте вращения, когда я запрашиваю их с помощью Arduino. Хотя, возможно, это не так, поскольку устройства OBD2 могут получать коды неисправностей, которые сохраняются на различных модулях и не передаются.


Или в автомобиле есть «модуль OBD2», к которому подключается ELM327 и который он опрашивает? Если это так, то я не вижу необходимости в наличии проводов CAN в разъёме OBD2, а они там есть.


Я знаю, что у OBD2 есть PID, но не знаю, как они работают. Что происходит при их опросе? Просто ли он ищет ранее сохранённые сообщения в «модуле OBD», используя PID в качестве своего рода ключа, или он действительно преобразует его в CAN и опрашивает по CAN, что противоречит моему представлению о работе CAN?


Может быть, я совсем неправильно понимаю, как OBD2 взаимодействует с CAN? Или, может быть, я неправильно понимаю, что такое CAN?


Я бы хотел получать данные о частоте вращения двигателя с частотой выше 10 Гц, но я не хочу ничего ломать. У меня Renault 2006 года выпуска, если это вам как-то поможет.


Заранее благодарю



Перевод вопроса с Mechanics Stack Exchange
Лицензия: CC BY-SA (2.5–4.0)
Оригинальный вопрос: https://mechanics.stackexchange.com/questions/85452/how-does-obd2-work-with-can

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

  1. Ваш вопрос немного расплывчатый, но я постараюсь ответить на самый важный момент.


    Вы сказали: «Насколько я понимаю CAN, вам не нужно запрашивать данные, вы просто сохраняете их каждый раз, когда они публикуются, если они вам интересны». Но это не так работает.


    OBD2 работает по схеме «запрос — ответ». Адаптер OBD2 преобразует данные между UART и фактическим протоколом транспортного средства (в вашем случае CAN) и отправляет цифры по шине. Затем он ожидает ответа. Если ответ получен, он собирает его, преобразует в цифры и отправляет по UART.


    Если в течение времени ожидания (по умолчанию 200 мс) не поступает никаких ответов, устройство отправляет ответ «NO DATA» через UART.


  1. Если я не ошибаюсь, OBDII и CAN — это два отдельных протокола связи, работающих по разным проводам. OBDII использует последовательную (более старую и медленную) связь по двум проводам. Canbus использует два провода, отдельные от OBDII, а протоколы связи не являются последовательными, а транслируются по параллельным проводам, в отличие от последовательной связи, при которой данные передаются последовательно. Canbus был создан, когда электроника в наших автомобилях стала более сложной и не могла работать с последовательной связью, которая перегружала и без того перегруженную последовательную связь. У дилеров есть специальные сканеры, которые позволяют получить доступ ко всему, в отличие от обычных считывателей, которые предоставляют доступ только к кодам OBDII. Новые считыватели считывают коды ABS, что расширяет доступ к данным. Частота вращения двигателя считывается с последовательных линий связи OBDII, а не с CAN-шины. Последовательные соединения работают медленнее, но для большинства людей, интересующихся данными в реальном времени, это не имеет значения. Дилеры используют CAN-шину для тестирования датчиков и программирования. Последовательные соединения не позволяют тестировать датчики или программировать различные модули. У меня есть считывающее устройство по умеренной цене, но оно не может считывать данные с CAN-шины и ограничивается декодированием общих ошибок. Мой вторичный клон scantool из GMs делает (я думаю, но не пробовал все) практически все, что делает дилерский scantool, но с гораздо меньшими затратами, получая доступ к данным OBDII и canbus. Мой scantool использовался для программирования сменных пультов дистанционного управления к модулю управления корпусом (BCM), включал все датчики и индикаторы для проверки дисплея, включая проводку и модуль, и выявлял различные ошибки, такие как история отключения аккумулятора или ошибки, связанные с отключениями аккумулятора. Мой универсальный считыватель не может так глубоко проникать в каждый модуль, как scantool. Если я оплачу онлайн-доступ к веб-сайту GM, то смогу при необходимости обновить или исправить любые предыдущие проблемы с помощью своего клонированного scantool.


  1. Это помогло мне понять, что OBD2 не использует CAN, как я думал. В других источниках, например в ссылке в моём вопросе, говорится, что CAN — это как бы данные на нижнем уровне, а OBD2 — это «красивый» язык на верхнем уровне
  1. Возможно, дополнительная информация об OBDI и OBDII поможет прояснить ситуацию с дезинформацией при описании оригинального OBDI, использующего протоколы связи RS232, последовательную связь до того, как CAN-шина была внедрена позже, когда OBDII заменил OBDI; geotab.com/blog/obd-ii
  1. Мне интересно, как это делает ваш ответ более правильным? Может, это вам поможет?
  1. Насколько мне известно, для CAN-шины и последовательной связи используются разные провода, поэтому для отдельных протоколов связи создаются две пары коммуникационных линий.
  1. Тогда объясните, почему здесь две пары проводов: одна для последовательного подключения — контакты 2 и 5, другая — для параллельного подключения — контакты 6 и 14?
  1. Я знаком с технологией CAN-шины, но она не использовалась в системах OBDI, так что ваш вопрос спорный. CAN-шина была добавлена не для того, чтобы использовать последовательные линии, а для того, чтобы OBDII мог передавать больше данных по мере добавления новых модулей. Последовательная связь использовалась задолго до появления CAN-шины. Все принтеры с первого года выпуска использовали последовательную связь на протяжении десятилетий. В распиновке 9-контактных последовательных разъёмов использовались два контакта. Сохранение последовательных конфигураций, как это было принято в автомобильной связи, означало использование той же распиновки. Canbus не использует те же линии, что и последовательные коммуникации.
  1. Ваша основная предпосылка неверна. CAN — это сеть контроллеров, которая является основой всей коммуникационной сети автомобиля. Она была разработана для того, чтобы отдельные узлы могли взаимодействовать друг с другом по всему автомобилю без необходимости в центральном компьютере, а также для сокращения количества медных проводов. OBD2 работает на шине CAN. Это система самодиагностики и отчётности автомобиля. Я хочу сказать, что ваш ответ совершенно не соответствует действительности и является неверным. «Немного» правильной информации, приправленной большим количеством лжи.
  1. Я не уверен, что стоит разбивать его на абзацы или что это вообще можно сделать. Да, я склонен много говорить, но стараюсь предоставлять актуальную информацию, которую может быть сложнее понять, если она будет сокращена, поэтому я добавляю примеры.
  1. @RoryAlsop Мне не кажется, что я задаю несколько вопросов. Я хотел понять, как OBD2 получает данные CAN (в данном случае данные об оборотах двигателя), например, с помощью опроса или ожидания сообщений, и сохраняет их. Я добавил дополнительную информацию в вопрос, чтобы все знали о моих предположениях (о том, что, как мне кажется, я знаю) на случай, если я ошибаюсь и это сбивает меня с толку. Судя по ответу ниже, на самом деле CAN не используется для определения частоты вращения. Зная это, я лучше понимаю ответ по ссылке выше
  1. У вас много вопросов, но не все они связаны между собой. Пожалуйста, сформулируйте свой вопрос так, чтобы в нём был только один ключевой момент. Кроме того, ознакомьтесь с похожими вопросами — думаю, у нас есть публикации, которые ответят на большинство ваших вопросов.
  1. Добро пожаловать в компанию по техническому обслуживанию и ремонту автомобилей!
Вы уже ответили на этот вопрос