Pull to refresh

Comments 59

А где достать список соответствия пидов и вообще описание режимов?
и
03 – Для отображения сохраненных кодов ошибок
0A – Для отображения постоянных кодов ошибок.

а ещё какие бывают?
==
Чуть бы ещё подробностей, поскольку тема гораздо глубже чем просто прочитать циферки. есть автомобили которые ODB2 поддерживают очень урезанно но при желании отдают расширенные данные но на неописанные стандартом запросы и хотя ELM может отправлять такие запросы но почти ни одна программа этого не умеет поскольку авторы дальше мануала из интернета не ходили

Сейчас как решил вопрос прямого общения с CAN шиной через elm327.
Obd2 это протокол который должны поддерживать все автомобили любой марки.
По Can ходит проприетарный протокол, у разных производителей свой набор команд.


Can управляет всему функциями авто. Obd2 для диагностики малого количества параметров.
Например через obd2 я не могу посмотреть открыта дверь или закрыта, по Can могу.

Просто в автомобиле может быть несколько CAN-шин. На одной может висет магнитола, кондиционер и CD-ченджер, на второй — контроллер двигателя и электронный стояночный тормоз, а третья — торчать в OBD2.
Я поправлю: CAN НЕ управляет всеми функциями авто.

CAN — это сеть из контроллеров которые сидят на одной шине и общаются между собой. Такие сети можно связать между собой только через Gateway.
Обычно же CAN'ом ошибочно называют два провода на корых сидят контроллеры.

ODB2 это протокол, по которому контроллеры могут общатся с внешним миром.

Т.е. кодируя запросы к контроллеру по ODB2-протоколу и передовая их по CAN-шине, можно:
  • заставить его сделать себе диагностику
  • выдать информацию о контроллере, машине (например если VIN)
  • перепрошить / проапдейтить software, bootloader контроллера
  • перекодировать / пеменять параметры
Все верно. И простейший вариант: подключиться к CAN-шине через OBD-разъем, воткнув в него «китайский свисток» на основке ELM327 (адаптер).

А в документации этого адаптера есть описание и протокола CAN-шины, и команды управления, например, тут.

В ответ на команду вы получите код, расшифровку которого можно посмотреть, например, здесь. Но это только общая часть, действительная для практически всех производителей. А далее надо копать для каждого отдельно: Peugeot, Scoda, Reno, Volvo и т.д.
OBD — это грубо говоря стандарт на порт диагностики. CAN — это протокол обмена. В разъеме OBD2 может быть как CAN, так и что-то другое.

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

А никто не пробовал написать fuzzer для этого протокола, чтоб можно было расковырять полный набор команд для имеюшейся марки/модели?
UFO just landed and posted this here
А можно через OBD2 получать в реальном времени данные от автомобиля?
Меня интересует скорость, поворот руля, обороты, текущая передача. Может, что-то еще.
UFO just landed and posted this here
Я заказал пятидолларовый свисток из китая, а приложений в сторе валом.
Можно пример?
Я знаю случаи, когда используется устройство, и цена его более 100 у.е. Хочу сравнить.
Ээээ, правильнен сказать: «Самое дешёвое профессиональное CAN-устройство — от 100 у.е.» ;)

А аот верхней границы, увы, нет. :)))
Это понятно, что можно и крыло от Боинга запихнуть. Просто… цена в ± 20 раз… дешевле. Но, хочу уточнить, то GPS-трекер + данные по топливу/обороты/напряжение АКБ/чего хотите, то и выводите… данные передаются через интрернет почти в реальном времени в районе 1 минуты… на сервер, а потом уже в клиент для пользователей.
Устройство — это просто адаптер. Вся соль в программе, которая будет подавать команды и разбирать затем ответ. А вот тут без знаний протоколов конкретных производителей НИКУДА не шагнешь. Поэтому и так дорого стоят.

Есть программа на python PyRen. Там многое очень доступно прямо из кода
Программы давно написаны + есть абонплата.

Ну, не совсем — если вам будет нужен высокоточный и многоканальный CAN-сниффер & логгер для отладки программ — то там само по себе железо будет тоже не одну тысячу у.е. стоить. :)

В общем из известных мне профессиональных, но самых простых решений — где чисто на USB идёт поток данных, но там и оболочка есть простая и удобная, и API, и ещё пара мелочей — это вот:


