ISO 15765 4 can протокол

ISO 15765 CAN Является самым современным и высокоскоростным протоколом. Скорость передачи данных составляет до 1 Мбит/c. Протокол разработан для объединения в единую сеть всех электронных узлов и компонентов в автомобиле. Ипользуется в практически во всем современном автотранспорте. Сигналы передаются по контактам 6 и 14 диагностического разъема.
CAN представляет собой асинхронную последовательную шину, использующую в качестве среды передачи витую пару проводов. При скорости передачи 1 Мбит/с длина шины может достигать 30 м. При меньших скоростях ее можно увеличить до километра. Если требуется большая длина, то ставятся мосты или повторители. Теоретически число подсоединяемых к шине устройств не ограничено, практически — до 64-х. Шина мультимастерная, т. е. сразу несколько устройств могут управлять ею.

Техническая реализация

Синхронная шина, с типом доступа Collision Resolution (CR), который в отличие от Collision Detect (CD) сетей (Ethernet — это CD) детерминировано (приоритетно) обеспечивает доступ на передачу сообщения, что особо ценно для промышленных сетей управления. Передача ведётся кадрами. Полезная информация в кадре состоит из идентификатора длиной 11 бит (стандартный формат) или 29 бит (расширенный формат, надмножество предыдущего) и поля данных длиной от 0 до 8 байт. Идентификатор говорит о содержимом пакета и служит для определения приоритета при попытке одновременной передачи несколькими сетевыми узлами.

Арбитраж доступа

При свободной шине любой узел может начинать передачу в любой момент. В случае одновременной передачи кадров двумя и более узлами проходит арбитраж доступа: передавая адрес источника, узел одновременно проверяет состояние шины. Если при передаче рецессивного бита принимается доминантный — считается, что другой узел передаёт сообщение с большим приоритетом и передача откладывается до освобождения шины. Таким образом, в отличие, например, от Ethernet в CAN не происходит непроизводительной потери пропускной способности канала при коллизиях. Цена этого решения — вероятность того, что сообщения с низким приоритетом никогда не будут переданы.

Контроль ошибок

CAN имеет несколько механизмов контроля и предотвращения ошибок:

  • Контроль передачи: при передаче битовые уровни в сети сравниваются с передаваемыми битами
  • Дополняющие биты (bit stuffing): после передачи пяти одинаковых битов подряд автоматически передаётся бит противоположного значения. Таким образом кодируются все поля кадров данных или запроса, кроме разграничителя контрольной суммы, промежутка подтверждения и EOF
  • Контрольная сумма: передатчик вычисляет её и добавляет в передаваемый кадр, приёмник считает контрольную сумму принимаемого кадра в реальном времени (одновременно с передатчиком), сравнивает с суммой в самом кадре и в случае совпадения передаёт доминантный бит в промежутке подтверждения
  • Контроль значений полей при приёме

Разработчики оценивают вероятность невыявления ошибки передачи как 4,7×10-11.
Преимущества

  • Возможность работы в режиме жёсткого реального времени.
  • Простота реализации и минимальные затраты на использование.
  • Высокая устойчивость к помехам.
  • Арбитраж доступа к сети без потерь пропускной способности.
  • Надёжный контроль ошибок передачи и приёма.
  • Широкий диапазон скоростей работы.
  • Большое распространение технологии, наличие широкого ассортимента продуктов от различных поставщиков

Недостатки

  • Максимальная длина сети обратно пропорциональна скорости передачи
  • Большой размер служебных данных в пакете (по отношению к полезным данным)
  • Отсутствие единого общепринятого стандарта на протокол высокого уровня, но это же может быть и достоинством, т.к. предоставляет разработчикам большую свободу

