Comments 59
и
03 – Для отображения сохраненных кодов ошибок
0A – Для отображения постоянных кодов ошибок.
а ещё какие бывают?
==
Чуть бы ещё подробностей, поскольку тема гораздо глубже чем просто прочитать циферки. есть автомобили которые ODB2 поддерживают очень урезанно но при желании отдают расширенные данные но на неописанные стандартом запросы и хотя ELM может отправлять такие запросы но почти ни одна программа этого не умеет поскольку авторы дальше мануала из интернета не ходили
Сейчас как решил вопрос прямого общения с CAN шиной через elm327.
Obd2 это протокол который должны поддерживать все автомобили любой марки.
По Can ходит проприетарный протокол, у разных производителей свой набор команд.
Can управляет всему функциями авто. Obd2 для диагностики малого количества параметров.
Например через obd2 я не могу посмотреть открыта дверь или закрыта, по Can могу.
CAN — это сеть из контроллеров которые сидят на одной шине и общаются между собой. Такие сети можно связать между собой только через Gateway.
Обычно же CAN'ом ошибочно называют два провода на корых сидят контроллеры.
ODB2 это протокол, по которому контроллеры могут общатся с внешним миром.
Т.е. кодируя запросы к контроллеру по ODB2-протоколу и передовая их по CAN-шине, можно:
- заставить его сделать себе диагностику
- выдать информацию о контроллере, машине (например если VIN)
- перепрошить / проапдейтить software, bootloader контроллера
- перекодировать / пеменять параметры
А в документации этого адаптера есть описание и протокола CAN-шины, и команды управления, например, тут.
В ответ на команду вы получите код, расшифровку которого можно посмотреть, например, здесь. Но это только общая часть, действительная для практически всех производителей. А далее надо копать для каждого отдельно: Peugeot, Scoda, Reno, Volvo и т.д.
Вообще, рассматривайте CAN как ethernet для автомобиля. Как через обычный ethernet может ходить что угодно, начиная от голосовых звонков и заканчивая торрентами, так и на шине CAN может быть все что туда захочет запихнуть производитель авто.
Есть ещё LIN, но он менее распространен:
https://en.m.wikipedia.org/wiki/Local_Interconnect_Network
Так же есть наборы команд для определенных марок и типов автомобилей, эти наборы предоставляются за отдельную плату.
А никто не пробовал написать fuzzer для этого протокола, чтоб можно было расковырять полный набор команд для имеюшейся марки/модели?
Меня интересует скорость, поворот руля, обороты, текущая передача. Может, что-то еще.
Я заказал пятидолларовый свисток из китая, а приложений в сторе валом.Можно пример?
а зачем? :)
А аот верхней границы, увы, нет. :)))
В общем из известных мне профессиональных, но самых простых решений — где чисто на USB идёт поток данных, но там и оболочка есть простая и удобная, и API, и ещё пара мелочей — это вот:
https://www.peak-system.com/PCAN-USB.199.0.html?&L=1
Кажется, в "классических работах" Миллера и Валасека их тоже видел. :)
Эээ, тут я, увы, не знаю, что сказать — не видел, опыта нет. :)
В итоге железку я переделал (на основе STM'ки, там и USB поприличнее, и CAN нормальный). Осталось продолжить работу над собственной софтиной (с блэкдже… скриптами и фаззерами)…
Железка «сама» получилась методом выкидывания 90% кода из того устройства, которым я занимаюсь бОльшую часть рабочего времени (и поэтому она вряд-ли попадёт в открытый доступ).
А софтину пришлось делать, т.к. для исследований нужна была логика вида «запомнить пакет А, при получении пакета Б сложить байт 1 из А и байт 2 из Б и отправить обратно». Кто такое предоставляет (бесплатно или недорого), я не знаю.
Надо б это всё допилить до удобного состояния и выложить, авось не у одного меня руки чешутся… ;-)
Ну вот у меня как-то забарахлила приборка.
Ехать оставалось километров 200, а скорость 0. Да и обороты не особо верно кажет.
Подрубаем EML'ку и вуаля. Аналогичные истории с загоранием чека внезапным.
Пока у вас машина новая, это все не нужно — когда вы ездите на винтаже, то вот тут оно нужно и даже очень.
пример чего?Устройства.
Я, правда, не очень понимаю, как Вам эта информация поможет.
И именно такое же устройство описывается в статье.
Список параметров можно найти в википедии, «OBD-II PIDs». Также можно почитать стандарты, например ISO 14230 (платный, но можно найти в интернетах).
А если под словом OBD-2 подразумевать разъем, всё становится интереснее. В дорогих машинах он соединяется с остальной шиной через гейт, и кроме диагностики там ничего нет, а вот во всём, что попроще, прямо в разъеме видно весь обмен на шине. И вот там есть и скорость (сама приходит, ничего спрашивать не надо), и обороты, и угол руля (если есть ESP или усилитель достаточно умный). Текущей передачи, правда, не будет (если задний ход не считать :-) ), но её можно самому посчитать по отношению скорости и оборотов двигателя.
Я не буду утверждать, что это на всех машинах так, но на тех с которыми я работаю, те сигналы, которые отдаются на 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
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, и стандартная диагностика работает именно по нему.
Интересующимся — вот там, в самом низу комментариев, накидал в среду ссылок для самообразования:
До введения этого стандарта у каждого производителя был свой протокол для диагностики, а затем слышал только в BMW, и еще некоторых марок остались отдельные от общего стандарта разъемы.
Т.е. минимальный набор параметров отдают все и всегда (потому что по закону положено), а всё остальное — только за деньги…
Вы свои эксперименты где-то описывали? Интересно было бы почитать.
Если вопрос «как самому сделать ЭБУ» интересен, можете погуглить «rusEFI». Просто как пример, что на коленке можно создать что-то работоспособное.
А вот про запуск без ключа я б послушал. Или на нексии (?) иммобилайзера штатного не было?
На моём личном авто установлена некая противоугонная штука, которая опрашивает брелочек, и при его отсутствии блокирует двигатель. Сделана «профессионалами» и стоила ощутимых денег. Так вот, это поделие «последнего поколения, созданный на основе самых современных технологий по передаче данных» (цитата из документации) последние пару месяцев любит глушить движок после открытия двери (слава богу, опрос брелочка идёт только после того, как водитель потенциально вышел из авто). Вот потеплеет, вырежу я его к чертям, пока оно меня не угробило…
И да, я даже не заикался о том, что с ардуиной вместо замка зажигания надо ездить. Люди, которые делают такое… ну… неправы.
Начнем с описания версий 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.
OBD2 reader — диагностика автомобиля