Расход топлива по мгновенному расходу (PGN FEF2, SPN183/184)
Руководство описывает второй способ подключения датчика «Расход топлива двигателем» — расчёт по мгновенному расходу л/ч, который двигатель передаёт по CAN-шине в пакете PGN 0xFEF2 (SAE J1939, «Fuel Economy (Liquid)»). Это альтернатива обычному накопительному счётчику (SPN250/SPN182) — используется, когда ЭБУ автомобиля не отдаёт нарастающий счётчик литров, а отдаёт только текущую скорость расхода в реальном времени.
1. Принцип: что такое PGN FEF2#
PGN 0xFEF2 — стандартный пакет J1939, который двигатель шлёт каждые 100 мс - 1 с (зависит от прошивки ЭБУ). В нём два параметра:
| SPN | Параметр | Разрешение | В проекте |
|---|---|---|---|
| 183 | Engine Fuel Rate — мгновенный расход топлива, л/ч | 0.05 л/ч на 1 бит (по спецификации SAE J1939) | обычно CAN16BITR1 (может отличаться по устройству/протоколу) |
| 184 | Engine Instantaneous Fuel Economy — мгновенная экономичность, км/л | 1/512 км/л на 1 бит | обычно CAN16BITR2; в текущей реализации не используется |
Важно: Galileosky и аналогичные терминалы просто копируют сырое 16-битное значение из PGN FEF2 в один из своих технических тегов (CAN16BITR0, CAN16BITR1, CAN16BITR2...) — какой именно тег получит SPN183, зависит от настройки CAN-шаблона конкретного терминала под конкретную марку техники. Имя тега само по себе ничего не говорит о содержимом — перед настройкой обязательно проверьте сырые данные в «Журнале принятых данных»: у настоящего SPN183 при заглушенном двигателе (обороты = 0) значение всегда строго 0, на холостом ходу — небольшое ненулевое число, а при движении растёт с нагрузкой двигателя.
2. Как считается расход (алгоритм)#
Мгновенный расход — это скорость (л/ч), а не накопленное количество литров. Чтобы получить литры между двумя соседними сообщениями, система интегрирует скорость по времени методом трапеций (среднее двух соседних показаний, умноженное на прошедшее время):
Пояснения:
- Почему среднее, а не просто «текущее значение × время»: расход между сообщениями меняется плавно (разгон/торможение/остановка). Если считать только по последней точке, провал показания до 0 в момент остановки задним числом обнулил бы расход за весь предыдущий интервал, хотя фактически расход снижался постепенно.
- Ноль — не значит «нет данных»: 0 л/ч на заглушенном или простаивающем двигателе — валидное показание и корректно участвует в расчёте (даёт 0 литров за интервал).
- Разрыв связи: если между двумя сообщениями прошло больше 300 секунд (5 минут), интервал не досчитывается вообще — мы не знаем, что происходило с двигателем всё это время, и не должны экстраполировать последнее известное значение на длинный промежуток.
- Итог (накопительный расход) — виртуальный:
total = предыдущий total + literss интервала. В отличие от накопительного счётчика реального прибора, это число считается самой системой и растёт непрерывно, пока пересчёт идёт без перерывов по всей истории объекта.
3. Настройка датчика — пошагово#
Открывается через свойства объекта → вкладка «Датчики» → «Добавить»/«Редактировать».
Шаг 1. Вкладка «Основная»#
Тип датчика — «Расход топлива двигателем». Способ расчёта — «Мгновенный расход, л/ч».
Шаг 2. Вкладка «Входы» — выбор источника (PGN FEF2 / SPN183)#
«Первичный тег» — тот CAN-регистр, куда терминал кладёт SPN183 для этой конкретной техники. Список тегов зависит от протокола/устройства; название вида «CAN16BITRx» — просто порядковый номер 16-битного регистра, а не признак содержимого.
| Двигатель выключен (обороты=0) | строго 0 |
| Холостой ход (обороты>0, скорость=0) | небольшое >0 |
| Движение | растёт с нагрузкой |
Шаг 3. Вкладка «Тарировка» — масштаб (формула)#
SPN183 передаётся в «сырых» единицах по 0.05 л/ч на 1 бит (стандарт SAE J1939) — сырое число нужно умножить на 0.05, чтобы получить литры в час. В поле «Формула» указывается x*0.05.
x*0.05, а не x*0,05. Запятая ломает формулу без явной ошибки — расчёт просто перестаёт обновляться.
4. Проверка и калибровка коэффициента#
0.05 — стандартное значение по спецификации SAE J1939, но некоторые терминалы/ЭБУ отдают SPN183 с другим фактическим масштабом. Перед вводом в эксплуатацию обязательно сверьте расход по этому датчику с расходом по баку (отчёт «Расход топлива») за один и тот же день, где не было заправок/ сливов (или они корректно учтены):
Если новый коэффициент сильно отличается от 0.05 (в разы, а не на 10–15%) — вероятнее всего, выбран не тот первичный тег (см. шаг 2), а не проблема масштаба.
5. Частые ошибки#
- Выбран не тот CAN-тег. Если на заглушенном двигателе значение не строго 0, или показание чётко совпадает со скоростью автомобиля (а не с оборотами/нагрузкой) — это не SPN183, нужен другой регистр.
- Запятая вместо точки в формуле — расчёт молча перестаёт обновляться (см. предупреждение выше).
- Частичный пересчёт истории. «Итог» — накопительная величина; чтобы она была непрерывной, пересчитывать нужно ОТ НАЧАЛА истории объекта одним проходом (или регулярно, без больших пропусков), а не только «за вчера»/«за сегодня» изолированно.