Как 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
Ваш вопрос немного расплывчатый, но я постараюсь ответить на самый важный момент.
Вы сказали: «Насколько я понимаю CAN, вам не нужно запрашивать данные, вы просто сохраняете их каждый раз, когда они публикуются, если они вам интересны». Но это не так работает.
OBD2 работает по схеме «запрос — ответ». Адаптер OBD2 преобразует данные между UART и фактическим протоколом транспортного средства (в вашем случае CAN) и отправляет цифры по шине. Затем он ожидает ответа. Если ответ получен, он собирает его, преобразует в цифры и отправляет по UART.
Если в течение времени ожидания (по умолчанию 200 мс) не поступает никаких ответов, устройство отправляет ответ «NO DATA» через UART.