Работа с CAN-шиной
Недавно мы столкнулись с интересной ситуацией, когда клиент недоумевал и даже, я бы сказал, возмущался тем, как долго мы подключали CAN-шину на его автомобиле.

В большинстве случаев эти задачи не вызывают особых сложностей, но бывают кейсы, где топливо в CAN-шине, например, не доступно или отсутствует в стандартных топливных параметрах, и поэтому приходится действовать нестандартно, чтобы дать клиенту то, что он хочет.

Именно один такой случай мы описали в этом кейсе.

Ну, а в данной статье мы решили подробно и еще раз, можно сказать, от "А" до "Я" понятным языком с рисунками и примерами рассказать, что такое CAN-шина, что такое параметры CAN-шины, как мы их считываем, как мы их настраиваем, какие есть нюансы и т.д.

Статья достаточно длинная, но основательная.

Поэтому, если Вам интересна эта тема или Вы хотели окончательно в ней разобраться и понять, что такое "CAN-шина", запасайтесь чаем - и погнали.
Что такое CAN-шина и как она работает?

CAN-шина - это цифровая коммуникационная сеть, которая используется на всех современных транспортных средствах: тягачах, автобусах, легковом транспорте и различной спецтехнике. Аббревиатура CAN расшифровывается как "Controller Area Network", что в переводе означает "локальная сеть контроллеров".

Главная цель использования сети контроллеров - это сбор, анализ, контроль полученных данных со всех устройств и датчиков, установленных на автомобиле.

Шина CAN является сетью широковещательного типа. Это значит, что все узлы автомобиля могут "слышать" все передачи, но при этом каждый узел реагирует только на нужные сообщения, которые предназначены только ему. Под "узлами" мы подразумеваем различные электронные блоки автомобиля: ЭБУ, датчики, трансмиссия, блоки комфорта, безопасности и многое другое.
Шина CAN имеет две витые пары проводов: CAN L (Low) и CAN H (High), по которым и передается сигнал посредством приемопередатчиков (трансиверов). Трансиверы способны усиливаь сигнал от управляющих устройств сети, а также регулировать скорость передачи данных и выполнять функцию защиты от замыканий.

Использование двух проводов CAN H и CAN L в виде витой пары обусловлено необходимостью повышенной помехозащищенностью проходящего сигнала. Ведь от качества связи напрямую зависит безопасность движения автомобиля.

По 1-му и 2-му проводу передается одинаковый сигнал, но с некоторым отличием: 2-й сигнал всегда инвертирован по отношению к 1-му. Это значит, что если витая пара CAN-шины попадает в зону действия электромагнитных помех, то сигнал изменит свою форму одинаково как на 1-ом проводе, так и на 2-ом. В итоге, разница между напряжениями на этих проводах останется прежней.

Приведем пример: на рисунке показана разница 2 Вольта до помехи, в момент и после:

Так как в витой паре провода находятся очень близко друг к другу, то помехи будут влиять на каждый из проводов одинаково. Приемник, который получит этот сигнал, анализирует именно разницу напряжения между CAN H и CAN L. Таким образом, изменение напряжения из-за помехи на витой паре не вызовет потерю информации, т.к. разница в напряжении между CAN H и CAN L, в момент искажения сигнала, останется прежней - 2 Вольта.

Сам протокол CAN отвечает только за передачу пакетов от узла А к узлу Б, используя общую среду передачи данных - проводную шину CAN. Для того, чтобы определить поведение приемопередатчиков при запуске, распределить идентификаторы сообщений между узлами, расшифровать содержимое кадров и произвести необходимые проверки, требуется протокол более высокого уровня.
Протокол верхнего уровня J1939 и его стандарт FMS

