- Архитектура приложения python для взаимодействия с obd-ii через can
- Диагностический сканер launch creader cr319 obd-ii: самостоятельно проверяем и сбрасываем ошибки автомобиля / автомобили и другие средства передвижения и аксессуары / ixbt live
- Диагностическое устройство obd ii – viecar 2.0
- Инструкция elm327
- Тестирование нашего примера приложения с помощью симулятора obd-ii
- Упрощение с помощью расширения torizon с кодом visual studio
Архитектура приложения python для взаимодействия с obd-ii через can
Чтобы создать наше простое приложение на Python, мы будем использовать библиотеку Python CAN для управления сетью CAN. Вы также можете использовать API сокетов в Python для связи CAN, поскольку Python поддерживает CAN с версии 3.3, но на данный момент это более низкоуровневый подход.
Чтобы проиллюстрировать запрос OBD-II для PID 0x0C, как определено в стандарте для частоты вращения двигателя (RPM), мы представляем код ниже. Это будет:
- Создайте интерфейс CAN-шины
- Создайте ссылку на сообщение CAN для запроса
- Запрос сообщения CAN — это кадр CAN с DLC размером 8 байтов.
- Сообщение будет построено в следующем формате для стандарта SAE:
- Байт 0 — количество дополнительных байтов: 2
- Байт 1 — 1, чтобы показать текущие данные
- Байт 2 — запрашиваемый PID-код
- Байты с 3 по 7: они не используются, но ISO 15765-2 предлагает установить для них CCh
- Отправьте запрос в главный ЭБУ с идентификатором 0x7DF
- Получите сообщение и сравните его с ожидаемым идентификатором ответа 0x7E8
- Если мы получим сообщение от ожидаемого идентификатора ответа, он напечатает результат в шестнадцатеричном формате.
Чтобы выполнить наше приложение CAN, мы должны сначала настроить и включить сеть CAN в модуле. Интерфейс CAN1, физический, уже включен в его дереве устройств и обозначен как can0 на стороне Linux. Процесс настройки и включения может быть выполнен с помощью вызовов os.system () в Python, в которых мы настраиваем сеть CAN с битрейтом 500k.
# In the extension we shall bring up the interfaces directly within our Python app
os.system(“ip link set can0 type can bitrate 500000”)
time.sleep(1)
os.system(“ip link set can0 up”)
time.sleep(1)
# set up a CAN bus
bus = can.interface.Bus(channel=”can0″, bustype=’socketcan’)
# using defaults functional address
obd2_tx_arb_id = 0x7DF
obd2_rx_arb_id = 0x7E8
# CAN Frame for a PID Request of 0x0C (RPM) with SAE Standard
obd_req_data = [2, 1, 0x0C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC]
# Send our OBD-II query in CAN 11-bit format
msg = can.Message(arbitration_id=obd2_tx_arb_id, data=obd_req_data, is_extended_id=False)
bus.send(msg)
message = bus.recv(1.0) # Timeout in seconds.
if message is None:
print(‘Timeout occurred, no message.’)
sys.exit(1)
# Check if received the expected response message
if message.arbitration_id == obd2_rx_arb_id:
print(“Message received from OBD-II request!”)
hex_data = “”
for c in message.data:
hex_data = “X ” % c
print(“Response ID: X | Response Data: %s” % (message.arbitration_id, hex_data))
import time import os import sys import can # In the extension we shall bring up the interfaces directly within our Python app os.system(“ip link set can0 type can bitrate 500000”) time.sleep(1) os.system(“ip link set can0 up”) time.sleep(1) # set up a CAN bus bus=can.interface.Bus(channel=“can0”,bustype=‘socketcan’) # using defaults functional address obd2_tx_arb_id=0x7DF obd2_rx_arb_id=0x7E8 # CAN Frame for a PID Request of 0x0C (RPM) with SAE Standard obd_req_data=[2, 1, 0x0C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC] # Send our OBD-II query in CAN 11-bit format msg=can.Message(arbitration_id=obd2_tx_arb_id,data=obd_req_data,is_extended_id=False) bus.send(msg) message=bus.recv(1.0)# Timeout in seconds. ifmessage isNone: print(‘Timeout occurred, no message.’) sys.exit(1) # Check if received the expected response message ifmessage.arbitration_id==obd2_rx_arb_id: print(“Message received from OBD-II request!”) hex_data=“” forcinmessage.data: hex_data =“X “%c print(“Response ID: X | Response Data: %s”%(message.arbitration_id,hex_data)) |
Вы можете загрузить этот код в свою цель, скопировав и вставив его с помощью редактора nano, который мы установили в наш образ контейнера, как показано в его Dockerfile. Другой способ — привязать этот контейнер к /home/torizon, чтобы упростить отправку кода через scp.
Имея приложение под рукой, давайте попробуем его.
Диагностический сканер launch creader cr319 obd-ii: самостоятельно проверяем и сбрасываем ошибки автомобиля / автомобили и другие средства передвижения и аксессуары / ixbt live
Небольшой обзор диагностического сканера OBD-II начального уровня для автомобиля. При невысокой стоимости он позволяет проводить оценки состояния агрегатов двигателя, осуществлять проверку кодов неисправности двигателя, выполнять чтение и сброс ошибок. В сканере Launch Creader CR319 уже зашит справочник кодов ошибок, чтобы на месте разобраться с причиной неисправности. Также есть возможность проверки ID и серийных номеров автомобиля и его агрегатов.
Диагностический сканер Launch Creader CR319
Итак, сегодня речь пойдет про весьма полезный автогаджет — диагностический сканер Launch Creader CR319, который пригодится практически любому автомобилисту. Я заказывал в официальном магазине LAUNCH Store, из наличия на складе в Москве, доставили буквально за пару дней.
Не так давно речь шла про выбор качественного видеорегистратора в автомобиль. А сегодня рассмотрим один из доступных диагностических сканеров.
Характеристики
Бренд: Launch
Модель: Creader CR319
Тип: Диагностический сканер
Протоколы: OBD-II
Экран: 1,77 «TFT, 160*128 точек
Диапазон напряжения: 9-18
Размеры: 118 мм х 68 мм х 22,3 мм
Масса: около 200 г
Представляет собой сканер малогабаритный карманный вариант, со встроенным дисплеем. Такой всегда может оказаться под рукой. То есть можно провести диагностику не только своему автомобилю, но и соседу по гаражу, друзьями и т.п. Пользоваться легко, на панели всего 2 кнопки перемещения (вверх-вниз) и 2 кнопки действий (подтверждение действия „ОК“ и отмена-возврат).
Конечно, есть же популярный универсальный OBD2-сканер ELM327, скажете вы. Что ж… Я пользовался таким, не всегда это удобно. Иногда достаточно иметь вот такой компактный карманный сканер с дисплеем, который позволяет проводить диагностику без смартфона.
Диагностический сканер Launch Creader CR319 поддерживает чтение стандартных протоколов OBD2 и работает с большинством современных моделей американских, европейских, японских и корейских автомобилей.
Если сравнивать с продвинутой версией Launch X431 CRP129X, который представляет собой гибрид планшета и сканера, то модель Launch Creader CR319 является простой, но, тем не менее, функциональной.
Поддерживается работа следующих OBD2-протоколов автомобиля:
1. SAE J1850 PWM (41,6 кбод)
2. SAE J1850 VPW (10,4 кбод)
3. ISO9141-2(5 бод инициализации, 10,4 кбод)
4. ISO14230-4 KWP(5 бод инициализации, 10,4 кбод)
5. ISO14230-4 KWP (быстрая инициализация, 10,4 кбод)
6. ISO15765-4 CAN(11 бит ID,500 кбод)
7. ISO15765-4 CAN(29 бит ID,500 кбод)
8. ISO15765-4 CAN(11 бит ID,250 кбод)
9. ISO15765-4 CAN(29 бит ID,250 кбод)
В комплекте есть подробная инструкция. Перед использованием рекомендую изучить базовые моменты.
Что касается размеров устройства — то это примерно 12 х 7 х 2 см, примерно как небольшой смартфон, чуть потолще. И сразу с несъемным кабелем передачи данных.
Предусмотрено несколько основных режимов работы: запрос диагностических данных агрегатов, запрос информации агрегатов, запрос диагностических кодов неисправностей, очистка/сброс данных диагностики. Отдельно представлены тесты датчиков, есть возможность мониторинга работы агрегатов в движении (например, датчика кислорода).
Компоновка типовая — сверху дисплей (не особо большой, 1,77» цветной), по центру клавишный блок на 4 кнопки. Встроенного аккумулятора нет, своей памяти для хранения результатов нет.
Кабель достаточно длинный, примерно 1,2 метра. На конце расположен OBD-2 разъем.
Для ряда автомобилей может потребоваться переходник, правда для тех автомобилей, с которыми я тестировал ничего лишнего не потребовалось — все работает «из коробки».
Для сравнения прикладываю свой старый диагностический сканер KW680.
Покупал KW680-й достаточно давно и значительно дороже, а вот функционал примерно одинаков. И это при втрое меньшей стоимости модели Creader CR319.
Корпус имеет насечки, чтобы не скользил в руке или перчатке.
На обороте присутствует информация о модели.
Перед использованием попробую разобрать и проверить внутренности. Для вскрытия корпуса я использую отличный набор отверток NANCH.
Внутри собрана схема с буферами-повторителями, преобразователем питания и контроллером.
В качестве «мозгов» использован достаточно мощный ARM-процессор STM32f103c8t6 (аналог) на базе Cortex-M3.
Собираем обратно, пробуем подключить к автомобилю.
Конкретное место расположение диагностического разъема зависит от конкретной модели автомобиля. Обычно это в районе рулевой колонки, внизу, хотя и бывают исключения. Не забывайте, что входное питание сканера лежит в диапазоне от 9 до 18В, то есть можно использовать в том числе и на заведенном автомобиле, а вот грузовые автомобили с бортсетью 24В — мимо.
Включается сканер на английском языке, на фотографии видно стартовое меню с выбором основных функций и переходом в настройки и справочный раздел.
Сканер весьма неплох, и даже имеет встроенный русский язык. Сразу переключаем на русский в соответствующем меню.
Также доступны настройки выбора системы измерения, доступна информация об автомобиле и агрегатах.
Если запустить раздел диагностики, то можно проверить как ЭБУ целиком, так и опросить отдельные агрегаты. Полученные коды ошибок можно «пробить» средствами самого сканера, так и просто в интернете. В случае, если удается вычислить конкретный неисправный узел (например, кислородный датчик), то после замены можно провести сброс всех ошибок.
Таким образом, я прилично сэкономил на поездке к автоэлектрику, все «чек» сброшен. Теперь есть возможность сбрасывать ошибки и проверять конкретный источник неисправности по коду. Учитывая его стоимость — он окупился с первого раза. А из-за компактных габаритов сканер можно всегда иметь при себе (в автомобиле), чтобы использовать при необходимости. Отмечу, что модель Launch Creader CR319 работает со стандартными ЭБУ бензиновых и дизельных двигателей, правда речь идет только про 12V (сканер не работает для грузовых а/м и не поддерживает борт-сеть 24V). В остальном весьма полезно.
Диагностическое устройство obd ii – viecar 2.0
Всем Доброго Времени Суток!
Прошу ни судите меня строго и особо ни ругать сильно, так как это мое первое сравнение. В дальнейших своих сравнениях(обзорах), приму всю Вашу критику во внимание.
И так начнем, хотел бы Вам коротко рассказать об устройстве Viecar 2.0 (диагностическое устройство автомобиля).
Выбор пал на это устройство, в связи с тем, что все уже видели обзоры про elm327 с bluetooth, wifi и usb. Но про данное устройство я обзора не нашел. И в данном обзоре я буду сравнивать ELM327 mini и Viecar 2.0.
Сделал заказ данного устройства, оплатив, я получил его на почте уже на руки спустя порядка 3-х недель, написав нашему «уважаемому китайцу», что от этого заказа будут зависеть мой дальнейшие закупки у него 🙂
Как и видно с картинок:
1) Рабочие характеристики:
— протокол беспроводной передачи данных — Bluetooth 2.0
— Поддерживаемые ОС: «Винда» и «Андрюха»
— Рабочее напряжение: 9-16 В
— Рабочий ток: 25мА
— Рабочая температура: от — 40 до 85 градусов по Цельсию
— Рабочая влажность: менее 60%
— Размеры: 40мм*26мм*25мм
— Поддерживаемые автомобили: автомобили протокола OBD II
2) Рабочие протоколы:
— ISO 9141-2(5 baud init,10.4Kbaud);
— ISO 14230-4 KWP(5 baud init,10.4 Kbaud);
— ISO 14230-4 KWP(fast init,10.4 Kbaud);
— ISO 15765-4 CAN(11bit ID,500 Kbaud);
— ISO 15765-4 CAN(29bit ID,500 Kbaud);
— ISO 15765-4 CAN(11bit ID,250 Kbaud);
— ISO 15765-4 CAN(29bit ID,250 Kbaud);
Подключив его к автомобилю (для тестирования данного устройства, использовался автомобиль Chevrolet Lacetti), ничего необычного не заметил, устройство определяется и с ним устанавливается связь, как и на известном ELM327 mini. Забыл упомянуть, что устройство приходит в пластиковом боксе, в комплекте нет никаких дисков с программным обеспечением, но зато производители, создали к нему родную программу, которую можно бесплатно скачать с Google Play: Viecar. Также устройство отлично взаимодействует и с другими известными программами рассчитанные для диагностических устройств под OBD.
Программой созданной Viecar не пользовался, так как поддерживается очень малое количество автомобилей (в основном, тем, что продаются сейчас в автосалонах), да и при использовании нужна регистрация. В качестве тестирования я использовал известную программу — Torque Pro (взятую с сайта — 4pda.ru). С данной программой устройство все также видит и читает, как и с ELM327 mini, Но есть некоторые отличия:
— программа быстрее считывает все ошибки Check Engine c Viecar 2.0, чем ELM327 mini (Viecar 2.0 порядка 8-10 секунд, ELM327 mini порядка 25-30 секунд, в зависимости от наличия ошибок);
— также очищение ошибок на Viecar 2.0 быстрее, чем на ELM327 mini
— особо заметно быстрее фиксируется изменения по оборотам, которые Вы можете видеть в основном интерфейсе программы Torque Pro (все кто пользовался ELM327 mini, замечали, что ELM327 чуть с запозданием показывает обороты, на Viecar, эти запоздания особо не заметны).
Забыл упомянуть, что данным устройством считывал ошибки на наших тазах (Lada Granta и Kalina 2), отлично всё считывается и удаляются ошибки, без всяких там проблем.
Вывод: При использовании данного диагностического устройства, никаких существенных изменений не выявлено. Единственное он считывает некоторые параметры авто быстрее, чем его «старый» предшественник ELM327 mini (все выводы мною сделаны согласно используемого мною авто — Chevrolet Lacetti 1.4). Также могу отметить, что устройство приходит в пластиковом прозрачном корпусе, есть 3 варианта расцветок: черный, белый и синий. Вообщем если у Вас еще нет диагностического устройства, то берите его, так разница в ценах особа не велика, в районе 70-75 центов, а если имеется ELM327 mini, то особого смысла в смене устройства не вижу.
Инструкция elm327
Итак у нас есть адаптер ELM327Bluetoothверсии 1.5, телефон на базе Android с установленной программой InCarDoc free, Автомобиль с разъемом OBD-II. Теперь можно приступить непосредственно к диагностике:
- При выключенном зажигании (обязательно) вставить адаптер ELM327 в разъём OBD-II, при этом он подаст признаки жизни (загорится светодиодный индикатор) ;
- Включить Bluetooth на телефоне и найти устройство под названием OBDII (название может отличаться), затем при сопряжении устройств потребуется ввести пароль: как правило это 1234 или 0000.
- Если все получилось тогда переходим в приложение InCarDoc free и нажимаем зелененькую кнопку “Подключить” (фото слева). Если всё выполнили правильно, то неактивные разделы меню станут активными (фото справа).
4. Как только Вы успешно подключились к автомобилю его следует завести.5. Диагностика автомобиля. Следуйте инструкции на картинке ниже. Что бы продиагностировать автомобиль перейдите во вкладку “Диагностика”, после нескольких секунд на экране появиться список ошибок которые есть в Вашем автомобиле.
6. Эта программа имеет функции вывода динамических параметров на экран телефона в режиме реального времени. Для примера я вывел на экран Обороты двигателя на холостом ходу (можно наблюдать как они у меня плавают) и температуру охлаждающей жидкости (автомобиль только прогревался). В этой программе достаточно широкий выбор вывода динамических параметров, поэтому я использую именно её.
7. Что бы закончить работу со сканером ELM327 просто нажмите кнопку “Отключить” в программе InCarDoc free. Заглушите двигатель автомобиля и извлеките сам сканер из диагностического разъёма OBD-II.
Тестирование нашего примера приложения с помощью симулятора obd-ii
У нас есть два способа проверить приложение CAN OBD-II:
- Подключаем наше устройство к разъему OBD-II на транспортном средстве и начинаем общаться с реальным транспортным средством.
- Использование другого устройства в качестве «ЭБУ» и ответа на запросы OBD-II по CAN.
Вариант 2 жизнеспособен, в противном случае потребовалось бы хорошее расширение мощности, чтобы мы могли попробовать его в машине автора этого обзора.
Сохраняя тему «Python», существует также проект Python виртуального ЭБУ для ответа на запросы OBD-II, называемый OBDSimulator. Мы использовали его на Colibri iMX6 с платой-носителем Viola, поэтому он будет вести себя как ЭБУ, отвечающий на наш Verdin iMX8MM по сети CAN между ними.
Использование несущей платы Viola было более сложной задачей при сборке установки с внешним трансивером CAN. Более простой способ — использовать оценочную плату Colibri для семейства Colibri или даже плату Ixora Carrier для семейства Apalis, поскольку эти несущие платы уже поставляются со встроенными трансиверами CAN, что делает их идеальными в качестве реализации эталонного дизайна. .
Схема, использованная для этого теста, показана на Рисунке 12. Для несущей платы Viola мы использовали приемопередатчик CAN SN65HVD230, так как iMX6 уже имеет контроллеры CAN. Он также использует резисторы 120 Ом на каждом конце «простой» сети CAN между ними.
С сервером OBDSimulator, работающим на Colibri iMX6 (как подробно описано в репозитории GitHub), мы выполнили следующие запросы на Verdin iMX8MM:
- Запросите текущие данные (режим 1) скорости двигателя (также известные как RPM, PID 0x0C):
Мы используем CAN в 11-битном формате, и после заданного запроса OBD-II ответ будет в следующем формате:
- Байт 0 — количество дополнительных байтов
- Байт 1 — 41h = отображение текущих данных
- Байт 2 — PID-код
- Байт 3 и выше — содержимое ответа на запрос.
В таблице OBD-II PID в Википедии информация о частоте вращения двигателя получается из содержимого запроса по следующей формуле:
Переменная A является третьим байтом в ответе, а переменная B — четвертым байтом (см. Ответ «Hex:» нашей команды выше). В OBDSimulator частота вращения двигателя составляет 514 об/мин. Давайте проверим, правда ли это?
((256 * 8) 8)/4 = 514
Это также показывает еще один ценный ресурс: обратите внимание на подробное описание каждого PID OBD-II, чтобы декодировать запрошенную информацию!
Мы можем изменить код, чтобы запросить другие PID OBD-II. Измените значение obd_req_data, чтобы теперь он запрашивал PID 0x0D (скорость автомобиля в км/ч) с текущими данными (режим 1):
Выполнение кода теперь даст нам вывод для запроса OBD-II PID 0x0D:
Если после повторного выполнения кода вы получаете сообщение «RTNETLINK отвечает: устройство или ресурс занят», это означает, что сетевой интерфейс уже настроен и работает.
В таблице OBD-II PID в Википедии информация о скорости транспортного средства получается как прямой результат третьего байта ответа, который является ответом на наш запрос. В OBDSimulator установлена скорость автомобиля 26 км / ч. Давайте проверим, правда ли это?
1A в шестнадцатеричном формате — 26 в десятичном. Так что, это!
Упрощение с помощью расширения torizon с кодом visual studio
Некоторые из вас могут быть не слишком знакомы с Docker и контейнерами. Это не проблема для работы с Torizon, знаете почему? Toradex также предоставляет вам расширение Torizon, доступное как для Visual Studio, так и для Visual Studio Code. С помощью расширения Torizon вы сможете быстро разрабатывать и загружать приложения в модуль с TorizonCore.
У использования нашего расширения Torizon для Visual Studio Code много преимуществ, не говоря уже о поддержке разработки приложений на следующих языках программирования:
Расширение Torizon позволяет развертывать и отлаживать ваше приложение в целевом объекте по сети всего за несколько щелчков мышью, имея также возможность управлять и отслеживать ваши устройства и контейнерные приложения с ними.
В этом конкретном примере мы покажем вам, как вы можете легко настроить приложение Python с помощью расширения Torizon для кода Visual Studio и запустить его на Verdin iMX8MM с установленным TorizonCore 5.
Давайте выполним следующие простые шаги для настройки:
- Загрузите и установите Visual Studio Code и Torizon Extension в соответствии с инструкциями.
- Имейте в виду, что вы должны настроить среду сборки для контейнеров Torizon, как мы объяснили выше.
- Создайте новый проект Torizon / Python в коде Visual Studio
После выполнения этой первоначальной настройки ваша среда готова для разработки приложения Python для Torizon. Следующие шаги обычно включают определение необходимых параметров, дополнительных пакетов и самого кода.
Вы можете видеть, что в коде Visual Studio в левой части экрана есть панель, содержащая значки каждого ресурса редактора. Одна из них — иконка Torizon. Щелкните по нему и настройте следующие параметры, наблюдая, что в каждом элементе появится значок типа « » или символ карандаша справа, который вы должны щелкнуть, чтобы добавить или отредактировать этот конкретный элемент:
См. Обзор этой части на рисунке 14.
По сути, это те изменения, которые мы внесли в Dockerfile вместе с командами «docker run», которые мы выполнили вручную выше. Но теперь Torizon Extension позаботится о всех формальностях за нас.
Теперь перейдите в меню «Проводник» в коде Visual Studio, затем откройте файл «main.py» вашего проекта. Скопируйте и вставьте тот же код, который мы использовали в примере командной строки выше.
Чтобы загрузить этот код на свою плату, где расширение Torizon уже запросило свои учетные данные (например, имя хоста / IP, пользователь и пароль), вы можете просто нажать F5 на клавиатуре. Затем утилита начнет создавать образ контейнера, загрузит его в устройство и начнет выполнение в режиме отладки, процесс, который вы можете наблюдать в разделе «Вывод» кода Visual Studio.
С помощью расширения Torizon и кода Visual Studio вы также можете добавлять точки останова в свое приложение для отслеживания частей процесса выполнения программы. На рис. 15 показан пример выполнения приведенной выше программы с точками останова.