Формулы и правила,
которым можно доверять.
Практическое руководство по созданию вычисляемых сигналов и анализу автомобильных CSV-логов.
Быстрый старт
Вычисляемые каналы и правила анализа используют один язык выражений.
- Откройте CSV-лог.
- Нажмите Formula или Ctrl/⌘+F.
- Задайте имя, единицу измерения и выражение.
- Нажмите Create channel.
- Откройте Settings → Diagnostics.
- Выберите Configure diagnostic rules.
- Нажмите New rule.
- Настройте условия и запустите анализ повторно.
Общий язык выражений
Эти возможности доступны и в вычисляемых каналах, и в условиях правил.
[Engine Speed (rpm)]Название канала в квадратных скобкахMIN_RPMИмя из букв, цифр и знака _, не начиная с цифры0.5 · .5 · 1e-3Обычная или показательная запись+ − * / % ^Обычный порядок действий; его можно менять скобками> >= < <= == !=Результат — 1, если условие верно, иначе 0AND · OR · NOTОбъединение нескольких условийОбычные функции
abs(x)модуль числаmin(a, b, …)наименьшее значениеmax(a, b, …)наибольшее значениеavg(a, b, …)среднее аргументовsqrt(x)квадратный кореньpow(x, y)x в степени yclamp(x, min, max)ограничение диапазонаround(x)округлениеfloor(x)округление внизceil(x)округление вверхif(condition, yes, no)выбор по условиюНазвания каналов должны совпадать с показанными в приложении. Деление на ноль и недостаток данных для расчёта дают неопределённое значение.
Вычисляемые каналы
Новый канал рассчитывается для каждого отсчёта исходного лога.
Поместите точное название из лога, включая пробелы и единицы измерения, в квадратные скобки: [Boost Pressure Actual (bar)]. Проще нажать нужный канал в правой части редактора — ссылка вставится автоматически.
Поля редактора формул
Channel nameУникальное имя нового канала. На него могут ссылаться другие вычисляемые каналы.
UnitЕдиница измерения для подписи на графике. Автоматического пересчёта единиц нет.
ExpressionВыражение, которое рассчитывается для каждого отсчёта.
Reusable parametersИменованные числовые значения. Например, BAR_TO_PSI = 14.5038.
Простой пример
Имя: Ошибка наддува
Единица: bar
Выражение: [Boost Pressure Target (bar)] - [Boost Pressure Actual (bar)]Приложение запоминает созданные каналы и пытается восстановить их при открытии следующих логов. Если нужного исходного канала нет или его название отличается, вычислить результат не получится. Нельзя создавать замкнутые зависимости, когда каналы прямо или косвенно ссылаются друг на друга.
lag, delta, moving_avg, moving_min, moving_max и moving_sum. Подробности приведены в разделе «Оконные функции».Правила анализа лога
Правило находит непрерывные участки, в которых выполняются заданные условия.
В левой и правой частях условия можно использовать параметры, арифметику, обычные функции и все оконные функции. Например: moving_avg([boost.target] - [boost.actual], 10) > MAX_ERROR.
Как создать правило
- 1Откройте редактор
Settings → Diagnostics → Configure diagnostic rules, затем нажмите New rule.
- 2Добавьте условия
В режиме All conditions должны выполняться все условия, в Any condition — хотя бы одно.
- 3Задайте длительность
Короткие участки отбрасываются по Duration, а близкие участки объединяются по Cooldown.
- 4Ограничьте область полного газа
При включённом WOT area only учитываются только участки внутри найденных WOT-заездов.
- 5Запустите анализ
После сохранения нажмите Re-run diagnostics, чтобы применить изменения к текущему логу.
Основные поля
SeverityВажность найденного события: информационное, предупреждение или критическое.
WOT area onlyОставляет результаты только в автоматически найденных областях полного газа.
Duration, msМинимальное время непрерывного выполнения условий.
Cooldown, msНаибольший разрыв, при котором два участка объединяются.
Correlation window, msПромежуток для связывания близких по времени событий.
ParametersПороговые значения для условий. Имя меняется двойным щелчком.
Recommended channelsКаналы, которые полезно показать вместе с найденным событием.
Message / Possible causesОписание результата и возможные причины проблемы.
Пример правила для области WOT
Название: Отставание наддува от цели
Только область WOT: включено
Условие 1:
[boost.target] - [boost.actual] > MAX_ERROR
Условие 2:
[engine.rpm] > MIN_RPM
Параметры:
MAX_ERROR = 0.25
MIN_RPM = 2500
Минимальная длительность = 200 мс
Объединять разрывы до 300 мсДля подавления одиночных выбросов первое условие можно заменить на moving_avg([boost.target] - [boost.actual], 10) > MAX_ERROR. Если нужный канал не найден, правило не сможет проверить это условие.
Оконные функции
Общий набор функций для вычисляемых каналов и правил анализа.
Все перечисленные ниже функции работают как в выражении вычисляемого канала, так и в левой или правой части условия диагностического правила.
lag(expr, N)Значение выражения N отсчётов назад.Первые N значений не определены.delta(expr, N)Текущее значение минус значение N отсчётов назад.Первые N значений не определены.moving_avg(expr, N)Среднее по последним N отсчётам, включая текущий.Нужно полное окно без пропусков.moving_min(expr, N)Наименьшее значение среди последних N отсчётов.Нужно полное окно без пропусков.moving_max(expr, N)Наибольшее значение среди последних N отсчётов.Нужно полное окно без пропусков.moving_sum(expr, N)Сумма последних N отсчётов.Нужно полное окно без пропусков.В вычисляемом канале
// Сглаженное отклонение наддува за последние 10 отсчётов
moving_avg([Boost Target] - [Boost Actual], 10)
// Изменение оборотов относительно 5 отсчётов назад
delta([Engine Speed (rpm)], 5)В условии правила
Левая часть: moving_avg([boost.target] - [boost.actual], WINDOW)
Знак: >
Правая часть: MAX_ERROR
Параметры: WINDOW = 10, MAX_ERROR = 0.25Для lag и delta первые N строк не имеют достаточной истории. Для функций moving_* результат появляется после заполнения первого полного окна. Пропуск внутри окна делает результат этого окна неопределённым.
Почему названия каналов отличаются
В правилах используются единые имена, чтобы одно правило подходило для логов разных производителей.
Boost Pressure Actual (bar)сопоставление[boost.actual]Вычисляемый канал обращается к точному названию столбца текущего файла. Правило анализа использует короткое единое имя WOT Lab. Обычно приложение находит соответствие автоматически.
Если выбран не тот столбец или название вашего логгера не распознано, откройте Settings → Diagnostics → Map channels или нажмите Map channels в редакторе правил и выберите соответствие вручную. В списке доступны как исходные, так и вычисляемые каналы: результат формулы можно связать с единым именем и использовать в диагностических правилах.
Готовые примеры
Замените названия в квадратных скобках на названия каналов своего лога.
Ошибка наддува
[Boost Target] - [Boost Actual]Ошибка лямбды
[Lambda Actual] - [Lambda Target]Сглаженный сигнал
moving_avg([Fuel Pressure Actual], 20)Изменение за окно
delta([Engine Speed (rpm)], 5)Ограничение диапазона
clamp([Throttle Position], 0, 100)Условный сигнал
if([Engine Speed] > MIN_RPM, [Boost Actual], 0)