Существует множество протоколов более высокого уровня для шины CAN. В этой статье будет рассмотрен один из самых популярных протоколов - J1939. Этот протокол широко используется ведущими производителями большегрузных автомобилей: Volvo, Renault, DAF, Scania, Mercedes, Iveco, MAN и другимие маркамии. На данный момент его можно встретить и на сельскохозяйственной технике, автобусах, электробусах и т.д.

Протокол J1939 включает в себя много стандартов. Один из них, широко используемый производителями грузовых автомобилей - FMS Standard, или Fleet Management System Standard. Что в переводе означает "Стандарт системы управления автопарком". Крупнейшие европейские производители грузовых автомобилей (MAN, DAF, Scania, Volvo, Iveco, Renault) совместно разработали данный стандарт, чтобы предоставить доступ к CAN-шине автомобилей по единому принципу. Это позволяет разработчикам приложений для телематики создавать свои программные комплексы независимо от марки и модели автомобиля.
FMS - шлюз

Чтобы считывать кадры сообщений из CAN-шины в стандарте FMS, необходимо наличие у автомобиля FMS-шлюза - это интерфейс, который преобразует информацию из внутренней сети автомобиля в стандарт FMS, описанный документацией FMS Standard. Если в автопарке используются грузовики разных торговых марок (Volvo, MAN, Scania и другие), то установка FMS-шлюза в каждый автомобиль позволит легко и просто агрегировать информацию от всех грузовиков в один программный комплекс независимо от марки и модели автомобиля.

FMS-шлюз позволяет считать всю необходимую для телематики информацию: пробег, расход топлива, обороты, температура двигателяи/воздуха, уровень топлива и многое другое.

Обычно FMS-шлюз доступен как отдельная опция в автомобиле, которой не всегда оснащаются грузовики. Часто необходима доустановка шлюза на официальных сервисах.
Из чего состоит сообщение CAN

Все сообщения в CAN-шине передаются в виде кадров (фреймов). Упрощенный вариант кадра представлен на рисунке:

Кадр содержит в себе следующие основные части:

  • Поле арбитража (приоритета), которое определяет очередность передачи сообщения в случае, если в шине за передачу данных "борются" несколько узлов. При помощи этого поля два и более CAN-контроллера смогут "договориться" о том, кто будет использовать шину первым.

  • Идентификатор сообщения (CAN ID) - предназначен для определения содержимого в кадре сообщения. К примеру, нам необходимо сообщение с полным пробегом автомобиля. Для этого необходимо знать идентификатор кадра, в котором располагается информация о пробеге. Зная CAN ID, мы можем легко найти данные всех штатных датчиков, которые установлены на транспортном средстве.

  • Поле данных - содержит от 0 до 8 байт. Здесь и располагаются необходимые нам полезные данные: пробег, расход, температура охлаждающей жидкости, температура двигателя, обороты двигателя, моточасы двигателя, педаль акселератора, педаль тормоза и многое другое.

  • Поле для обнаружения ошибок. Его еще называют полем CRC. CAN-контроллеры используют данное поле для подсчета контрольной суммы и детектирования возможных ошибок в шине CAN.

  • Слот распознавания (слот ACK) - это поле необходимо, если приемопередатчик хочет проверить, доставлено ли сообщение адресату. Проверяется наличие бита распознавания и, если таковой не обнаружится, то приемопередатчик посылает сообщение повторно.
Как считываются данные CAN и передаются в систему Wialon

Для того, чтобы считать необходимые данные из CAN-шины автомобиля, требуется подключение специального GPS-устройства с CAN-интерфейсом. Некоторые терминалы имеют сразу 2 или 3 таких интерфейса.

При подключении терминала к общей шине автомобиля, мы добавляем новый узел в общую сеть контроллеров, который выполняет функцию "перехватчика". Тем самым, мы получаем доступ ко всему массиву сообщений и пакетов данных, которые "гуляют" между всеми узлами.

