Работа с CAN-шиной автомобиля Mercedes Actros
Совсем недавно мы столкнулись с интересной ситуацией, связанной с получением данных из CAN-шины автомобиля Mercedes Actros. Заказчик хотел получить в отчете системы мониторинга Wialon стандартный пул CAN-параметров: пробег, расход топлива, уровень топлива, температуру воздуха и др. Вроде бы кейс несложный и в чем-то даже тривиальный, но при обработке CAN-данных в системе мониторинга Wialon, мы столкнулись с проблемой получения некорректного CAN-пробега.

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

Ну а если Вы уже знакомы с этой статьей, то можете смело переходить к чтению нашего нового кейса:)
ДАНО

Клиент с автомобилем Mercedes Actros 2015 года выпуска, который в отчете системы мониторинга получал некорректный CAN-пробег автомобиля. Основная причина в том, что от терминала мы периодически получали разные показания CAN-пробега.

Реальный пробег, который отображается на панели приборов автомобиля не совпадал с данными, которые передавал GPS-трекер. Выглядело это следующим образом:
Пробег в красном контуре 861799 км. — некорректный. Пробег в зеленом контуре 861889 км. — верный и совпадал с показаниями на панели приборов автомобиля:
С каждым новым сообщением от GPS-устройства мы получали рандомно скачущие показания пробега. Это очень сильно искажало отчетные данные, которые мешали клиенту анализировать суммарные пробеги за рейс.

Нужно было быстро найти решение и предоставить клиенту верные показания пробега тягача.
РЕШЕНИЕ

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

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

Обратимся все к той же известной нам FMS-документации и найдем группу параметров (PGN), в которой должен располагаться суммарный пробег автомобиля.

High Resolution Vehicle Distance (PGN FEC1) - пробег автомобиля с высоким разрешением.
Нас интересуют 1, 2, 3 и 4 байты идентификатора FEC1. Именно в них и располагается необходимый нам суммарный пробег автомобиля.

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

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

  • определять наличие данных в шине CAN, скорость обмена, тип и номер идентификатора сообщения (CAN ID).
  • производить анализ CAN сообщений как в табличном, так и в графическом виде.
  • записывать и воспроизводить логи CAN-шины автомобиля. Это удобно в случае, когда нет времени на анализ потока данных. Мастер оперативно записывает логи CAN и сразу отпускает автомобиль, чтобы не задерживать работу водителя. Далее логи передаются в отдел развития компании для дешифровки данных.
Все материалы о работе с CAN Spy можно найти на сайте производителя Навтелеком, в разделе Wiki. Также, довольно подробно об этом модуле мы писали в своей предыдущей статье.

Двигаемся дальше, запустим трассировку сообщений:
И что мы видим на скрине выше? Мы наблюдаем целых 3 идентификатора с одинаковым номером PGN FEC1!

О чем это говорит?

Это говорит о том, что в CAN-шине рассматриваемого нами автомобиля показания пробега передаются в нескольких кадрах с одинаковым PGN FEC1.

GPS-устройство, которое считывает данные с CAN-шины основываясь только на номере PGN FEC1 будет передавать поочередно на сервер мониторинга Wialon все 3 схожих идентификатора. Ведь у них одинаковые значения PGN. Отличаются они только значением последнего байта: полем обнаружения ошибок (CRC) и слотом распознавания (ACK).

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

Давайте изучим каждый из идентификаторов и найдем необходимый нам кадр с пробегом 861889 км, который отображается для водителя на панели приборов.
Первый вариант

Начнем с кадра под номером 18fec134.

Заводим двигатель автомобиля и запускаем анализатор сообщения в CAN Spy и через маску данных оставляем только 1, 2, 3, и 4 байты данных, остальные фильтруем. Не забываем про коэффициент, который необходим для конвертации получаемого значения из CAN-шины в понятные нам единицы измерения — километры.

Вот где он указывается:
В FMS документации указано, что на 1 бит данных приходится 5 метров. Значит, чтобы перевести в километры, нам необходимо умножить на коэффициент 0,005, или указать 1/200 в строке "Масштаб" модуля CAN Spy:
В идентификаторе под номером 18fec134 мы видим пробег со значением 861799 км. Этот идентификатор нам не подходит, т.к. содержит пробег который не соответствует показаниям панели приборов автомобиля. GPS-устройство со стандартными настройками CAN-шины "подхватывает" это значение и, вместе с другими показателями, общим массивом, передает на сервер мониторинга Wialon.
Второй вариант

Кадр с номером 18fec117.

Также запускаем трассировку сообщений в анализаторе CAN Spy и через маску данных оставляем только 1, 2, 3, и 4 байты данных (на скрине M0, M1, M3 и M4), остальные байты фильтруем.
И вот уже в этом кадре мы находим нужный нам пробег, соответствующий показаниям панели приборов автомобиля - 861889 км.
Но что с этим делать дальше?

Для того, чтобы считать показания пробега из указанного идентификатора, нам необходимо в настройках терминала указать полный 29-битный адрес кадра (фрейма) с нужным нам номером 18fec117. Здесь будет указан и его арбитраж, и CAN ID, и CRC, и слот распознавания ACK. Только так в дальнейшем устройство сможет безошибочно обращаться к одному и тому же кадру в котором располагается пробег соответствующий показаниям панели приборов.

Ранее терминал был настроен только на поиск CAN ID с номером PGN FEC1, что влекло за собой ошибочное чтение 3-х разных фреймов в которых располагались отличные друг от друга пробеги.

Как это выглядело раньше:
Как выглядит после перенастройки:

У нас еще есть третий вариант - это идентификатор 18fec1ee. Его в принципе уже нет смысла рассматривать, т.к. мы нашли нужный нам идентификатор. Но ради интереса проанализируем и его.

Запускаем наш любимый CAN Spy и смотрим, что же у нас там находится.

Видим, что здесь располагается пробег, который также полностью соответствует показаниям панели приборов. По итогу у нас есть выбор: ссылаться на идентификатор с номером 18fec1ee или на идентификатор 18fec1ee. Особой разницы нет. И тот, и тот дадут положительный результат. А всю "картину" нам портил идентификатор с номером 18fec134.
ИТОГО

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

По каким причинам производитель автомобиля Mercedes Actros добавил в протокол FMS J1939 несколько кадров с одинаковым значением PGN и отличными друг от друга пробегами нам пока неизвестно. Но нужно понимать, что возможности современных GPS-устройств позволяют самостоятельно анализировать потоки данных из CAN-шины автомобиля и на их основе создавать свои алгоритмы и конфигурации.

В итоге клиент оперативно получил актуальную, а самое главное — корректную информацию о пробеге автомобиля. К пробегу были добавлены и другие параметры: расход топлива, уровень топлива, обороты, температура двигателя и многое другое.

Интересно и то, что мы самостоятельно, и главное быстро, не обращаясь к разработчикам GPS-оборудования, смогли понять суть проблемы и оперативно ее устранить. Без необходимости создания специальных прошивок!

Команда Wialon Operator всегда на связи, обращайтесь, ведь решение есть всегда!