EXZOTRON knowledge base
ECOM TTelegram MMAX Вход
Умный инженер Exzotron knowledge
Здравствуйте. Задайте вопрос по оборудованию, настройке или документации Exzotron.

Расход топлива по мгновенному расходу (PGN FEF2, SPN183/184)

Расход топлива по мгновенному расходу (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. Как считается расход (алгоритм)#

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

liters = ((rate_prev + rate_cur) / 2) × dt / 3600

Пояснения:

  • Почему среднее, а не просто «текущее значение × время»: расход между сообщениями меняется плавно (разгон/торможение/остановка). Если считать только по последней точке, провал показания до 0 в момент остановки задним числом обнулил бы расход за весь предыдущий интервал, хотя фактически расход снижался постепенно.
  • Ноль — не значит «нет данных»: 0 л/ч на заглушенном или простаивающем двигателе — валидное показание и корректно участвует в расчёте (даёт 0 литров за интервал).
  • Разрыв связи: если между двумя сообщениями прошло больше 300 секунд (5 минут), интервал не досчитывается вообще — мы не знаем, что происходило с двигателем всё это время, и не должны экстраполировать последнее известное значение на длинный промежуток.
  • Итог (накопительный расход) — виртуальный: total = предыдущий total + literss интервала. В отличие от накопительного счётчика реального прибора, это число считается самой системой и растёт непрерывно, пока пересчёт идёт без перерывов по всей истории объекта.

3. Настройка датчика — пошагово#

Открывается через свойства объекта → вкладка «Датчики» → «Добавить»/«Редактировать».

Шаг 1. Вкладка «Основная»#

Тип датчика — «Расход топлива двигателем». Способ расчёта — «Мгновенный расход, л/ч».

Редактирование датчика
Основная
Входы
События
Тарировка
Тип датчика
Расход топлива двигателем
Название
Расход топлива двигателем
Способ расчёта
Мгновенный расход, л/ч

Шаг 2. Вкладка «Входы» — выбор источника (PGN FEF2 / SPN183)#

«Первичный тег» — тот CAN-регистр, куда терминал кладёт SPN183 для этой конкретной техники. Список тегов зависит от протокола/устройства; название вида «CAN16BITRx» — просто порядковый номер 16-битного регистра, а не признак содержимого.

Редактирование датчика
Основная
Входы
События
Тарировка
Первичный тег
CAN16BITR1 (CAN16BITR1)
Проверка по журналу принятых данных, ожидаемое поведение:
Двигатель выключен (обороты=0) строго 0
Холостой ход (обороты>0, скорость=0) небольшое >0
Движение растёт с нагрузкой

Шаг 3. Вкладка «Тарировка» — масштаб (формула)#

SPN183 передаётся в «сырых» единицах по 0.05 л/ч на 1 бит (стандарт SAE J1939) — сырое число нужно умножить на 0.05, чтобы получить литры в час. В поле «Формула» указывается x*0.05.

⚠️ Разделитель дробной части — точка, не запятая: x*0.05, а не x*0,05. Запятая ломает формулу без явной ошибки — расчёт просто перестаёт обновляться.
Редактирование датчика
Основная
Входы
События
Тарировка
Режим
Формула
Формула
x*0.05
Канал дельты по первичным
Расход топлива относительный, л

4. Проверка и калибровка коэффициента#

0.05 — стандартное значение по спецификации SAE J1939, но некоторые терминалы/ЭБУ отдают SPN183 с другим фактическим масштабом. Перед вводом в эксплуатацию обязательно сверьте расход по этому датчику с расходом по баку (отчёт «Расход топлива») за один и тот же день, где не было заправок/ сливов (или они корректно учтены):

k_new = k_current × (расход_по_баку / расход_по_ДВС)

Если новый коэффициент сильно отличается от 0.05 (в разы, а не на 10–15%) — вероятнее всего, выбран не тот первичный тег (см. шаг 2), а не проблема масштаба.

5. Частые ошибки#

  • Выбран не тот CAN-тег. Если на заглушенном двигателе значение не строго 0, или показание чётко совпадает со скоростью автомобиля (а не с оборотами/нагрузкой) — это не SPN183, нужен другой регистр.
  • Запятая вместо точки в формуле — расчёт молча перестаёт обновляться (см. предупреждение выше).
  • Частичный пересчёт истории. «Итог» — накопительная величина; чтобы она была непрерывной, пересчитывать нужно ОТ НАЧАЛА истории объекта одним проходом (или регулярно, без больших пропусков), а не только «за вчера»/«за сегодня» изолированно.