При этом, это никак не сказывается на работе шины в целом, поскольку сопротивление на проводах CAN H и CAN L GPS-устройства - 120 Ом. Такое сопротивление согласования необходимо для исключения ситуации отражения сигнала. Отраженный сигнал в шине может повредить пакеты данных, что может вызвать большое количество ошибок и повторных отправок кадров. Все блоки и CAN-контроллеры автомобилей имеют сопротивление 120 Ом.

Считав необходимые данные из CAN-шины автомобиля, GPS-устройство запоминает их в своей энергонезависимой памяти и, по заданному временному интервалу, передает в систему мониторинга Wialon. В пакет также закладываются координаты местоположения автомобиля и показания любых внешних датчиков подключенных к трекеру. Для передачи данных обычно используется GSM-сеть мобильного оператора.

Расшифровка данных CAN-шины. Практика применения CAN-анализатора

В этом разделей статье мы уделим более подробное внимание нескольким блокам кадра:

  • идентификатор (CAN ID)

  • поле данных
Поскольку именно к ним мы будем обращаться при анализе потока данных в CAN-шине автомобиля.

Начнем работу.
Расшифровка данных в CAN-шине автомобиля Volvo FH 2018 года при помощи анализатора CAN Spy

Наши специалисты будут самостоятельно анализировать поток данных в шине CAN и находить необходимые идентификаторы кадров (CAN ID).

В качестве оборудования для подключения к CAN-шине автомобиля будем использовать трекер производителя Navtelecom Smart версии 2435.

GPS-устройство имеет в наличии необходимый нам CAN-интерфейс для подключения к общей шине автомобиля. Также, что немаловажно, трекер имеет функцию снятия логов с CAN-шины, используя встроенный модуль CAN Spy. Данный модуль позволяет в режиме реального времени получить доступ ко всему массиву данных CAN-шины.

Возможности CAN Spy:

  • определять наличие данных в шине CAN, скорость обмена, тип и номер идентификатора сообщения (CAN ID).

  • производить анализ CAN сообщений как в табличном, так и в графическом виде.

  • записывать и воспроизводить логи CAN-шины автомобиля. Это удобно в случае, когда нет времени на анализ потока данных. Мастер оперативно записывает логи CAN и сразу отпускает автомобиль, чтобы не задерживать работу водителя. Далее логи передаются в отдел развития компании для дешифровки данных.
В процессе настройки CAN мы воспользуемся новым функционалом Navtelecom - Complex Events. Это технология, которая позволяет изменять логику работы устройства под конкретные задачи. Более подробно о Complex Events мы опишем в следующей статье, когда она нам потребуется для расчета суммарного расхода топлива CAN.
Выбор точки подключения CAN

Подключение терминала к CAN-шине производится под блоком предохранителей, который на Volvo FH традиционно располагается в середине торпеды:

FMS-шлюзом рассмотренный нами автомобиль не оборудован, что усложняет получение необходимых данных из CAN-шины автомобиля.

Все процедуры, связанные с чтением данных из CAN-шины, должны обязательно проходить при заведенном двигателе автомобиля, или, как минимум, при включенном зажигании. В противном случае, в конфигураторе Navtelecom, мы можем получить совсем небольшой массив данных. Связано это с тем, что CAN-шина автомобиля при выключенном зажигании уходит в "сон".
Трассировка сообщений CAN

При подключении к CAN-шине через Navtelecom CAN Spy мы увидим во вкладке "Таблица сообщений" следующую информацию:

Трассировка сообщений CAN
Описание столбцов таблицы:

  • ID - идентификатор сообщения в HEX (далее число шестнадцатеричном16-ом формате).

  • DLC - показана длина данных в сообщении (обычно 8 байт).

  • Dx - здесь может располагаться необходимая нам информация в формате HEX (пробег, обороты, расход и т.д.). Нумерация байт начинается с «0» по 7». Всего 8 байт.

  • MS - период передачи CAN сообщения в шине (в миллисекундах).