https://www.peak-system.com/PCAN-USB.199.0.html?&L=1


Кажется, в "классических работах" Миллера и Валасека их тоже видел. :)

Мы наверное о разных вещах говорим. Вот это приблуда, которая используется. Внешне похожа, но не точно, что эта конкретная модель.
А чем оно лучше банального CAN-Hacker (в тех его инкарнациях, которые не теряют пакеты)?

Эээ, тут я, увы, не знаю, что сказать — не видел, опыта нет. :)

Ну, по моему опыту, софтина имени canhack.de вполне работоспособна. Железка (FTDI + AVR + SPI-to-CAN + CAN PHY) на больших нагрузках любит терять пакеты, но если настроить фильтры или слушать медленную шину, всё работает. Стоит на порядок (!) меньше.
В итоге железку я переделал (на основе STM'ки, там и USB поприличнее, и CAN нормальный). Осталось продолжить работу над собственной софтиной (с блэкдже… скриптами и фаззерами)…
Почему не взяли готовый CANtact? Там есть и железо и ПО для железа.
Ну, свой велосипед роднее :-)
Железка «сама» получилась методом выкидывания 90% кода из того устройства, которым я занимаюсь бОльшую часть рабочего времени (и поэтому она вряд-ли попадёт в открытый доступ).
А софтину пришлось делать, т.к. для исследований нужна была логика вида «запомнить пакет А, при получении пакета Б сложить байт 1 из А и байт 2 из Б и отправить обратно». Кто такое предоставляет (бесплатно или недорого), я не знаю.
Надо б это всё допилить до удобного состояния и выложить, авось не у одного меня руки чешутся… ;-)
Почесал бы ваши руки ))) Вот только пошел по легкому пути — игрась с готовым Cantact + SocketCAN. Хотя честно сказать игра получается пока так себе…
пример чего? «свисток китайский 5-баксовый» в связке с андроидом (на андроиде какая-нибудь Torque Pro) действительно умеет отправлять в стандартные запросы (см. википедию) и действительно показывать скорость/обороты/температуру/мгновенный расход.

Ну вот у меня как-то забарахлила приборка.
Ехать оставалось километров 200, а скорость 0. Да и обороты не особо верно кажет.
Подрубаем EML'ку и вуаля. Аналогичные истории с загоранием чека внезапным.


Пока у вас машина новая, это все не нужно — когда вы ездите на винтаже, то вот тут оно нужно и даже очень.

UFO just landed and posted this here
пример чего?
Устройства.
Если разговор о моём устройстве, то это ELM327 Bluetooth adapter, купленный на алиэкспрессе лет 5 назад (ссылка не сохранилась). Клон, разумеется, но т.к. никакого rocket science внутри нет, клон работоспособный.
Я, правда, не очень понимаю, как Вам эта информация поможет.
И именно такое же устройство описывается в статье.
Мде, я понял в чем моя проблема, я почему-то пропустил момент, где было сказано, какое устройство… нужно было просто идти спать… Это разные устройства. Да, через блутус подключается… для передачи данных с помощью симки — это другое.
UFO just landed and posted this here
Лучше гуглить не ODB, а OBD (On Board Diagnostic) — шансов будет больше.
Пример чего?
Я цитировал. Автор что-то использовал, мог бы и пример привести на чем проверял.
А где искать список параметров?
Если под словом OBD-2 Вы понимаете протокол, то нет, нельзя. Этот стандарт изначально предназначался для контроля за выбросами двигателя, и там есть только параметры, которые явно или косвенно на эти выбросы влияют.
Список параметров можно найти в википедии, «OBD-II PIDs». Также можно почитать стандарты, например ISO 14230 (платный, но можно найти в интернетах).

А если под словом OBD-2 подразумевать разъем, всё становится интереснее. В дорогих машинах он соединяется с остальной шиной через гейт, и кроме диагностики там ничего нет, а вот во всём, что попроще, прямо в разъеме видно весь обмен на шине. И вот там есть и скорость (сама приходит, ничего спрашивать не надо), и обороты, и угол руля (если есть ESP или усилитель достаточно умный). Текущей передачи, правда, не будет (если задний ход не считать :-) ), но её можно самому посчитать по отношению скорости и оборотов двигателя.
Конечно, если «чисто случайно» подключить OBD-разъем не к Diagnostic-CAN, а к скажем Body-CAN (а CAN распределитель не трудно найти), то там столько самого прийдет, что только успевай подставлять HDD :-)

