Под статичными числовыми параметрами понимаются параметры, которые изменяются медленно и требуют длительного воздействия на систему. В отличие от динамических, их нельзя быстро «прогнать» через весь диапазон значений.
Примеры: уровень топлива (сливы/заливы), температура двигателя (прогрев и остывание), пробег (поездка).
Для таких параметров важно заранее спланировать запись логов, чтобы зафиксировать разные состояния и получить достаточный разброс значений.
В отличие от динамических параметров, здесь важна не форма графика, а закономерность изменения данных между логами.
Смысл записи логов — зафиксировать одно и то же состояние системы при разных значениях параметра.
В отличие от динамических параметров, здесь важна не форма графика, а изменение значения между логами.
Основное правило:
каждый лог должен отличаться только значением целевого параметра, все остальные условия — по возможности одинаковые.
Универсальный подход:
Важно:
1.Изменения должны быть заметными (не «+1 единица», а ощутимый шаг).
2.Обязательно фиксировать значения на приборной панели (желательно с фото).
Пример: пробег
В результате получаем два состояния с известной разницей, что позволяет найти соответствующее изменение в CAN.
При анализе логов мы учитываем какие колебания допустимы в данных, а какие нет. Мы точно знаем что если логи снимали с неподвижного авто, данные по пробегу не могут изменяться; данные по моточасам и абсолютному расходу топлива не могут уменьшаться , только расти или устанавливаться в одном значении. Данные по температуре двигателя или уровню топлива могут немного колебаться.
Снятые логи добавляем в сравнение во вкладке Анализировать лог и в сводной таблице ищем байты содержащие маркеры сравниваемых логов.
Сравниваются 5 логов, снятые при разном уровне топлива, соответственно, в первую очередь, рассматриваем байты, содержащие 5 цветов.

Теперь каждый подходящий маркер рассматриваем отдельно.
Разберем на примере топлива. У нас есть логи, между которыми производилась заправка. Уровень топлива на момент записи каждого лога:
Ищем данные, корректно описывающие изменение уровня топлива.
"Мусорные" данные как в сообщении 21F байте D0 мы отбрасываем.

Данные в сообщении 517 байт D2 довольно точно соответствуют описанию логов: графики идут последовательно от меньшего к большему, шаг соответствует увеличению уровня топлива.
Добавляем его в кандидаты и смотрим остальные байты.

Байт D4 сообщения 517 не точно описывает изменение данных: часть данных пятого лога говорят о меньшем уровне топлива, чем в четвертом логе; данные третьего лога передают значение больше всех остальных, но это может быть код ошибки или отсутствия данных, и его можно отбросить диапазоном допустимых значений.
Этот кандидат качественно хуже предыдущего, поэтому мы его не возьмем в работу, но если бы не было кандидатов лучше, его можно было бы взять в работу.

Кандидаты 518 D6 и 519 D4 имеют обратную зависимость.

Они могут передавать данные о свободном месте в баке топлива. Их тоже можно использовать для отображения уровня топлива с использованием отрицательного коэффициента.
519 D5 имеет аналогичные 517 D2 графики, но в другом масштабе.

519 D5 и 517 D2 берем в работу.

Оба варианта верно отражают уровень топлива, но для ID 519 требуется коэффициент 2/3, а в ID 517 значение передается без преобразования. Можно выбрать любой вариант.
Если после анализа байтов со всеми маркерами не нашли нужных реакций, переходим к байтам с меньшим количеством цветов, не всегда заправка приведет к изменению данных в CAN-шине, параметр может передаваться с некоторым шагом (например, 0%-25%-50%-75%-100%) и одной итерации может не хватить, чтобы переступить порог.
Шаги по настройке параметров пропустим, они не отличаются от настройки параметра в предыдущей статье. Приведем итоговый результат.

У нас есть два лога, снятых при значении пробега 113645 и 113960.
Перед поиском и анализом данных оценим изменение в данных.
Если перевести значения в 16-ую систему, мы получим следующее:
113645 = 1BBED
113960 = 1BD28
Получаем, что даже без коэффициента значение пробега занимает 2 целых байта и полубайт, в CAN-шине значение не может занимать меньше разрядов, но может больше за счет масштабирования.
Можно найти данные по пробегу с помощью поиска сообщений.
Логика такова, что мы ищем число в том виде, в котором оно может передаваться в CAN-шине. В поле DEC вводится значение с приборной панели и далее подбирается преобразование, с которым оно может передаваться в CAN-шине.

Значение может быть с коэффициентом 10, 100, 25;
Может занимать 4 байта, а может 3, тогда с маской на 4 байта FF не удастся его найти, поэтому нужно учитывать длину значения в байтах.
Этот способ не гарантированный, потому что нужно угадать и подобрать вид, в котором передается параметр в шине (маска, порядок байт, коэффициент).
Вариант с графиками позволяет гарантированно увидеть отличия в данных, чтобы взять их в анализ. Мы ищем данные, которые изменяются монотонно и пропорционально изменению параметра между логами.
В отличие от примера с уровнем топлива, где для анализа было 5 логов, тут круг поиска будет заметно шире.

3FC и 4A5 мы отбрасываем, поведение данных не соответствует пробегу.


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

В 4B6 есть изменение в D6 и D7, но D5 имеет значение FF, это значит, что этот байт не используется для передачи данных. А как мы определили ранее нам нужно минимум еще пол байта под данные.

611 удовлетворяет нашим условиям и более такого содержит байты D5-D7 значение 1BBED = 113645.

Настройка параметра будет следующая:

Почему коэффициент 200, если в шине параметр передается без масштабирования?
Это особенность параметра FLEX, пробег измеряется в 0,005 км/бит, поэтому, чтобы привести его к целому значению, надо домножить на 200. Аналогично для sc3: «Полный расход топлива, 0.05 л» [UInt32], sc1: «Уровень топлива в баке, 0.1 л» [UInt16].
Ориентируйтесь на столбец FLEX в таблице с результатом, в нем вы должны получить значение с приборной панели.
Скачайте архив с логами и попробуйте самостоятельно найти пробег.
Значение пробега указано в названии файлов.