Программа автоматически определяет скорость CAN-шины. Обычно на Volvo FH она равна 250 кбит/с или 500 кбит/с. Скорость обмена данными, в зависимости от точки подключения, может отличаться даже в рамках одного автомобиля. Также, скорость зависит от марки и модели автомобиля, года выпуска, а иногда и от комплектации.

Во всех случаях мы стараемся не вмешиваться в работу CAN-шины, не отправлять какие либо запросы. Все данные мы ищем в общем, доступном нам потоке. Для этого терминал работает в специальном режиме "прослушивания". Режим говорит сам за себя: оборудование только "слушает" CAN-шину без какого либо управляющего воздействия. Тем самым исключаются какие-либо влияния на штатную систему автомобиля. Главное условие - сопротивление на проводах терминала (CAN H и CAN L) должно быть 120 Ом.

Наша задача - найти в этом потоке данных необходимые параметры для отправки на сервер мониторинга Wialon.
Пример работы с CAN идентификаторами

Для понимания как с этим работать, разберем детально сообщение CAN, прочитанное при помощи Navtelecom CAN Spy на автомобиле Volvo FH 2018 год. Для примера поищем обороты двигателя.

Воспользуемся документом FMS Standard, в котором необходимо найти описание параметра оборотов двигателя. В документе он фигурирует под номером PGN F004. Обратите внимание, что в FMS документации поле CAN ID указано как PGN (Parameter Group Number). В переводе означает "Номер группы параметров". Слово "группа" здесь не зря используется. Ведь в одном кадре сообщения может быть 2 и более параметра, располагающихся в разных битовых пространствах.

PGN в FMS документе указываются без арбитража, поля CRC и ACK, так как они уникальны в рамках одного автомобиля.

На скрине выше видим, что нам нужен 4 и 5 байты кадра, чтобы считать обороты двигателя. 3 байт нам пока не нужен, там располагается информация о крутящем моменте двигателя. В документе также указан необходимый нам коэффициент для конвертации произвольного числа в об/мин - 0,125.

Заводим двигатель автомобиля и запускаем CAN Spy. Находим нужный нам кадр - ID 0cf00400.

Столбец ID - состоит из:

  • поле арбитража ( 0c)

  • идентификатор сообщения CAN ID (f004)

  • поле для обнаружение ошибок (CRC) + слот распознавания (ACK) (00)

Столбцы D0, D1…. D7 - байты данных от 0 до 7. Здесь и располагаются полезные для нас данные, которые можно использовать в телематике. В нашем случае, в идентификаторе 0cf00400 в D3 и D4 передаются обороты двигателя автомобиля. Обратите внимание, что в FMS документе подсчет байтов идет от 1 до 8, а в CAN Spy от 0 до 7. Т.е. идет смещение на единицу.

Все данные указаны в формате HEX (в шестнадцатеричной16-й системе счисления). Для перевода в DEC (в десятичную10-ю систему счисления) можно воспользоваться калькулятором в режиме "Программист", который доступен на любом ПК с ОС Windows.

Число 214E (чтение начинаем от D4 к D3) конвертируем в десятичное. Получаем число 8526:

Полученное нами число в DEC формате умножаем на коэффициент 0,125, который указан в FMS-документации (скрин выше).

Итого:

8526 * 0,125 = 1065,75 об/мин

Одно из достоинств программы Navtelecom CAN Spy - это графический анализ любого кадра сообщения CAN, его байтов и битов данных. Есть возможность анализировать динамику изменения параметров CAN. В нашем случае это обороты двигателя тягача Volvo FH 2018 года:

В целом, как вы видите, с одной стороны всё просто, а с другой - не так уж однозначно. Нюансы есть. Их много.
И чтобы всё корректно и качественно сделать - всё это нужно понимать и учитывать.

Но я надеюсь, что теперь для Вас словосочетание "CAN-шина" будет понятнее и наполнено конкретными образами.

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