Я не буду утверждать, что это на всех машинах так, но на тех с которыми я работаю, те сигналы, которые отдаются на Diagnostic-CAN/OBD-разъем, записываются в контроллере в отдельные ячейки памяти. Поэтому:
  • то что читается с OBD — это отложенные (delayed) значения. Т.е. никакого RealTime (ESP, руль и т.д.)
  • колличество таких сигналов очень ограниченно
  • по каждому идут споры, должен ли электрик в мастерской или клиент этот сигнал видеть


… те сигналы, которые отдаются на Diagnostic-CAN/OBD-разъем, записываются в контроллере в отдельные ячейки памяти. Поэтому:…
поправлю сам себя — по Diagnostic-CAN конечно бегают и «обычные» CAN сигналы, вернее те, которые GateWay пропускает.
Те сигналы, про которые я писал (т.н. StroredData) — это несколько из другой оперы.

По сути-то — что и где будет видно, это решение архитекторов конкретной модели.


И настройки гейтвеев (если они есть).

Как пример: когда я в самообразовательных и тестовых целях подключился на OBD-разъём моей сейчас семилетней Хюндай i30 — то там прекрасно было видно весь поток CAN-информации. С реакцией отдельных байтов и битов на открывание дверей, окон и пр.


Но если есть гейтвеи и строгая фильтрация — то мало что будет видно.

Все машины разные, гарантированного набора данных просто нет.
Вы можете примерно ориентироваться на то, что есть на приборной панели. Эти данные передаются через моторный CAN, но не факт что все. Например на моей Toyota Isis датчик уровня топлива подключен к приборке аналоговым проводом, и в моторном CAN отсутствует. Информация о номере передачи и вообще режимах автомата тоже отсутствует (лампочки на консоли подключены проводами напрямую к контроллеру автомата).
Для информации о кузове (управление замками, состояние концевиков дверей), надо подключаться к кузовному CAN. Опять же, для моей машины второго CAN просто нет, и такую информацию снять нельзя.

Чисто ради примера — вот там одна точка с моей машины в движении. Указаны все параметры, которые удалось снять из моторного CAN по стандартному протоколу:

Toyota Isis OBDII info:

mode 1: show current data; PID 0x01: MIL/DTC monitor; FUEL:GASOLINE; (0x00072100)
mode 1: show current data; PID 0x03: Fuel system status; Fuel corection 1: Open loop due to engine load OR fuel cut due to deceleration; (0x0400)
mode 1: show current data; PID 0x04: Calculated engine load value; 54% (0x8A)
mode 1: show current data; PID 0x05: Engine coolant temperature; 89°C (0x81)
mode 1: show current data; PID 0x06: Short term fuel % trim—Bank 1; (0x80)
mode 1: show current data; PID 0x07: Long term fuel % trim—Bank 1; (0x7D)
mode 1: show current data; PID 0x0B: Intake manifold absolute pressure; 53 kPa (0x35)
mode 1: show current data; PID 0x0C: Engine RPM; 1664 RPM (0x1A00)
mode 1: show current data; PID 0x0D: Vehicle speed; 85 km/h (0x55)
mode 1: show current data; PID 0x0E: Timing advance; 9° (0x92)
mode 1: show current data; PID 0x0F: Intake air temperature; 7°C (0x2F)
mode 1: show current data; PID 0x10: MAF air flow rate; 5 gramm/sec (0x0240)
mode 1: show current data; PID 0x11: Throttle position; 19% (0x32)
mode 1: show current data; PID 0x13: Oxygen sensors present; (0x03)
mode 1: show current data; PID 0x15: Bank 1, Sensor 2: Oxygen sensor voltage, Short term fuel trim; (0x03FF)
mode 1: show current data; PID 0x1C: OBD standards this vehicle conforms to; JOBD (Japan); (0x0A)
mode 1: show current data; PID 0x1F: Run time since engine start; 2889 sec (0x0B49)
mode 1: show current data; PID 0x21: Distance traveled with malfunction indicator lamp (MIL) on; 0 km (0x0000)
mode 1: show current data; PID 0x24: O2S1_WR_lambda(1): Equivalence Ratio Voltage; (0x9DCF9FFF)
mode 1: show current data; PID 0x2E: Commanded evaporative purge; 0% (0x00)
mode 1: show current data; PID 0x30: # of warm-ups since codes cleared; 255 (0xFF)
mode 1: show current data; PID 0x31: Distance traveled since codes cleared; 9531 km (0x253B)
mode 1: show current data; PID 0x33: Barometric pressure; 99 kPa = 742 mm Hg (Absolute) (0x63)
mode 1: show current data; PID 0x34: O2S1_WR_lambda(1): Equivalence Ratio; (0x9DCF829C)
mode 1: show current data; PID 0x3C: Catalyst Temperature Bank 1, Sensor 1; 731°C (0x1E1F)
mode 1: show current data; PID 0x3E: Catalyst Temperature Bank 1, Sensor 2; 575°C (0x180F)
mode 1: show current data; PID 0x42: Control module voltage; 13.867 V (0x362B)
mode 1: show current data; PID 0x43: Absolute load value; 18% (0x0030)
mode 1: show current data; PID 0x44: Command equivalence ratio; 0 (0x6D97)
mode 1: show current data; PID 0x45: Relative throttle position; 1% (0x04)
mode 1: show current data; PID 0x46: Ambient air temperature; 1°C (0x29)
mode 1: show current data; PID 0x47: Absolute throttle position B; 51% (0x84)
mode 1: show current data; PID 0x49: Accelerator pedal position D; 17% (0x2D)
mode 1: show current data; PID 0x4A: Accelerator pedal position E; 32% (0x52)
mode 1: show current data; PID 0x4C: Commanded throttle actuator; 19% (0x32)
mode 1: show current data; PID 0x4D: Time run with MIL on; 0 min (0x0000)
mode 1: show current data; PID 0x4E: Time since trouble codes cleared; 24406 min (0x5F56)
mode 3: show stored DTC; none
mode 7: show pending DTC (detected during current or last driving cycle); none
В общем одна из наиболее практичных книг для OBD в DIY вот эта:

books.google.de/books?id=59l2DwAAQBAJ&printsec=frontcover&dq=OBD+Fahrzeugdiagnose+in+der+Praxis&hl=de&sa=X&ved=0ahUKEwjg3vqH2pPhAhUC2KQKHXBBAIoQ6AEIJTAA#v=onepage&q=OBD%20Fahrzeugdiagnose%20in%20der%20Praxis

Но на немецком, да. :)

P.S. lingvo — честно могу порекомендовать. Она ещё и хорошо оформлена и свёрстана — читать приятно и плотность практических полезностей высока.
в версии v2.1 отсутствует поддержка протоколов J1850 PWM и J1850 VPW, что говорит о том, что у вас не получится подключиться

… к некоторым старым автомобилям.
Последнее время (лет 10) в разъеме диагностики есть 500-й CAN, и стандартная диагностика работает именно по нему.
А вот интересно остались отдельные сканеры не по OBD протоколу?

До введения этого стандарта у каждого производителя был свой протокол для диагностики, а затем слышал только в BMW, и еще некоторых марок остались отдельные от общего стандарта разъемы.
В изобилии. Все «родные» фирменные сканеры — закрытые и свои собственные. Разъем чаще всего используется тот же самый (для удобства сервисников), но шина может быть соседняя (на стандартный разъем могут выводить 2 CAN-шины и какой-нибудь KLine) и протокол свой собственный (хотя часто очень похожий на стандартный).
Т.е. минимальный набор параметров отдают все и всегда (потому что по закону положено), а всё остальное — только за деньги…
UFO just landed and posted this here
А ПЛИСина не справится с обработкой чего-то типа ЭБУ?
Вы свои эксперименты где-то описывали? Интересно было бы почитать.
UFO just landed and posted this here
А вы релёй форсунками рулили???
ЭБУ не особо быстрая штука, на самом деле. Её до сих пор на 16-битных процессорах иногда делают (примечание 1: процессор специализированный. примечание 2: в большинстве случаев сейчас используются 32-битники).
Если вопрос «как самому сделать ЭБУ» интересен, можете погуглить «rusEFI». Просто как пример, что на коленке можно создать что-то работоспособное.
Ну это разные проекты, на самом деле. Мы тут выше обсуждали, что можно достать, просто подключившись к шине, а Вы предлагаете половину проводки перерезать. Управлять замками и моргать аварийкой методом прикручивания горсти релюшек умеет любой установщик автосигнализаций, это недостаточно айтишный метод :-)
А вот про запуск без ключа я б послушал. Или на нексии (?) иммобилайзера штатного не было?
Тут скорее вопрос, насколько вы готовы доверять лапше на ардуине, что она не заглушит двигатель во время обгона, а моргалки-закрывалки то пофиг.
Автомобиль вообще стрёмная штука.
На моём личном авто установлена некая противоугонная штука, которая опрашивает брелочек, и при его отсутствии блокирует двигатель. Сделана «профессионалами» и стоила ощутимых денег. Так вот, это поделие «последнего поколения, созданный на основе самых современных технологий по передаче данных» (цитата из документации) последние пару месяцев любит глушить движок после открытия двери (слава богу, опрос брелочка идёт только после того, как водитель потенциально вышел из авто). Вот потеплеет, вырежу я его к чертям, пока оно меня не угробило…

