Предполагается, что к текущему моменту у нас есть машина с диагностическим разъемом, отвечающим OBD-II стандарту, любимое мобильное устройство (ноутбук, смартфон, планшет) и адаптер на базе ELM327, который позволит соединить машину и мобильное устройство.
Как уже говорилось в предыдущей части, независимо от типа связи между мобильным устройством и адаптером (Bluetooth, Wi-Fi, USB) на логическом уровне, — это последовательное соединение. На программном уровне необходимо открыть Socket соединение между компьютером и адаптером поверх имеющегося соединения нижнего уровня. Практическая программная реализация будет зависеть от операционной системы и типа соединения, примеров можно найти массу под все ваши любимые языки программирования. В качестве базового примера можно брать реализацию соединения на примерах чат-программ для Bluetooth или TCP\IP. В данной статье мы не будем останавливаться подробно на реализации такого соединения, для экспериментов нам хватит возможностей имеющихся программ а-ля Telnet, для экспериментов под Андроид и iOS мы встроили простую командную консоль в наше приложение OBD Car Doctor.
Итак, скачиваем и устанавливаем программу которая позволит установить последовательное соединение с адаптером и предоставить нам командную строку для общения с машиной.
- Для ноутбука с Windows (Linux) можно воспользоваться Putty ,
- для Андроид и iOS можно воспользоваться OBD Car Doctor Android, OBD Car Doctor iOS. Обратите внимание, что на момент публикации статьи на iTunes может еще быть старая версия 1.2, консоль будет доступна в версии 1.3.
После скачивания и установки программ пора брать компьютер (смартфон), адаптер и выдвигаться к машине. Распечатка этой статьи тоже не помешает.
- Убеждаемся, что перед вами ваша машина, и/или, что ее владелец не против
жестокихэкспериментов с диагностической системой автомобиля. - Подключаем адаптер к диагностическому разъему (надеюсь, вы подготовились заранее и уже нашли разъем в соответствии с рекомендациями предыдущей части).
- Ключ «на старт», включаем зажигание.
- На адаптере должна загореться лампочка питания, и мы можем продолжать.
Подробнее остановимся на связи с Bluetooth адаптером, как наиболее популярном и распространенном типе адаптеров.
Windows:
В разделе Устройства производим поиск новых устройств (на некоторых адаптерах нужно нажать кнопочку для того чтобы устройство обнаруживалось), после обнаружения устройства и ввода пин кода устройство появится в общем списке.
Смотрим на свойства, вкладка Оборудование
Теперь свойства Последовательного порта.
Видим и запоминаем, что Последовательное подключение Bluetooth мапится на порт COM3. Если есть необходимость, меняем на другой порт. Теперь запускаем Putty и настраиваем программу на работу с определенным на предыдущем шаге COM портом (в примере с COM3).
Итак, вводим имя COM порта, скорость 9600, тип Serial и кликаем Open для открытия терминального окна.
Android:
1. Подключите Bluetooth адаптер к OBD-II разъему вашего автомобиля (о нем и его расположении мы писали в Части 2). Убедитесь, что лампочка на адаптере зажглась.
2. Запустите двигатель автомобиля
3. Зайдите в окружение Bluetooth на Вашем смартфоне: «Настройки» > Bluetooth и запустите поиск Bluetooth устройств, найдите OBD II адаптер, он должен появиться в списке устройств как ‘scantool’,’obdkey’,’plx …’,’cbt’ или что-то похожее. Выберите адаптер. Он предложит произвести спряжение устройств.
4. Произведите сопряжение устройств. Устройство попросит секретный код сопряжения, как правило: 1234 или 0000.
5. Перейдите в приложение OBD Car Doctor на своем смартфоне.
6. В Настройках в пункте BT соединение выбираем имя адаптера с которым ранее произвели сопряжение.
7. В Настройках в разделе Тест устанавливаем галочку в опции Консоль. Возвращаемся на главную страницу, кликаем Подключить и после успешного подключения выбираем пункт Консоль (данная функция доступна начиная с версии OBD Car Doctor Android 2.22).
iOS:
1. Подключите OBD-II Wi-Fi адаптер к OBD-II разъему вашего автомобиля. Запустите двигатель автомобиля и дождитесь зеленого свечения на Wi-Fi адаптере.
2. На своем iPhone устройстве перейдите в Настройки (Settings), выберите подключиться к сети Wi-Fi. После подключения к Wi-Fi, перейдите в расширенные настройки и установите:
- Адрес IP: Статический
- Адрес IP: 192.168.0.11
- Маска подсети: 255.255.255.0
Выберите имя устройства для подключения Wi-Fi. Выйдите из настроек.
3. Перейдите в приложение OBD Car Doctor > Настройки (Settings), где настройте следующее:
- IP Адрес: 192.168.0.10
- Порт: 35000
- Кликните «Сохранить» и «Выйти»
4. Запустите двигатель.
5. Перейдите в приложение OBD Car Doctor на своем смартфоне. В Настройках в разделе Тест устанавливаем галочку в опции Консоль. Возвращаемся на главную страницу, кликаем Подключить и после успешного подключения выбираем пункт Консоль (данная функция доступна начиная с версии OBD Car Doctor iOS 1.3, выход которой ожидается в ближайшее время).
По завершению описанных действий вы готовы вводить команды и получать ответы от диагностической системы автомобиля. Естественно работать с консолью в движении не очень удобно и не безопасно даже для пассажира. Поэтому экспериментировать предлагаем на заведенной, но удобно припаркованной машине.
Выше мы упомянули, что команды подразделяются на 2 типа: команды управления адаптером и собственно OBD-II команды. Обычно команды управления начинаются с последовательности AT, в то время как OBD-II команды состоят только из шестнадцатеричных цифр.
Итак, наша первая команда:
• набираем ATZ и нажимаем Enter (или кнопку Отправить). Если на адаптере есть питание и связь с ним была установлена, мы должны увидеть ответную строку:
ELM 327 v1.3a >
Или что-то похожее, в зависимости от используемого контроллера и версии прошивки адаптера. ATZ — является командой инициализации и выполняет перезагрузку адаптера.
• Следующей командой может быть команда установки протокола, вводим команду ATSP0, в ответ мы должны получить
ATSP0 OK >
Команда ATSP0 не устанавливает непосредственно протокол взаимодействия адаптера с автомобилем, это специальная команда, которая устанавливает автоматический режим определения протокола адаптером. Для непосредственного поиска и установления связи мы должны послать OBD-II команду.
• Отправляем команду 0100 (которая расшифровывается как MODE 01, PID 00), в случае успеха мы должны получить что-то вроде
0100 Searching…
41 00 XX XX XX XX >
Где X может быть любой шестнадцатеричной цифрой.
Здесь обратим внимание на несколько моментов:
• пробелы могут игнорироваться как в командах так и в ответах; наличие или отсутствие пробелов в ответе управляется отдельной командой ATS{0|1}
• в ответе может присутствовать или отсутствовать эхо (т.е. повтор команды, как в приведенном выше примере); наличие или отсутствие пробелов в ответе управляется отдельной командой ATE{0|1}
• сам ответ на команду содержит модифицированное значение команды, а именно (mode+0x40)(PID), т.е. положительный ответ на команду 0100, должен начинаться с 4100.
В случае неудачи ответы могут быть следующими:
0100 SEARCHING...
UNABLE TO CONNECT >
или
0100 SEARCHING...
NO DATA >
…
Подобные ответы означают, что адаптеру не удалось автоматически определить протокол связи с авто.
Вместо автоматического поиска протокола можно явно установить номер протокола, поддерживаются шестнадцатеричные номера от 1 до C.
1 - SAE J1850 PWM
2 - SAE J1850 VPW
3 - ISO 9142-2
4 - ISO 14230-4 KWP (5 baud init)
5 - ISO 14230-4 KWP (fast init)
6 - ISO 15765-4 CAN (11 bit, 500 Kbaud)
7 - ISO 15765-4 CAN (29 bit, 500 Kbaud)
8 - ISO 15765-4 CAN (11 bit, 250 Kbaud)
9 - ISO 15765-4 CAN (29 bit, 250 Kbaud)
A - SAE J1939 CAN (29 bit, 250 Kbaud)
B - USER1 CAN (11 bit, 125 Kbaud)
C - USER2 CAN (11 bit, 50 Kbaud)
Например, для явного установления связи по протоколу ISO 9142-2 набираем команду ATSP3, получаем в ответ ATSP3 OK >
И проверяем результативность командой 0100, опять же в случае успеха ожидаем увидеть
0100 Searching…
01 00 41 00 XX XX XX XX >
Если видим что-то другое, вроде
0100 BUS INIT:
…ERROR
Что значит — связь по данному протоколу не установлена.
Для тестирования и установления протокола связи может использоваться любая поддерживаемая автомобилем OBD-II команда, но рекомендуется использовать именно 0100, поскольку она должна поддерживаться производителем в соответствии со стандартом. Данная команда должна возвращать информацию о поддержке PID c 01 по 20 для MODE 01.
Напомним, что MODE 01 отвечает за чтение динамических параметров автомобиля (скорость, обороты, температуры и т.д.) в реальном времени. Соответственно, прочитав ответ на 0100, который содержит информацию о том, какие из PID c 01 по 20 (шестнадцатеричные) поддерживаются. Для расшифровки мы должны конвертировать шестнадцатеричное представление числа в бинарное, при этом позиция бита (от старшего к младшему) соответствует номеру PID (от 01 до 20).
Например, ответ содержащий 80 00 00 00 = 1000 0000 0000 0000 0000 0000.
Означает поддержку единственного PID, а именно 01.
Сейчас вы можете прочитать ответ вашего автомобиля на команду 0100 и узнать номера всех команд (PID) поддерживаемых в вашем автомобиле. Обратите внимание, что если поддерживается команда 0120, то отправив ее, можно прочитать номера поддерживаемых PID в диапазоне 21 – 40 и т.д., т.е. 0100, 0120, … 01D0, которые отвечают за определение номеров всех поддерживаемых команд в MODE 01.
Чтобы закрепить полученные знания, предлагаем выполнить еще одну простую команду и разобрать результат. Если вы расшифровали ответ команды 0100 и получили, что PID 0C поддерживается, отправим команду 010C (обороты двигателя), ответ должен быть в виде:
01 0C 41 0C 0B B8 >
Для получения значения в оборотах в минуту, необходимо полученный ответ (0B B8 = 3000) разделить на 4, т.е. получаем 750 об/мин.
Список поддерживаемых стандартом команд и формулы преобразования можно найти здесь.
Пока вы экспериментируете с отправкой различных команд, а также получением и расшифровкой значений, мы будем готовить следующую часть(и), в которой затронем вопросы работы с несколькими бортовыми контроллерами, что нужно знать о хедерах команд, чтение и сброс ошибок, для чего используются другие MODE, «почти OBD-II», а также другие темы, которые могут вас заинтересовать.
ссылка на оригинал статьи http://habrahabr.ru/company/pnn/blog/188488/
Добавить комментарий