В тестировании автомобильной электроники и шинных сетей загрузка шины — ключевой показатель. Она как «пульс» сети: напрямую отражает занятость шины, разумность сетевого дизайна и риск перегрузки данными. В статье — как наблюдать загрузку шины в графике и на панели TSMaster.

Ключевые слова: загрузка шины, кривая в графике, отображение на панели, внутренние (endogenous) переменные.

1. Добавление функции статистики шины

В событие запуска C-скрипта добавьте com.enable_bus_statistics(true) — функция включает статистику параметров шины (рис. 1).

Включение статистики шины
Рис. 1. Включение статистики шины в C-скрипте

2. Внутренние переменные статистики шины

Внутренние системные переменные TSMaster генерируются автоматически вслед за внутренними модулями системы. Например, для статистики шины: если добавлено устройство CAN1, динамически создаётся статистическая информация StaticsCAN1; удалите устройство CAN1 — и эта статистика исчезнет. То есть по умолчанию модуль статистики запускается вместе с TSMaster: если приложение TSMaster не запущено, модуль статистики не работает и в системных переменных ничего не видно. Через API C-мини-программы модуль статистики можно запустить и получать связанные системные переменные без запуска проекта.

После выполнения C-скрипта текущая переменная загрузки шины находится в «Системные переменные» → «Внутренние переменные» (рис. 2).

Переменная загрузки шины
Рис. 2. Переменная загрузки шины во внутренних переменных

3. Наблюдение загрузки шины в графике

Добавьте системную переменную загрузки шины в окно графика. Например, после загрузки сигнала EngSpeed из DBC её можно наблюдать в графике (рис. 3).

Загрузка шины в графике
Рис. 3. Кривая загрузки шины в окне графика

4. Наблюдение загрузки шины на панели

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

Пример 1: привяжите загрузку шины к элементу «график» на панели или используйте поле ввода-вывода, привязанное к переменной загрузки (рис. 4).

Загрузка шины на панели
Рис. 4. Загрузка шины на панели: график и поле ввода-вывода

Пример 2: автоматическое отображение разных индикаторов в зависимости от загрузки шины.

  1. Шаг 1. Задайте для кнопки с изображением 3 картинки со значениями Value 1, 2, 3 и привяжите её к переменной Bus_load_status, созданной в C-мини-программе. Три изображения (Image) показывают состояния: «загрузка шины ниже 30%», «загрузка шины 30–80%» и «внимание: загрузка шины 100%» (рис. 5, 6).
  2. Шаг 2. В C-мини-программе через событие приёма CAN читайте значение системной переменной загрузки шины и определяйте состояние. Событие отправки срабатывает после каждой успешной передачи сообщения; при загрузке выше 80% дополнительно отслеживается спадающий фронт EngSpeed, и в момент фронта оставляется комментарий. Код:

if (ACANFD->FIdxChn != CH2) return; // фильтр канала
TEngineData_2 EngineData_2;
EngineData_2.init();
EngineData_2.FCAN = *ACANFD; // в callback присваивайте FCAN данными ACAN
double a;
app.get_system_var_double("StatisticsCAN2.BusLoad", &a);
if (a <= 30) { Bus_load_status.set(1); }
else if (a > 30 && a < 80) { Bus_load_status.set(2); }
else if (a > 80) {
  Bus_load_status.set(3);
  if (EngineData_2.EngSpeed < v) { app.write_realtime_comment("falling edg caught"); }
}
v = EngineData_2.EngSpeed;

Настройка индикаторов
Рис. 5. Настройка кнопки с изображениями состояний
Код определения состояния
Рис. 6. Привязка переменной и код определения состояния

Результат теста примера (рис. 7):

Результат теста
Рис. 7. Результат работы примера