И да, я даже не заикался о том, что с ардуиной вместо замка зажигания надо ездить. Люди, которые делают такое… ну… неправы.
Последние несколько лет занимаюсь собственным любительским проектом по чтению информации через ELM327 (Android, iOS, Windows Phone), через меня прошли данные огромного количества автомобилей и могу сказать, что очень многое в статье не соответствует действительности или приведет к ошибкам.
Начнем с описания версий ELM327.
Во-первых, версии 1.5 не существует в природе. Вот список команд по версиям: www.elmelectronics.com/wp-content/uploads/2017/01/AT_Command_Table.pdf
Во-вторых, я прекрасно понимаю, что мы говорим о китайских подделках под ELM327, но у них тоже бесполезно смотреть на версию. Китайские бракоделы очень даже эволюционируют и в настоящее время тот номер версии, который вы видите у китайского адаптера (1.4, 1.5, 2.1, 2.2, 100.500) — не несет никакого смысла.
В какой-то момент китайским бракоделам люди стали активно возвращать плохие адаптеры со скриншотами программ для тестирования ELM. Все, что делают эти программы — отправляют команды и смотрят на ответ. Если ответ = «ОК», то команда поддерживается, если ответ "?" — команда не поддерживается.
Знаете, что придумали китайские бракоделы? Они придумали отправлять «ОК» даже на те команды, которые по факту не поддерживаются!
Сейчас появилось очень много адаптеров, которые говорят, что они 1.4 или 1.5, отвечают «ОК» почти на все команды, но по факту не работают так, как надо. Например, на запрос ATIBhh они отвечают ОК, но по факту скорость не меняют.
Если вы хотите купить себе нормальный адаптер — надо искать что-нибудь «брендовое», пусть и китайского происхождения. Номер версии — не важен.
Например, у меня есть Vgate, который гордо именует себя 2.1, но при этом реально хорошо работает и поддерживает протоколы J1850 (ATSP1, ATSP2).
Есть еще «hi-end» адаптеры от американских компаний — kiwi и OBDLink. К сожалению, их высокая цена — тоже не гарантия качества. Например, у меня есть последняя модель OBDLink MX+ (имеет статус MFI и может работать через обычный Bluetooth с iOS), так вот она любит регулярно зависать, хотя выдает самую высокую скорость опроса данных.
А самый классный адаптер из всех, что я пробовал — китайский Viecar c Bluetooth 4 :) Уровень поддержки команд — примерно на уровне версии 1.4 оригинального ELM327, но самое главное его достоинство — он работает чертовски стабильно.

Ладно, хватит про адаптеры, едем дальше.
Код разбора ошибок содержит ошибки и на многих автомобилях будет давать ошибочные результаты. Я правильно понимаю, что вы в raw данных делаете замену всех экземпляров «43» и «47» на пустоту? Не думали, что могут быть ошибки, в коде которых встречается 43 или 47?
А как вы удивитесь, когда узнаете, что несколько ошибок в одном ответе на автомобилях, работающих по ISO 15765-4 и работающих по ISO 9141-2, ISO 14230-4 выглядят по-разному.

Тоже самое и с чтением Freeze frame (режим 02): запрос Freeze frame отличается для автомобилей с ISO 15765-4 и с ISO 9141-2, ISO 14230-4.
Sign up to leave a comment.

Articles