Неполный список автомобилей с шиной CAN
Lada Granta, Largus, Priora (2011—), Kalina (2011—), Samara (2011—)
Audi A3 (2004-2009), A3 (2010—), A4 (2008—), A5, A6 (2004—), Q5, Q7, allroad (2006—), A8 (2003-2009), Audi TT (2006—), А8 (2010—)
Mercedes-Benz кузов 221, 216, 204, 212, 164, 251, 211, 219, 209, 169, 245, 463, 203, 171, 639, 906
BMW-1(E87, 81, 82, 88), BMW-3 (E90, 91, 92, 93), BMW-5 (E60, 61), BMW-6 (E63, 64), BMW-7 (F01, 02), BMW X1 (E84), BMW X5 (E70), BMW X6 (E71), BMW-7 (E65/66), BMW Гран Туризмо, BMW-5 (F10)
Volkswagen Touareg, Passat B6, Passat CC, Golf 5, Golf 6, Jetta (2006—), Golf Plus, Caddy (2004—), Touran, Tiguan, Multivan, Polo (2005-2009), Polo sedan(2010 — ), Scirocco, Crafter; Amarok (2010)
Skoda Octavia A5 (2005-2008), Octavia FL (2009—), Superb (2009—), Fabia (2008—), Roomster, Octavia Tour, Yeti
Opel Astra H, Astra J, Zafira B, Corsa D, Vectra C, Insignia, Antara
Ford Focus, C-MAX, KUGA, S-MAX, MONDEO (2007—), GALAXY (2007—), FIESTA (2009—), FUSION
Infiniti FX35, FX50, EX35, G35X, G37, M35, M45
Mazda 2, 3 (2009—), 6 (2008—)
Porsche Cayenne, Panamera
Mini Cooper (2009—)
Peugeot 207, 308, 407, 4007, Partner ( 2009 — )
Citroen C3, С4, С5, С3 Picasso, С4 Picasso, Berlingo (2009—)
Land Rover Discovery 4, Range Rover (2010 —), Range Rover Sport (2010—); Freelander (2008—)

На машинах Газель бизнес с двигателем Cummins много вопросов по тому как работает двигатель. Для большей взаимосвязи с машинкой хочется знать больше о том что с ней и когда происходит, поэтому я купил бортовой компьютер Multitronics TC 750, на сегодняшний день один из трёх моделей БК которые поддерживают протокол обмена данными J1939. К слову данный БК поддерживает около 70 различных протоколов, больше 200 различных функций… И конечно очень хорошая функция БК это информирование об ошибках и проговаривание как кода, так и расшифровки его, к слову экономия на диагностике. Так же можно подсоединить и 2 парктроника, передний и задний. Много ещё чего там есть…
Вот собственно комплект поставки: бк, провода, шлеф и готовая вилка OBD2…

Это уже в собранном и готовом к установке виде:

Плёночка на экране чуток вид портит конечно
Разъёмы на тыльной стороне БК:

Слева разъём для подключения парктроников, по серёдке собственный шлеф БК и справа mini USB для подключения к компу
…через USB можно копировать или заливать новые прошивки(чем я и занимался около 2 минут), так же корректировать параметры настроек, тоже всё довольно быстро.
Возник только один нюанс при подключении, это подключение резистора в 120 Ом, дабы ЭБУ начал общаться с БК, на приведённой схеме заводского подключения:

через дополнительную плату:

Вот она дополнительная плата которая в итоге оказалась не нужна
…неправильно реализовывалось подключение этого резистора, после списки с техподдержкой производителя, окончательно убедился что поговорка «Доверяй, но проверяй» не потеряла актуальность, на сайте производителя была выложена вот такая схема подключения:
6-14 контакты шины CAN
но так как в колодке OBD2 этот резистор не нужен (будет мешаться при соединении с вилкой), прозвонив шлейф БК обнаружил в нём эти цепи и на освободившейся от дополнительной платы разъёме шлейфа воткнул данный резистор в 13-14 контакты, заизолировал, дабы исключить неприятности:
Вот он разъём шлейфа
Вот так вставлен резистор.
Распиновка разъёма БК, разъём шлефа зеркален к этому
В итоге всё заработало и после подбора параметров «под себя» и под машинку, БК стал радовать!) Единственная проблема оказалась в том что изначально я хотел расположить БК на пластик рулевой колонки между рулём и панелью приборов (там стоит кнопка аварийки)
Вот ориентировочно как-то так вот я грешным делом думал перенести эту кнопку, что бы она не потеряла своей функциональности, но нет, она оказалась в одном корпусе с левым подрулевым переключателем и при попытке разобрать этот переключатель, оттуда норовили посыпаться контактики переключателя аварийки, поэтому на данном этапе пришлось временно перенести БК на панель приборов, но там он по любому не задержится, так как панель вся состоит из изгибов и есть вариант поставить его только на крышку среднего бардачка, ну хрень, согласитесь. Поэтому окончательное фото установки добавлю чуть позже.
Из минусов: неудобный режим показателя расхода топлива! Прежде чем он начнёт нормально показывать данные нужно произвести калибровку бака, расхода, пробега(скорости). Мутно, очень мутно! Предыдущий мой БК Multitrinics SE-50 установленный на инжекторной классике никаких предварительных «махинаций» не предполагал и после подключению к питанию и К-линии сразу стал показывать практически точные показатели расхода, фактически корректировал только фактическую скорость из-за установленных 14R колёс.
01.01.2014г. Всем, кто дочитал до конца эту запись! Я крайне НЕ РЕКОМЕНДУЮ этот БК! До сих пор, с начала выпуска данного БК для протокола J1939, производитель не выпустил нормальную прошивку! Та, которая на сегодняшний момент призвана работать с двигателем Камминс, не выдерживает ни какой критики! Производитель отказывается пересматривать свою политику в отношении явно кривой и ущербной прошивки для протокола J1939! Поэтому, КРАЙНЕ НЕ РЕКОМЕНДУЮ покупать модели БК от Мультитроникса для машин с Камминсом, это:

При создании приложения мы столкнулись с множеством выборов, проблем и так далее, с которыми попробуем ознакомить вас в этой статье. Как оказалось с автомобилем можно вести диалог, причем довольно таки продуктивный. Естественно для того чтобы организовать общение с автомобилем необходимо «установить контакт», «задать правильный вопрос» и правильно понять «ответ», полученный от автомобиля. Соответственно статья и будет нацелена на то, чтобы доступным языком объяснить организацию диалога, а также рассказать вам какие ошибки могут встретиться вам на пути и как с ними бороться.

Выбор подключения

Изначально необходимо пояснить что для подключения к авто будет использоваться ELM327 адаптер. ELM327 – это микросхема, которая позволяет преобразовать протоколы, используемые в диагностических шинах автомобилей в протокол RS232, которым мы и будем передавать данные. За счет того что передача данных по протоколу RS232 происходит последовательно возникает первая проблема – скорости передачи данных, которую мы постараемся обойти в одном из следующих пунктов.
Существует несколько вариаций адаптера ELM327, которые классифицируются по способу передачи данных – Bluetooth, WIFI, USB. Исходя из того что целью разработки является мобильное устройство под операционной системой Android можно подобрать две наиболее подходящие версии ELM327, такие как Bluetooth и WIFI. Так как способ получения и обработки данных один, а отличаются они всего лишь вариантами подключения к адаптеру, то можно выбрать всего один, организовать при помощи него диалог, а после добавить остальные варианты подключения.

ELM327 1.5 vs ELM327 2.1

Одной из первых проблем, с которыми можно столкнуться стала проблема выбора непосредственно адаптера, в нашем случае Bluetooth. Оказывается если вам необходимо поддерживать все (по крайней мере большинство) автомобилей необходимо выбирать версию v1.5 вместо v2.1, что на самом то деле необходимо несколько раз уточнить при покупке адаптера, потому как продавцы пытаются выдать версию адаптера не за ту, которая есть на самом деле, т.к. они особо ничем не отличаются. На деле же в версии v2.1 отсутствует поддержка протоколов J1850 PWM и J1850 VPW, что говорит о том, что у вас не получится подключиться к автомобилям, которые используют эти протоколы.

Подключение

