Записки диагноста-теоретика. Пишу ПО для автодиагностики на Android. Часть 2. Читаем данные с датчиков ЭБУ
Здравствуйте
В прошлой версии я сделал подключение к ЭБУ двигателя с автоматически подбором протокола обмена с ЭБУ двигателя для чтения и сброса ошибок по протоколам стандарта OBD2 (iso15031-5).
Сейчас я жалею, что не подключил аналитику FireBase к приложению, поэтому приходится судить о результативности по показам рекламных объявлений AdMob.
Так вот, при успешном сбросе ошибок ЭБУ, показывается межстраничное объявление. Судя по соотношению запросов показов объявления в чтении кодов ошибок и запросов показа объявлений при успешном сбросе ошибок, около 75% пользователей, читающих ошибки, успешно сбрасывают CheckEngine. Значит можно с определенной уверенностью считать, что протокол подбирается приемлемо, но ещё есть куда стремиться (напишите мне, пожалуйста, если у вас не получилось считать или сбросить коды ошибок, с указанием марки и года выпуска авто, я постараюсь узнать, какой протокол обмена должен быть, чтобы успешно выполнить операцию).
Теперь я добрался до чтения параметров с датчиков ЭБУ двигателя.
Давайте сначала немного окунемся в теорию для понимания процессов диагностики по OBD2.
Если рассматривать компьютерную диагностику, как набор так называемых «сервисов диагностики», можно выделить нужные нам для чтения ошибок, их сброса и получения расчетных значений параметров. Эти «сервисы» можно в свою очередь упрощенно разделить на связанные с выбросами в атмосферу (OBD2) и не связанные с ними (UDS).
Сервисы OBD2 для чтения ошибок:
0x03 — запрос кодов ошибок, состояние которых подтвержденно в течение определенного времени при определенных условиях;
0x07 — запрос кодов ошибок, состояние которых еще не подтверждено (нужно для проверки устранения неисправности после сброса ошибок, здесь код появляется почти сразу и обычно не отдаёт команду на включение сигнализатора CheckEngine, пока не перейдет в разряд подтвержденных);
0x0A (поддерживается не во всех реализациях протокола OBD2) — запрос кодов ошибок, которые сохранены в постоянной памяти. Их невозможно стереть из памяти с помощью сервиса сброса ошибок. Только алгоритмы блока управления могут определить, что неисправность устранена и автоматически удалить ошибки из постоянной памяти.
Сервис OBD2 для стирания ошибок — 0x04.
Сервисы UDS для чтения ошибок:
0x19 – сервис для чтения информации об ошибках любого вида, уточнение характеристик читаемых ошибок происходит во втором и третьем байте посылки. Например 1902FF считает все ошибки, даже те, которые просто еще не прошли проверку и не подтвердятся после всех внутренних тестов ЭБУ.
0x17 и 0x18 сервисы тоже читают ошибки (не буду вдаваться в подробности, но там есть отличия между способами чтения). Например, в реализации протокола KWP2000 в ЭБУ Январь 5 на ВАЗах ошибки читаются сервисом 0x18.
Сервис UDS для стирания ошибок – 0x14.
Также в некоторых случаях для этой цели используется сервис выполнения функций 0x31.
Аналогично есть сервисы для чтения параметров.
В OBD2:
Сервис 0x01 - предназначен для чтения данных, связанных с токсичностью отработавших газов. Во втором байте запроса передаётся идентификатор параметра (PID), который указывает системе бортовой диагностики в ЭБУ об информации, которую нужно передать диагностическому оборудованию. Идентификаторы запросов для этого сервиса в большинстве случаев стандартны и только некоторые отданы производителям для нестандартных параметров.
В UDS:
Сервисы 21 и 22 позволяют считать данные по однобайтовому или двухбайтовому идентификатору. Идентификаторы в большинстве определяются производителями и только некоторые вроде чтения VIN или параметров версий прошивок стандартизированы.
Итак, сервисы UDS конечно хороши, но для их использования нужно знать адреса блоков и идентификаторы. А эту информацию я пока не нашёл. В OBD2 же адресация блоков управления стандартизирована.
Но и по протоколу OBD2 можно прочитать много параметров через сервис 01, правда поддерживаются они на каждом автомобиле в разном составе, и пока я реализовал чтение основных датчиков, которые были в реализации библиотеки obd-java-api. Это такие параметры, как скорость автомобиля, обороты двигателя, температура охлаждающей жидкости, положение педали акселератора, температура на впуске и т.п. Проверка доступных на проверяемых авто датчиков пока не реализована, но в следующих версиях планирую добавить. Это позволит не выводить датчики, которых нет в реализации протокола ЭБУ.
Мне очень важно, чтобы на этом этапе было гарантированное считывание хотя бы скорости, оборотов и температуры охлаждающей жидкости, так как, если они будут на большинстве автомобилей, то можно на их основе сделать виртуальную панель приборов на OpengGL. Наработки в этой части уже есть на Linux, теперь нужно перенести на Android и вперед. Картинки не мои, но хочу примерно так же)
Можно конечно идти по пути Torque, CarScanner или ObdMary и делать кастомизируемые наборы стрелочных или цифровых приборов, но мне пока проще сделать не настраиваемую приборную панель, потому что её я уже делал раньше.
Пишите в комментариях, пользуетесь ли вы наборами цифровых или стрелочных приборов в программах диагностики или чаще просто графики смотрите или просто читаете и стираете ошибки?
Графики тоже в процессе разработки и скоро будут в приложении, когда будет отлажено чтение датчиков в имеющемся режиме у большинства пользователей.
Чтобы вам не мешала реклама и ограничения бесплатной версии, отдаю 50 промокодов для тех, кто хочет поэкспериментировать:
1) XEMJF1CRC58X2JUU5SPF6K8
2) THPTPYPUPVAAAMWVUG6T013
3) G70DNH65YT53P2EYAPRL9GD
4) ERYEVGV8DK8LXS5WBGZ0ZDJ
5) YZX5X6A091X5GLK4QN31TEV
6) XSM32WUHVVD8CTQHLKBYMJV
7) HC4Q2Y31DCVM3WXA15K8C6S
8) TMLX0V9M7VXVG9YA6PZ2ZUD
9) KCLACCJSKS5GDAJZHF3BMZS
10) P53MMB19EKXAD92C54RZ759
11) KQ2CMV53NN3QQGRV2D1PNXZ
12) RXZGKPQF1C27W4SJ8TY0UXX
13) UL0DW74F0LJ195A86TNHYZW
14) LSJV04R64V5ZNR87YKX0126
15) VT7SHKKS1A4HG89H1QY5ERN
16) 7GTV74B6CUR2V3AR9L3V14P
17) XH3TVY3T3W4KDRA220K53JS
18) BGJQNUC9H1CLD74S7SXW5MD
19) AYB3GWX5039U8R9HLZY8E01
20) RAYUGZY9W7UT85M8HZVRBA1
21) ZJ7GV49UCD98GLY3LF5H891
22) 67PM2ALY8JS8GY0KZU4WP74
23) TN3MNQFWVELHCV4HNRVTJCL
24) Z79XSNZRV3R6NFSCT9FMT7U
25) YHZE3XTX5RYQ7L209L89LRZ
26) VNG0CHB0PPQZL1MR8ZUUPJY
27) 0BBAHX4H1SXF127PAZU5CDF
28) DVUDJR9MKMDLABYTPUEL8XB
29) E3GYWZ7SCD2E77A33V6V7ST
30) PMUL8SMBNV5X7ETRCNYCTK2
31) UGY0TER6DY9YYKABNJ9FC2N
32) WZVRLMYXPV9WP1FH7CTDSFF
33) ARAF8NS4GCKPRQ7A2D0PH64
34) KCF2RYSWRX7N6L8A3FNNT9A
35) F7MT0VBL1D7ELE9EK0NQWYX
36) M905DK2RFDAY2WR0HDZK302
37) UGSLS7APDZZ5RT7MVKFGZSM
38) C44FS650P9FLYBGC1FPL3MA
39) XQX1C9SV9916Z5CBGW9L85J
40) PKW5E7GMGNVD869WZXXS543
41) 2RMY7ZM9UNRV81C0164XKQE
42) JXW55HJTCBMMK33W023D6N3
43) 61NX60PJBS9827XY0Y1MMTP
44) BDTJMETFKC64GBPD7QFU990
45) F79QHFR91RCXV0Q5EDX4Y4G
46) SRHDK6WGXYTHBY241QML54X
47) 7FCBPJX1L8ZU5F4C53S0968
48) TSKMK2C1HBTG0HACRH5VPSH
49) 6NSPP6CG55FRC1H9UAM2UXQ
50) JYG0YGHULQC34TMX98XGWU1
Просьба отписываться, какой промокод использовали, чтобы другим было меньше искать.
Ссылка на приложение: https://play.google.com/store/apps/details?id=ru.wheelsoft.f...
Мой телеграм: https://t.me/Maxon205