Подключение к адаптеру происходит в несколько этапов:

  • Подключение к адаптеру (Bluetooth, WIFI)
  • Отправка инициализационных команд (инициализационной строки)

Если с организацией подключения все понятно. Принцип работы такой же как и у любого Bluetooth/WIFI чата. То для того чтоб понять как отправлять инициализационную строку, необходимо изучить какие команды существуют, а также какие функции они выполняют.
AT Z
Сброс настроек адаптера до заводского состояния.
AT L1-0
Включить/Отключить символы перевода строки.
AT E1-0
Echo on – off
AT H1-0
Headers on – off
AT AT0-1-2
Adaptive Timing Off — adaptive Timing Auto1 — adaptive Timing Auto2
AT ST FF
Установить таймаут на максимум.
AT D
Сброс настроек в исходное, настроенное пользователем состояние.
AT DP
Сканер способен самостоятельно определять протокол автомобиля, к которому он подключен.
AT IB10
Команда устанавливает скорость обмена данных для ISO 9141-2 и
ISO 14230-4 10400
AT IB96
Команда устанавливает скорость обмена данных для ISO 9141-2 и
ISO 14230-4 9600 для протоколов 3,4,5.
AT SP h
Команда выбора протокола h, где h:
0 – Automatic;
1 — SAE J1850 PWM (41.6 Kbaud);
2 — SAE J1850 VPW (10.4 Kbaud);
3 — ISO 9141-2 (5 baud init, 10.4 Kbaud);
4 — ISO 14230-4 KWP (5 baud init, 10.4 Kbaud);
5 — ISO 14230-4 KWP (fast init, 10.4 Kbaud);
6 — ISO 15765-4 CAN (11 bit ID, 500 Kbaud);
7 — ISO 15765-4 CAN (29 bit ID, 500 Kbaud);
8 — ISO 15765-4 CAN (11 bit ID, 250 Kbaud);
9 — ISO 15765-4 CAN (29 bit ID, 250 Kbaud);
AT SP Ah
Команда устанавливает по умолчанию протокол h, если подключение по протоколу h не удалось, тогда адаптер начинает автоматический подбор протокола.
Исходя из описанных выше команд, формируем инициализационную строку.
initializeCommands = Arrays.asList(«ATZ», «ATL0», «ATE1», «ATH1», «ATAT1», «ATSTFF», «ATDP», «ATSP0»);
Желательно давать возможность пользователю сменять инициализационные команды, потому как для того чтобы подобрать «ключ» к некоторым авто необходимо выбрать более подходящие настройки адаптера. В нашем же случае используются настройки, которые походят для большинства стандартных протоколов.
Так же желательно обратить внимание на команду APSP0, таким образом мы устанавливаем по умолчанию автоматический подбор протокола, это может занять некоторое время.
Соответственно если пользователь знает какой у его авто протокол, то используя возможность смены протокола подключения он может поменять 0 на номер его протокола.

Считывание диагностических данных

Для считывания диагностических данных используются специальные команды PID’s.
PID (Parameter id’s — Бортовые диагностические идентификаторы параметров) – коды, которые используются для запроса показателей определенных датчиков автомобиля.
Основные пиды можно найти в Википедии, там полный набор основных команд, которые должны поддерживать все автомобили. Так же есть наборы команд для определенных марок и типов автомобилей, эти наборы предоставляются за отдельную плату. В нашем случае приложение заточено на базовую диагностику автомобилей соответственно мы используем базовый набор команд.

Также есть возможность получать текущие данные от автомобиля при этом команда получения данных от авто будет иметь вначале 01, указывая на то что мы хотим получить real data. Если же мы хотим получить сохраненные данные автомобиля, то вначале команды необходимо указать 02. Например, команда для получения текущей скорости автомобиля – 010D, а для получения сохраненной скорости – 020D.
Если внимательно посмотреть на то количество команд, которое предоставляется открытыми ресурсами, то можно как раз и заметить ту проблему, о которой я писал в самом начале, а именно проблема скорости ответа адаптера. Так как отправка и получение команд идет последовательно, то для того чтобы получить показания датчика на текущий момент времени необходимо дождаться ответа на все предыдущие команды. Соответственно если запрашивать на получение все команды, то большая вероятность того что обновление реальных данных будет происходить очень медленно. Но и эту проблему можно решить, если воспользоваться командами, которые отобразят только те команды, что существуют в автомобиле. Например:
0100 – PIDs supported
0120 – PIDs supported
0140 – PIDs supported
0160 – PIDs supported
0180 – PIDs supported
01A0 – PIDs supported
Я продемонстрирую как определить какие датчики присутствуют в автомобиле при помощи одного из пидов. Например:

  • 0100 \\ запрос
  • BB1E3211 \\ ответ от авто

Переводим ответ от автомобиля в двоичную систему счисления
BB1E3211(16) > 10111011000111100011001000010001(2)
Используя следующую табличку можем определить какие пиды поддерживаются нашим автомобилем, начиная от 01 до 20:
Исходя из получившихся данных можем определить, что наш автомобиль поддерживает следующие пиды:
01, 03, 04, 05, 07, 08, 0C, 0D, 0E, 0F, 13, 14, 17, 1C, 20
Теперь вместо отправки всех 32 команд и ожидания ответа на них, несмотря на то, что некоторые могут отсутствовать, мы будем использовать всего 15 команд. Но и это не предел так называемой оптимизации. Для того чтобы данные обновлялись еще быстрее советую запрашивать только данные о тех датчиках, которые отображаются на экране. Хотя это ограничивает некоторый функционал приложения. Например, запись истории.

Считывание и расшифровка ошибок автомобиля

Ошибки автомобиля тоже могут быть различными и для них тоже существуют отдельные команды. Например:

  • 03 – Для отображения сохраненных кодов ошибок
  • 0A – Для отображения постоянных кодов ошибок.

Так как и с остальными командами ошибки автомобиля приходят в закодированном виде, соответственно, как и в остальных командах их нужно раскодировать чтоб получить необходимую информацию. Приведу пример работы декодирования ошибки. Код:
private final static char dtcLetters = {‘P’, ‘C’, ‘B’, ‘U’}; private final static char hexArray = «0123456789ABCDEF».toCharArray(); private void performCalculations(String fault) { final String result = fault; String workingData = «»; int startIndex = 0; troubleCodesArray.clear(); try { if (result.contains(«43»)) { workingData = result.replaceAll(«^43|43|», «»); } else if (result.contains(«47»)) { workingData = result.replaceAll(«^47|47|», «»); } for(int begin=startIndex; begin < workingData.length(); begin += 4) { String dtc = «»; byte b1 = Utility.hexStringToByteArray(workingData.charAt(begin)); int ch1 = ((b1 & 0xC0) >> 6); int ch2 = ((b1 & 0x30) >> 4); dtc += dtcLetters; dtc += hexArray; dtc += workingData.substring(begin + 1, begin + 4); if (dtc.equals(«P0000»)) { continue; } troubleCodesArray.add(dtc); } } catch (Exception e) { Log.e(TAG, «Error: » + e.getMessage()); } }
А теперь пояснение.
Исходя из полученного ответа мы можем получить код ошибки, для этого декодируем полученное сообщение используя следующие таблички.
Первый символ:
Второй символ:
3, 4, 5 символы формируются по этой таблице:
Исходя из этого можем попробовать разобрать следующий ответ 0001000000111110
Код ошибки: P103E

Эпилог

На данном этапе мы разобрались в том, каким образом организовать диалог с адаптером, посылать ему команды, получать и расшифровывать его ответы. Это большая часть работы, если считать то, сколько времени уходит на изучение материала, но в то же время довольно таки интересная. За пределами этой статьи осталось множество проблем связанных с визуальным интерфейсом, а также множество дополнительных функций, таких как добавление новых пидов из файла, стандартный и расширенный способ подключения к адаптеру и построения графиков.
Матвиенко Александр, Хоссейн Фахр.